ETH Price: $2,473.15 (+0.71%)
 

Overview

Max Total Supply

10,000,000,000 sFLOKI

Holders

286

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,134,183.384068919578790526 sFLOKI

Value
$0.00
0xe703d6f26f68f23faa215c67cfb02f2b65998752
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:
sFLOKI

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-09
*/

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

/**
https://medium.com/@sFLOKI
https://twitter.com/sFloki_ERC
https://t.me/sFLOKIENTRY

Web v1: https://sFloki.com/

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

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

    function WETH() external pure returns (address);

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

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountToken, uint amountETH);

    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactETHForTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function swapTokensForExactETH(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactTokensForETH(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapETHForExactTokens(
        uint amountOut,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function quote(
        uint amountA,
        uint reserveA,
        uint reserveB
    ) external pure returns (uint amountB);

    function getAmountOut(
        uint amountIn,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountOut);

    function getAmountIn(
        uint amountOut,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountIn);

    function getAmountsOut(
        uint amountIn,
        address[] calldata path
    ) external view returns (uint[] memory amounts);

    function getAmountsIn(
        uint amountOut,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountETH);

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 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
            functionCallWithValue(
                target,
                data,
                0,
                "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"
        );
        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return
            verifyCallResultFromTarget(
                target,
                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) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return
            verifyCallResultFromTarget(
                target,
                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) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(
        bytes memory returndata,
        string memory errorMessage
    ) private pure {
        if (returndata.length > 0) {
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

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

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

    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

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

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

    function totalSupply() external view returns (uint256);

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

    function transfer(address to, 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transfer.selector, to, value)
        );
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
        );
    }

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.approve.selector, spender, value)
        );
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 oldAllowance = token.allowance(address(this), spender);
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(
                token.approve.selector,
                spender,
                oldAllowance + value
            )
        );
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(
                oldAllowance >= value,
                "SafeERC20: decreased allowance below zero"
            );
            _callOptionalReturn(
                token,
                abi.encodeWithSelector(
                    token.approve.selector,
                    spender,
                    oldAllowance - value
                )
            );
        }
    }

    function forceApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        bytes memory approvalCall = abi.encodeWithSelector(
            token.approve.selector,
            spender,
            value
        );

        if (!_callOptionalReturnBool(token, approvalCall)) {
            _callOptionalReturn(
                token,
                abi.encodeWithSelector(token.approve.selector, spender, 0)
            );
            _callOptionalReturn(token, approvalCall);
        }
    }

    function safePermit(
        IERC20Permit token,
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal {
        uint256 nonceBefore = token.nonces(owner);
        token.permit(owner, spender, value, deadline, v, r, s);
        uint256 nonceAfter = token.nonces(owner);
        require(
            nonceAfter == nonceBefore + 1,
            "SafeERC20: permit did not succeed"
        );
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(
            data,
            "SafeERC20: low-level call failed"
        );
        require(
            returndata.length == 0 || abi.decode(returndata, (bool)),
            "SafeERC20: ERC20 operation did not succeed"
        );
    }

    function _callOptionalReturnBool(
        IERC20 token,
        bytes memory data
    ) private returns (bool) {
        (bool success, bytes memory returndata) = address(token).call(data);
        return
            success &&
            (returndata.length == 0 || abi.decode(returndata, (bool))) &&
            Address.isContract(address(token));
    }
}

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

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

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

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        _status = _NOT_ENTERED;
    }

    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;

            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        unchecked {
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;

            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

contract sFLOKI is Ownable, ReentrancyGuard, ERC20 {
    using SafeERC20 for IERC20;

    uint256 public liquidityTaxBuy;
    uint256 public liquidityTaxSell;

    uint256 public marketingTaxBuy;
    uint256 public marketingTaxSell;

    uint256 public immutable denominator;

    uint256 public liquidityTokenAmount;
    uint256 public marketingTokenAmount;

    address public marketingWallet;

    bool private swapping;
    uint256 public swapTokensAtAmount;
    bool public isSwapBackEnabled;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    uint256 public maxWalletLimit;

    mapping(address => bool) private _isAutomatedMarketMakerPair;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedFromMaxWalletLimit;

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

    event UpdateBuyTax(uint256 liquidityTaxBuy, uint256 marketingTaxBuy);
    event UpdateSellTax(uint256 liquidityTaxSell, uint256 marketingTaxSell);
    event UpdateMarketingWallet(address indexed marketingWallet);
    event UpdateMaxWalletLimit(uint256 maxWalletLimit);
      event UpdateExcludeFromMaxWalletLimit(
        address indexed account,
        bool isExcluded
    );
    event UpdateSwapTokensAtAmount(uint256 swapTokensAtAmount);
    event UpdateSwapBackStatus(bool status);
    event UpdateAutomatedMarketMakerPair(address indexed pair, bool status);
    event UpdateExcludeFromFees(address indexed account, bool isExcluded);

    constructor() ERC20("STAKED FLOKI", "sFLOKI") {
        _mint(owner(), 10_000_000_000 * (10 ** 18));

        liquidityTaxBuy = 0;
        liquidityTaxSell = 0;

        marketingTaxBuy = 2000;
        marketingTaxSell = 2000;

        denominator = 10_000;

        marketingWallet = 0x0Fe0DD81718F6e48B877B9D3E0b241eBd7b8D76c;

        swapTokensAtAmount = totalSupply() / 100_000;
        isSwapBackEnabled = true;

        address router = getRouterAddress();
        uniswapV2Router = IUniswapV2Router02(router);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        maxWalletLimit = 200;

        _isAutomatedMarketMakerPair[address(uniswapV2Pair)] = true;

        _isExcludedFromMaxWalletLimit[address(0xdead)] = true;
        _isExcludedFromMaxWalletLimit[address(owner())] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true;
        _isExcludedFromMaxWalletLimit[address(uniswapV2Pair)] = true;

        _isExcludedFromFees[address(0xdead)] = true;
        _isExcludedFromFees[address(owner())] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[address(uniswapV2Router)] = true;
    }

    receive() external payable {}

    fallback() external payable {}

    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function getRouterAddress() public view returns (address) {
        if (block.chainid == 56) {
            return 0x10ED43C718714eb63d5aA57B78B54704E256024E;
        } else if (block.chainid == 97) {
            return 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
        } else if (block.chainid == 1 || block.chainid == 5) {
            return 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else {
            revert("Cannot found router on this network");
        }
    }

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim native tokens");

        if (token == address(0x0)) {
            payable(msg.sender).transfer(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.safeTransfer(msg.sender, balance);
    }

    function setBuyTax(
        uint256 _liquidityTaxBuy,
        uint256 _marketingTaxBuy
    ) external onlyOwner {
        require(
            liquidityTaxBuy != _liquidityTaxBuy ||
                marketingTaxBuy != _marketingTaxBuy,
            "Buy Tax already on that amount"
        );
        require(
            _liquidityTaxBuy + _marketingTaxBuy <= 4_000,
            "Buy Tax cannot be more than 10%"
        );

        liquidityTaxBuy = _liquidityTaxBuy;
        marketingTaxBuy = _marketingTaxBuy;

        emit UpdateBuyTax(_liquidityTaxBuy, _marketingTaxBuy);
    }

    function setSellTax(
        uint256 _liquidityTaxSell,
        uint256 _marketingTaxSell
    ) external onlyOwner {
        require(
            liquidityTaxSell != _liquidityTaxSell ||
                marketingTaxSell != _marketingTaxSell,
            "Sell Tax already on that amount"
        );
        require(
            _liquidityTaxSell + _marketingTaxSell <= 4_000,
            "Sell Tax cannot be more than 10%"
        );

        liquidityTaxSell = _liquidityTaxSell;
        marketingTaxSell = _marketingTaxSell;

        emit UpdateSellTax(_liquidityTaxSell, _marketingTaxSell);
    }

    function setMarketingWallet(address _marketingWallet) external onlyOwner {
        require(
            _marketingWallet != marketingWallet,
            "Marketing wallet is already that address"
        );
        require(
            _marketingWallet != address(0),
            "Marketing wallet cannot be the zero address"
        );
        require(
            !isContract(_marketingWallet),
            "Marketing wallet cannot be a contract"
        );

        marketingWallet = _marketingWallet;
        emit UpdateMarketingWallet(_marketingWallet);
    }

    function setSwapTokensAtAmount(uint256 amount) external onlyOwner {
        require(
            swapTokensAtAmount != amount,
            "SwapTokensAtAmount already on that amount"
        );
        require(
            amount >= totalSupply() / 1_000_000,
            "Amount must be equal or greater than 0.000001% of Total Supply"
        );

        swapTokensAtAmount = amount;

        emit UpdateSwapTokensAtAmount(amount);
    }

    function toggleSwapBack(bool status) external onlyOwner {
        require(isSwapBackEnabled != status, "SwapBack already on status");

        isSwapBackEnabled = status;
        emit UpdateSwapBackStatus(status);
    }

    function setMaxWalletLimit(uint256 amount) external onlyOwner {
        require(
            maxWalletLimit != amount,
            "maxWalletLimit already on that amount"
        );
        require(
            amount >= 10 && amount <= 10_000,
            "maxWalletLimit cannot be below 0.1% of totalSupply (10) or more than 100% of totalSupply (10000)"
        );

        maxWalletLimit = amount;

        emit UpdateMaxWalletLimit(amount);
    }


    function setAutomatedMarketMakerPair(
        address pair,
        bool status
    ) external onlyOwner {
        require(
            _isAutomatedMarketMakerPair[pair] != status,
            "Pair address is already the value of 'status'"
        );
        require(pair != address(uniswapV2Pair), "Cannot set this pair");

        _isAutomatedMarketMakerPair[pair] = status;

        emit UpdateAutomatedMarketMakerPair(pair, status);
    }

    function isAutomatedMarketMakerPair(
        address pair
    ) external view returns (bool) {
        return _isAutomatedMarketMakerPair[pair];
    }

    function setExcludeFromFees(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedFromFees[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromFees[account] = excluded;

        emit UpdateExcludeFromFees(account, excluded);
    }

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

    function setExcludeFromMaxWalletLimit(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            account != address(this),
            "State of this contract address cannot be modified"
        );
        require(
            _isExcludedFromMaxWalletLimit[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        require(account != address(uniswapV2Pair), "Cannot set this pair");

        _isExcludedFromMaxWalletLimit[account] = excluded;

        emit UpdateExcludeFromMaxWalletLimit(account, excluded);
    }

    function isExcludedFromMaxWalletLimit(
        address account
    ) external view returns (bool) {
        return _isExcludedFromMaxWalletLimit[account];
    }

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            !swapping &&
            !_isAutomatedMarketMakerPair[from] &&
            isSwapBackEnabled &&
            liquidityTokenAmount + marketingTokenAmount > 0
        ) {
            swapBack();
        }

        bool takeFee = true;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) {
            takeFee = false;
        }

         if (!_isExcludedFromMaxWalletLimit[to]) {
                require(
                    balanceOf(to) + amount <=
                        (totalSupply() * maxWalletLimit) / denominator,
                    "Balance of to user cannot more than wallet limit"
                );
            }
        

        if (takeFee) {
            uint256 tempLiquidityAmount;
            uint256 tempMarketingAmount;

            if (_isAutomatedMarketMakerPair[from]) {
                tempLiquidityAmount = (amount * liquidityTaxBuy) / denominator;
                tempMarketingAmount = (amount * marketingTaxBuy) / denominator;
            } else if (_isAutomatedMarketMakerPair[to]) {
                tempLiquidityAmount = (amount * liquidityTaxSell) / denominator;
                tempMarketingAmount = (amount * marketingTaxSell) / denominator;
            }

            liquidityTokenAmount += tempLiquidityAmount;
            marketingTokenAmount += tempMarketingAmount;

            uint256 fees = tempLiquidityAmount + tempMarketingAmount;

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

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

    function swapBack() internal inSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        uint256 contractTokenBalance = balanceOf(address(this));

        uint256 totalTax = liquidityTokenAmount + marketingTokenAmount;

        uint256 liquifyToken = (contractTokenBalance *
            (liquidityTokenAmount / 2)) / totalTax;

        uint256 swapBackAmount = contractTokenBalance - liquifyToken;

        totalTax -= (liquidityTokenAmount) / 2;

        try
            uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                swapBackAmount,
                0,
                path,
                address(this),
                block.timestamp
            )
        {} catch {
            return;
        }

        uint256 newBalance = address(this).balance;

        uint256 marketingBNB = (newBalance * marketingTokenAmount) / totalTax;
        uint256 liquifyBNB = newBalance - marketingBNB;

        if (liquifyToken > 0 && liquifyBNB > 0) {
            try
                uniswapV2Router.addLiquidityETH{value: liquifyBNB}(
                    address(this),
                    liquifyToken,
                    0,
                    0,
                    address(0xdead),
                    block.timestamp
                )
            {} catch {}
        }

        if (marketingBNB > 0) {
            sendBNB(marketingWallet, marketingBNB);
        }

        liquidityTokenAmount = 0;
        marketingTokenAmount = 0;
    }

    function sendBNB(
        address _to,
        uint256 amount
    ) internal nonReentrant returns (bool) {
        if (address(this).balance < amount) return false;

        (bool success, ) = payable(_to).call{value: amount}("");

        return success;
    }

    function manualSwapBack() external {
        uint256 contractTokenBalance = balanceOf(address(this));

        require(contractTokenBalance > 0, "Cant Swap Back 0 Token!");

        swapBack();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityTaxBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingTaxBuy","type":"uint256"}],"name":"UpdateBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"UpdateExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"UpdateExcludeFromMaxWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"UpdateMarketingWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletLimit","type":"uint256"}],"name":"UpdateMaxWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityTaxSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingTaxSell","type":"uint256"}],"name":"UpdateSellTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateSwapBackStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"UpdateSwapTokensAtAmount","type":"event"},{"stateMutability":"payable","type":"fallback"},{"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":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"denominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"isAutomatedMarketMakerPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityTaxBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingTaxBuy","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityTaxSell","type":"uint256"},{"internalType":"uint256","name":"_marketingTaxSell","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"toggleSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040523480156200001157600080fd5b506040518060400160405280600c81526020016b5354414b454420464c4f4b4960a01b8152506040518060400160405280600681526020016573464c4f4b4960d01b815250620000706200006a6200044760201b60201c565b6200044b565b6001805560056200008283826200080e565b5060066200009182826200080e565b505050620000bb620000a86200049b60201b60201c565b6b204fce5e3e25026110000000620004aa565b600060078190556008556107d06009819055600a55612710608052600d80546001600160a01b031916730fe0dd81718f6e48b877b9d3e0b241ebd7b8d76c179055620186a06200010a60045490565b620001169190620008da565b600e55600f805460ff1916600117905560006200013262000573565b9050806001600160a01b031660a0816001600160a01b03168152505060a0516001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b59190620008fd565b6001600160a01b031663c9c653963060a0516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000205573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022b9190620008fd565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000279573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029f9190620008fd565b6001600160a01b031660c05260a051620002be9030906000196200063d565b60c860105560c0516001600160a01b0316600090815260116020908152604082208054600160ff19918216811790925561dead84526013928390527f2264e2d7bacabe6058f5009f42467b9be28015e7760f87409562384c94ac271c80549091168217905591620003376000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526013845282812080548616600190811790915560a05183168252838220805487168217905560c0519092168152918220805485168217905561dead82526012928390527f1120e10407cab1193d7c5139d9aae5536deb3d83e855f25f8e42f811c01f56f780549094168117909355620003e96000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152601290935281832080548516600190811790915560a0519091168352912080549092161790555062000957565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031690565b6001600160a01b038216620005065760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b80600460008282546200051a91906200092f565b90915550506001600160a01b0382166000818152600260209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000466038036200059757507310ed43c718714eb63d5aa57b78b54704e256024e90565b46606103620005b9575073d99d1c33f9fc3444f8101754abc46c52416550d190565b4660011480620005c95750466005145b15620005e85750737a250d5630b4cf539739df2c5dacb4c659f2488d90565b60405162461bcd60e51b815260206004820152602360248201527f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e6574776044820152626f726b60e81b6064820152608401620004fd565b6001600160a01b038316620006a15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401620004fd565b6001600160a01b038216620007045760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620004fd565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200079557607f821691505b602082108103620007b657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200076557600081815260208120601f850160051c81016020861015620007e55750805b601f850160051c820191505b818110156200080657828155600101620007f1565b505050505050565b81516001600160401b038111156200082a576200082a6200076a565b62000842816200083b845462000780565b84620007bc565b602080601f8311600181146200087a5760008415620008615750858301515b600019600386901b1c1916600185901b17855562000806565b600085815260208120601f198616915b82811015620008ab578886015182559484019460019091019084016200088a565b5085821015620008ca5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082620008f857634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200091057600080fd5b81516001600160a01b03811681146200092857600080fd5b9392505050565b808201808211156200095157634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c051612992620009cd6000396000818161042001528181610f8e01526111030152600081816102f701528181611cfd01528181611e360152611f2801526000818161064b01528181611a1401528181611b0f01528181611b4a01528181611bab0152611be601526129926000f3fe60806040526004361061023d5760003560e01c806371afc7131161012d5780639a7a23d6116100b0578063d54f7d5e11610077578063d54f7d5e14610726578063d63cad221461073b578063dd62ed3e1461075b578063e2f456051461077b578063f2fde38b14610791578063f9d0831a146107b157005b80639a7a23d61461066d578063a457c2d71461068d578063a8a69b9d146106ad578063a9059cbb146106e6578063afa4f3b21461070657005b80638123bdc8116100f45780638123bdc8146105d05780638a96082e146105e65780638da5cb5b1461060657806395d89b411461062457806396ce07951461063957005b806371afc7131461052b578063721e623314610541578063728d41c91461055757806375f0a874146105775780637949a4031461059757005b8063313ce567116101c057806352dfc8d01161018757806352dfc8d01461047b5780635d098b381461049557806366a88d96146104b557806366eb3785146104cb57806370a08231146104e0578063715018a61461051657005b8063313ce567146103bc57806339509351146103d857806342d0b0bc146103f857806349bd5a5e1461040e5780634fbee1931461044257005b806318160ddd1161020457806318160ddd146103315780631f88a23e1461034657806323b872dd14610366578063247b912d14610386578063248ba7ed146103a657005b806305a1f36d1461024657806306fdde0314610266578063095ea7b3146102915780630abc8e7b146102c15780631694505e146102e557005b3661024457005b005b34801561025257600080fd5b506102446102613660046124ed565b6107d1565b34801561027257600080fd5b5061027b6108e0565b6040516102889190612533565b60405180910390f35b34801561029d57600080fd5b506102b16102ac36600461257b565b610972565b6040519015158152602001610288565b3480156102cd57600080fd5b506102d760075481565b604051908152602001610288565b3480156102f157600080fd5b506103197f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610288565b34801561033d57600080fd5b506004546102d7565b34801561035257600080fd5b506102446103613660046125b5565b61098c565b34801561037257600080fd5b506102b16103813660046125d9565b610a36565b34801561039257600080fd5b506102446103a13660046124ed565b610a5a565b3480156103b257600080fd5b506102d760085481565b3480156103c857600080fd5b5060405160128152602001610288565b3480156103e457600080fd5b506102b16103f336600461257b565b610b5c565b34801561040457600080fd5b506102d7600a5481565b34801561041a57600080fd5b506103197f000000000000000000000000000000000000000000000000000000000000000081565b34801561044e57600080fd5b506102b161045d36600461261a565b6001600160a01b031660009081526012602052604090205460ff1690565b34801561048757600080fd5b50600f546102b19060ff1681565b3480156104a157600080fd5b506102446104b036600461261a565b610b7e565b3480156104c157600080fd5b506102d760105481565b3480156104d757600080fd5b50610244610d0f565b3480156104ec57600080fd5b506102d76104fb36600461261a565b6001600160a01b031660009081526002602052604090205490565b34801561052257600080fd5b50610244610d77565b34801561053757600080fd5b506102d7600c5481565b34801561054d57600080fd5b506102d760095481565b34801561056357600080fd5b50610244610572366004612637565b610d8b565b34801561058357600080fd5b50600d54610319906001600160a01b031681565b3480156105a357600080fd5b506102b16105b236600461261a565b6001600160a01b031660009081526011602052604090205460ff1690565b3480156105dc57600080fd5b506102d7600b5481565b3480156105f257600080fd5b50610244610601366004612650565b610ed2565b34801561061257600080fd5b506000546001600160a01b0316610319565b34801561063057600080fd5b5061027b611064565b34801561064557600080fd5b506102d77f000000000000000000000000000000000000000000000000000000000000000081565b34801561067957600080fd5b50610244610688366004612650565b611073565b34801561069957600080fd5b506102b16106a836600461257b565b6111d1565b3480156106b957600080fd5b506102b16106c836600461261a565b6001600160a01b031660009081526013602052604090205460ff1690565b3480156106f257600080fd5b506102b161070136600461257b565b61124c565b34801561071257600080fd5b50610244610721366004612637565b61125a565b34801561073257600080fd5b50610319611386565b34801561074757600080fd5b50610244610756366004612650565b61144b565b34801561076757600080fd5b506102d7610776366004612689565b6114eb565b34801561078757600080fd5b506102d7600e5481565b34801561079d57600080fd5b506102446107ac36600461261a565b611516565b3480156107bd57600080fd5b506102446107cc36600461261a565b61158c565b6107d96116b2565b816007541415806107ec57508060095414155b61083d5760405162461bcd60e51b815260206004820152601e60248201527f4275792054617820616c7265616479206f6e207468617420616d6f756e74000060448201526064015b60405180910390fd5b610fa061084a82846126cd565b11156108985760405162461bcd60e51b815260206004820152601f60248201527f427579205461782063616e6e6f74206265206d6f7265207468616e20313025006044820152606401610834565b6007829055600981905560408051838152602081018390527f4350dcfc5e910c40b6d16fdf94cbbc788c1f4ac51a7dc561b081157d4b8ed4ec91015b60405180910390a15050565b6060600580546108ef906126e0565b80601f016020809104026020016040519081016040528092919081815260200182805461091b906126e0565b80156109685780601f1061093d57610100808354040283529160200191610968565b820191906000526020600020905b81548152906001019060200180831161094b57829003601f168201915b5050505050905090565b60003361098081858561170c565b60019150505b92915050565b6109946116b2565b600f5481151560ff9091161515036109ee5760405162461bcd60e51b815260206004820152601a60248201527f537761704261636b20616c7265616479206f6e207374617475730000000000006044820152606401610834565b600f805460ff19168215159081179091556040519081527fc2385a9c5843e4cd7e987e979b22e4d4748ec5dbbfc325ee4023a8c1914809b7906020015b60405180910390a150565b600033610a44858285611830565b610a4f8585856118aa565b506001949350505050565b610a626116b2565b81600854141580610a75575080600a5414155b610ac15760405162461bcd60e51b815260206004820152601f60248201527f53656c6c2054617820616c7265616479206f6e207468617420616d6f756e74006044820152606401610834565b610fa0610ace82846126cd565b1115610b1c5760405162461bcd60e51b815260206004820181905260248201527f53656c6c205461782063616e6e6f74206265206d6f7265207468616e203130256044820152606401610834565b6008829055600a81905560408051838152602081018390527fb67587dc52452dfa7b987911428a2b47c610929d62284cda9f4aafb90435ad4e91016108d4565b600033610980818585610b6f83836114eb565b610b7991906126cd565b61170c565b610b866116b2565b600d546001600160a01b0390811690821603610bf55760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b6064820152608401610834565b6001600160a01b038116610c5f5760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201526a65726f206164647265737360a81b6064820152608401610834565b6001600160a01b0381163b15610cc55760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e6044820152641d1c9858dd60da1b6064820152608401610834565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f090600090a250565b3060009081526002602052604090205480610d6c5760405162461bcd60e51b815260206004820152601760248201527f43616e742053776170204261636b203020546f6b656e210000000000000000006044820152606401610834565b610d74611c93565b50565b610d7f6116b2565b610d896000611fe0565b565b610d936116b2565b8060105403610df25760405162461bcd60e51b815260206004820152602560248201527f6d617857616c6c65744c696d697420616c7265616479206f6e207468617420616044820152641b5bdd5b9d60da1b6064820152608401610834565b600a8110158015610e0557506127108111155b610e9d5760405162461bcd60e51b815260206004820152606060248201527f6d617857616c6c65744c696d69742063616e6e6f742062652062656c6f77203060448201527f2e3125206f6620746f74616c537570706c792028313029206f72206d6f72652060648201527f7468616e2031303025206f6620746f74616c537570706c792028313030303029608482015260a401610834565b60108190556040518181527f071f030755f9025ecd66a1867810c7348bbb888c00d1ec32bf7c9d6a5a6001e890602001610a2b565b610eda6116b2565b306001600160a01b03831603610f4c5760405162461bcd60e51b815260206004820152603160248201527f5374617465206f66207468697320636f6e747261637420616464726573732063604482015270185b9b9bdd081899481b5bd91a599a5959607a1b6064820152608401610834565b6001600160a01b03821660009081526013602052604090205481151560ff909116151503610f8c5760405162461bcd60e51b81526004016108349061271a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036110045760405162461bcd60e51b815260206004820152601460248201527321b0b73737ba1039b2ba103a3434b9903830b4b960611b6044820152606401610834565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527f0e89fd97e9b48b2465436024d8fa33a1d7721523f27d529a278d7244d3ef5e5891015b60405180910390a25050565b6060600680546108ef906126e0565b61107b6116b2565b6001600160a01b03821660009081526011602052604090205481151560ff9091161515036111015760405162461bcd60e51b815260206004820152602d60248201527f50616972206164647265737320697320616c7265616479207468652076616c7560448201526c65206f6620277374617475732760981b6064820152608401610834565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036111795760405162461bcd60e51b815260206004820152601460248201527321b0b73737ba1039b2ba103a3434b9903830b4b960611b6044820152606401610834565b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f1332059101611058565b600033816111df82866114eb565b90508381101561123f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610834565b610a4f828686840361170c565b6000336109808185856118aa565b6112626116b2565b80600e54036112c55760405162461bcd60e51b815260206004820152602960248201527f53776170546f6b656e734174416d6f756e7420616c7265616479206f6e207468604482015268185d08185b5bdd5b9d60ba1b6064820152608401610834565b620f42406112d260045490565b6112dc9190612764565b8110156113515760405162461bcd60e51b815260206004820152603e60248201527f416d6f756e74206d75737420626520657175616c206f7220677265617465722060448201527f7468616e20302e30303030303125206f6620546f74616c20537570706c7900006064820152608401610834565b600e8190556040518181527fe82283d0f679a15d3811ecbaa8b6a8afb1b110e22daa33b359c37bcae5a11e4890602001610a2b565b6000466038036113a957507310ed43c718714eb63d5aa57b78b54704e256024e90565b466061036113ca575073d99d1c33f9fc3444f8101754abc46c52416550d190565b46600114806113d95750466005145b156113f75750737a250d5630b4cf539739df2c5dacb4c659f2488d90565b60405162461bcd60e51b815260206004820152602360248201527f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e6574776044820152626f726b60e81b6064820152608401610834565b6114536116b2565b6001600160a01b03821660009081526012602052604090205481151560ff9091161515036114935760405162461bcd60e51b81526004016108349061271a565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fee48373bc01f03d5728ce4cf0b4e1c35d75d7da201d5b5d5013a94e50941efe19101611058565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b61151e6116b2565b6001600160a01b0381166115835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610834565b610d7481611fe0565b6115946116b2565b306001600160a01b038216036115ec5760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610834565b6001600160a01b03811661162a5760405133904780156108fc02916000818181858888f19350505050158015611626573d6000803e3d6000fd5b5050565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611673573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116979190612786565b90506116ad6001600160a01b0383163383612030565b505050565b6000546001600160a01b03163314610d895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610834565b6001600160a01b03831661176e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610834565b6001600160a01b0382166117cf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610834565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061183c84846114eb565b905060001981146118a457818110156118975760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610834565b6118a4848484840361170c565b50505050565b6001600160a01b0383166118d05760405162461bcd60e51b81526004016108349061279f565b6001600160a01b0382166118f65760405162461bcd60e51b8152600401610834906127e4565b8060000361190a576116ad83836000612082565b30600090815260026020526040902054600e54811080159081906119385750600d54600160a01b900460ff16155b801561195d57506001600160a01b03851660009081526011602052604090205460ff16155b801561196b5750600f5460ff165b801561198657506000600c54600b5461198491906126cd565b115b1561199357611993611c93565b6001600160a01b03851660009081526012602052604090205460019060ff16806119d557506001600160a01b03851660009081526012602052604090205460ff165b806119e95750600d54600160a01b900460ff165b156119f2575060005b6001600160a01b03851660009081526013602052604090205460ff16611ae4577f0000000000000000000000000000000000000000000000000000000000000000601054611a3f60045490565b611a499190612827565b611a539190612764565b84611a73876001600160a01b031660009081526002602052604090205490565b611a7d91906126cd565b1115611ae45760405162461bcd60e51b815260206004820152603060248201527f42616c616e6365206f6620746f20757365722063616e6e6f74206d6f7265207460448201526f1a185b881dd85b1b195d081b1a5b5a5d60821b6064820152608401610834565b8015611c80576001600160a01b038616600090815260116020526040812054819060ff1615611b88577f000000000000000000000000000000000000000000000000000000000000000060075487611b3c9190612827565b611b469190612764565b91507f000000000000000000000000000000000000000000000000000000000000000060095487611b779190612827565b611b819190612764565b9050611c20565b6001600160a01b03871660009081526011602052604090205460ff1615611c20577f000000000000000000000000000000000000000000000000000000000000000060085487611bd89190612827565b611be29190612764565b91507f0000000000000000000000000000000000000000000000000000000000000000600a5487611c139190612827565b611c1d9190612764565b90505b81600b6000828254611c3291906126cd565b9250508190555080600c6000828254611c4b91906126cd565b9091555060009050611c5d82846126cd565b90508015611c7c57611c6f818861283e565b9650611c7c893083612082565b5050505b611c8b868686612082565b505050505050565b600d805460ff60a01b1916600160a01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611cdb57611cdb612851565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7d9190612867565b81600181518110611d9057611d90612851565b6001600160a01b039092166020928302919091018201523060009081526002909152604081205490506000600c54600b54611dcb91906126cd565b90506000816002600b54611ddf9190612764565b611de99085612827565b611df39190612764565b90506000611e01828561283e565b90506002600b54611e129190612764565b611e1c908461283e565b60405163791ac94760e01b81529093506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611e749084906000908a9030904290600401612884565b600060405180830381600087803b158015611e8e57600080fd5b505af1925050508015611e9f575060015b611ead575050505050611fd1565b600c5447906000908590611ec19084612827565b611ecb9190612764565b90506000611ed9828461283e565b9050600085118015611eeb5750600081115b15611fa05760405163f305d71960e01b815230600482015260248101869052600060448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af193505050508015611f97575060408051601f3d908101601f19168201909252611f94918101906128f5565b60015b15611fa0575050505b8115611fbe57600d54611fbc906001600160a01b0316836121b3565b505b50506000600b819055600c555050505050505b600d805460ff60a01b19169055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526116ad90849061222f565b6001600160a01b0383166120a85760405162461bcd60e51b81526004016108349061279f565b6001600160a01b0382166120ce5760405162461bcd60e51b8152600401610834906127e4565b6001600160a01b038316600090815260026020526040902054818110156121465760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610834565b6001600160a01b0380851660008181526002602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906121a69086815260200190565b60405180910390a36118a4565b60006121bd612304565b814710156121cd57506000612226565b6000836001600160a01b03168360405160006040518083038185875af1925050503d806000811461221a576040519150601f19603f3d011682016040523d82523d6000602084013e61221f565b606091505b5090925050505b61098660018055565b6000612284826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661235d9092919063ffffffff16565b90508051600014806122a55750808060200190518101906122a59190612923565b6116ad5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610834565b6002600154036123565760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610834565b6002600155565b606061236c8484600085612374565b949350505050565b6060824710156123d55760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610834565b600080866001600160a01b031685876040516123f19190612940565b60006040518083038185875af1925050503d806000811461242e576040519150601f19603f3d011682016040523d82523d6000602084013e612433565b606091505b50915091506124448783838761244f565b979650505050505050565b606083156124be5782516000036124b7576001600160a01b0385163b6124b75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610834565b508161236c565b61236c83838151156124d35781518083602001fd5b8060405162461bcd60e51b81526004016108349190612533565b6000806040838503121561250057600080fd5b50508035926020909101359150565b60005b8381101561252a578181015183820152602001612512565b50506000910152565b602081526000825180602084015261255281604085016020870161250f565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610d7457600080fd5b6000806040838503121561258e57600080fd5b823561259981612566565b946020939093013593505050565b8015158114610d7457600080fd5b6000602082840312156125c757600080fd5b81356125d2816125a7565b9392505050565b6000806000606084860312156125ee57600080fd5b83356125f981612566565b9250602084013561260981612566565b929592945050506040919091013590565b60006020828403121561262c57600080fd5b81356125d281612566565b60006020828403121561264957600080fd5b5035919050565b6000806040838503121561266357600080fd5b823561266e81612566565b9150602083013561267e816125a7565b809150509250929050565b6000806040838503121561269c57600080fd5b82356126a781612566565b9150602083013561267e81612566565b634e487b7160e01b600052601160045260246000fd5b80820180821115610986576109866126b7565b600181811c908216806126f457607f821691505b60208210810361271457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b60008261278157634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561279857600080fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8082028115828204841417610986576109866126b7565b81810381811115610986576109866126b7565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561287957600080fd5b81516125d281612566565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128d45784516001600160a01b0316835293830193918301916001016128af565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561290a57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561293557600080fd5b81516125d2816125a7565b6000825161295281846020870161250f565b919091019291505056fea26469706673582212207defd45508b3dbb70dd796e919d224966633f7c69295acf25003d8897bd8ccf764736f6c63430008130033

Deployed Bytecode

0x60806040526004361061023d5760003560e01c806371afc7131161012d5780639a7a23d6116100b0578063d54f7d5e11610077578063d54f7d5e14610726578063d63cad221461073b578063dd62ed3e1461075b578063e2f456051461077b578063f2fde38b14610791578063f9d0831a146107b157005b80639a7a23d61461066d578063a457c2d71461068d578063a8a69b9d146106ad578063a9059cbb146106e6578063afa4f3b21461070657005b80638123bdc8116100f45780638123bdc8146105d05780638a96082e146105e65780638da5cb5b1461060657806395d89b411461062457806396ce07951461063957005b806371afc7131461052b578063721e623314610541578063728d41c91461055757806375f0a874146105775780637949a4031461059757005b8063313ce567116101c057806352dfc8d01161018757806352dfc8d01461047b5780635d098b381461049557806366a88d96146104b557806366eb3785146104cb57806370a08231146104e0578063715018a61461051657005b8063313ce567146103bc57806339509351146103d857806342d0b0bc146103f857806349bd5a5e1461040e5780634fbee1931461044257005b806318160ddd1161020457806318160ddd146103315780631f88a23e1461034657806323b872dd14610366578063247b912d14610386578063248ba7ed146103a657005b806305a1f36d1461024657806306fdde0314610266578063095ea7b3146102915780630abc8e7b146102c15780631694505e146102e557005b3661024457005b005b34801561025257600080fd5b506102446102613660046124ed565b6107d1565b34801561027257600080fd5b5061027b6108e0565b6040516102889190612533565b60405180910390f35b34801561029d57600080fd5b506102b16102ac36600461257b565b610972565b6040519015158152602001610288565b3480156102cd57600080fd5b506102d760075481565b604051908152602001610288565b3480156102f157600080fd5b506103197f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610288565b34801561033d57600080fd5b506004546102d7565b34801561035257600080fd5b506102446103613660046125b5565b61098c565b34801561037257600080fd5b506102b16103813660046125d9565b610a36565b34801561039257600080fd5b506102446103a13660046124ed565b610a5a565b3480156103b257600080fd5b506102d760085481565b3480156103c857600080fd5b5060405160128152602001610288565b3480156103e457600080fd5b506102b16103f336600461257b565b610b5c565b34801561040457600080fd5b506102d7600a5481565b34801561041a57600080fd5b506103197f0000000000000000000000006941888f86d97b4832810d3fd04a225a8488aeb581565b34801561044e57600080fd5b506102b161045d36600461261a565b6001600160a01b031660009081526012602052604090205460ff1690565b34801561048757600080fd5b50600f546102b19060ff1681565b3480156104a157600080fd5b506102446104b036600461261a565b610b7e565b3480156104c157600080fd5b506102d760105481565b3480156104d757600080fd5b50610244610d0f565b3480156104ec57600080fd5b506102d76104fb36600461261a565b6001600160a01b031660009081526002602052604090205490565b34801561052257600080fd5b50610244610d77565b34801561053757600080fd5b506102d7600c5481565b34801561054d57600080fd5b506102d760095481565b34801561056357600080fd5b50610244610572366004612637565b610d8b565b34801561058357600080fd5b50600d54610319906001600160a01b031681565b3480156105a357600080fd5b506102b16105b236600461261a565b6001600160a01b031660009081526011602052604090205460ff1690565b3480156105dc57600080fd5b506102d7600b5481565b3480156105f257600080fd5b50610244610601366004612650565b610ed2565b34801561061257600080fd5b506000546001600160a01b0316610319565b34801561063057600080fd5b5061027b611064565b34801561064557600080fd5b506102d77f000000000000000000000000000000000000000000000000000000000000271081565b34801561067957600080fd5b50610244610688366004612650565b611073565b34801561069957600080fd5b506102b16106a836600461257b565b6111d1565b3480156106b957600080fd5b506102b16106c836600461261a565b6001600160a01b031660009081526013602052604090205460ff1690565b3480156106f257600080fd5b506102b161070136600461257b565b61124c565b34801561071257600080fd5b50610244610721366004612637565b61125a565b34801561073257600080fd5b50610319611386565b34801561074757600080fd5b50610244610756366004612650565b61144b565b34801561076757600080fd5b506102d7610776366004612689565b6114eb565b34801561078757600080fd5b506102d7600e5481565b34801561079d57600080fd5b506102446107ac36600461261a565b611516565b3480156107bd57600080fd5b506102446107cc36600461261a565b61158c565b6107d96116b2565b816007541415806107ec57508060095414155b61083d5760405162461bcd60e51b815260206004820152601e60248201527f4275792054617820616c7265616479206f6e207468617420616d6f756e74000060448201526064015b60405180910390fd5b610fa061084a82846126cd565b11156108985760405162461bcd60e51b815260206004820152601f60248201527f427579205461782063616e6e6f74206265206d6f7265207468616e20313025006044820152606401610834565b6007829055600981905560408051838152602081018390527f4350dcfc5e910c40b6d16fdf94cbbc788c1f4ac51a7dc561b081157d4b8ed4ec91015b60405180910390a15050565b6060600580546108ef906126e0565b80601f016020809104026020016040519081016040528092919081815260200182805461091b906126e0565b80156109685780601f1061093d57610100808354040283529160200191610968565b820191906000526020600020905b81548152906001019060200180831161094b57829003601f168201915b5050505050905090565b60003361098081858561170c565b60019150505b92915050565b6109946116b2565b600f5481151560ff9091161515036109ee5760405162461bcd60e51b815260206004820152601a60248201527f537761704261636b20616c7265616479206f6e207374617475730000000000006044820152606401610834565b600f805460ff19168215159081179091556040519081527fc2385a9c5843e4cd7e987e979b22e4d4748ec5dbbfc325ee4023a8c1914809b7906020015b60405180910390a150565b600033610a44858285611830565b610a4f8585856118aa565b506001949350505050565b610a626116b2565b81600854141580610a75575080600a5414155b610ac15760405162461bcd60e51b815260206004820152601f60248201527f53656c6c2054617820616c7265616479206f6e207468617420616d6f756e74006044820152606401610834565b610fa0610ace82846126cd565b1115610b1c5760405162461bcd60e51b815260206004820181905260248201527f53656c6c205461782063616e6e6f74206265206d6f7265207468616e203130256044820152606401610834565b6008829055600a81905560408051838152602081018390527fb67587dc52452dfa7b987911428a2b47c610929d62284cda9f4aafb90435ad4e91016108d4565b600033610980818585610b6f83836114eb565b610b7991906126cd565b61170c565b610b866116b2565b600d546001600160a01b0390811690821603610bf55760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b6064820152608401610834565b6001600160a01b038116610c5f5760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201526a65726f206164647265737360a81b6064820152608401610834565b6001600160a01b0381163b15610cc55760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e6044820152641d1c9858dd60da1b6064820152608401610834565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f090600090a250565b3060009081526002602052604090205480610d6c5760405162461bcd60e51b815260206004820152601760248201527f43616e742053776170204261636b203020546f6b656e210000000000000000006044820152606401610834565b610d74611c93565b50565b610d7f6116b2565b610d896000611fe0565b565b610d936116b2565b8060105403610df25760405162461bcd60e51b815260206004820152602560248201527f6d617857616c6c65744c696d697420616c7265616479206f6e207468617420616044820152641b5bdd5b9d60da1b6064820152608401610834565b600a8110158015610e0557506127108111155b610e9d5760405162461bcd60e51b815260206004820152606060248201527f6d617857616c6c65744c696d69742063616e6e6f742062652062656c6f77203060448201527f2e3125206f6620746f74616c537570706c792028313029206f72206d6f72652060648201527f7468616e2031303025206f6620746f74616c537570706c792028313030303029608482015260a401610834565b60108190556040518181527f071f030755f9025ecd66a1867810c7348bbb888c00d1ec32bf7c9d6a5a6001e890602001610a2b565b610eda6116b2565b306001600160a01b03831603610f4c5760405162461bcd60e51b815260206004820152603160248201527f5374617465206f66207468697320636f6e747261637420616464726573732063604482015270185b9b9bdd081899481b5bd91a599a5959607a1b6064820152608401610834565b6001600160a01b03821660009081526013602052604090205481151560ff909116151503610f8c5760405162461bcd60e51b81526004016108349061271a565b7f0000000000000000000000006941888f86d97b4832810d3fd04a225a8488aeb56001600160a01b0316826001600160a01b0316036110045760405162461bcd60e51b815260206004820152601460248201527321b0b73737ba1039b2ba103a3434b9903830b4b960611b6044820152606401610834565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527f0e89fd97e9b48b2465436024d8fa33a1d7721523f27d529a278d7244d3ef5e5891015b60405180910390a25050565b6060600680546108ef906126e0565b61107b6116b2565b6001600160a01b03821660009081526011602052604090205481151560ff9091161515036111015760405162461bcd60e51b815260206004820152602d60248201527f50616972206164647265737320697320616c7265616479207468652076616c7560448201526c65206f6620277374617475732760981b6064820152608401610834565b7f0000000000000000000000006941888f86d97b4832810d3fd04a225a8488aeb56001600160a01b0316826001600160a01b0316036111795760405162461bcd60e51b815260206004820152601460248201527321b0b73737ba1039b2ba103a3434b9903830b4b960611b6044820152606401610834565b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f1332059101611058565b600033816111df82866114eb565b90508381101561123f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610834565b610a4f828686840361170c565b6000336109808185856118aa565b6112626116b2565b80600e54036112c55760405162461bcd60e51b815260206004820152602960248201527f53776170546f6b656e734174416d6f756e7420616c7265616479206f6e207468604482015268185d08185b5bdd5b9d60ba1b6064820152608401610834565b620f42406112d260045490565b6112dc9190612764565b8110156113515760405162461bcd60e51b815260206004820152603e60248201527f416d6f756e74206d75737420626520657175616c206f7220677265617465722060448201527f7468616e20302e30303030303125206f6620546f74616c20537570706c7900006064820152608401610834565b600e8190556040518181527fe82283d0f679a15d3811ecbaa8b6a8afb1b110e22daa33b359c37bcae5a11e4890602001610a2b565b6000466038036113a957507310ed43c718714eb63d5aa57b78b54704e256024e90565b466061036113ca575073d99d1c33f9fc3444f8101754abc46c52416550d190565b46600114806113d95750466005145b156113f75750737a250d5630b4cf539739df2c5dacb4c659f2488d90565b60405162461bcd60e51b815260206004820152602360248201527f43616e6e6f7420666f756e6420726f75746572206f6e2074686973206e6574776044820152626f726b60e81b6064820152608401610834565b6114536116b2565b6001600160a01b03821660009081526012602052604090205481151560ff9091161515036114935760405162461bcd60e51b81526004016108349061271a565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fee48373bc01f03d5728ce4cf0b4e1c35d75d7da201d5b5d5013a94e50941efe19101611058565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b61151e6116b2565b6001600160a01b0381166115835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610834565b610d7481611fe0565b6115946116b2565b306001600160a01b038216036115ec5760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610834565b6001600160a01b03811661162a5760405133904780156108fc02916000818181858888f19350505050158015611626573d6000803e3d6000fd5b5050565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611673573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116979190612786565b90506116ad6001600160a01b0383163383612030565b505050565b6000546001600160a01b03163314610d895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610834565b6001600160a01b03831661176e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610834565b6001600160a01b0382166117cf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610834565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061183c84846114eb565b905060001981146118a457818110156118975760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610834565b6118a4848484840361170c565b50505050565b6001600160a01b0383166118d05760405162461bcd60e51b81526004016108349061279f565b6001600160a01b0382166118f65760405162461bcd60e51b8152600401610834906127e4565b8060000361190a576116ad83836000612082565b30600090815260026020526040902054600e54811080159081906119385750600d54600160a01b900460ff16155b801561195d57506001600160a01b03851660009081526011602052604090205460ff16155b801561196b5750600f5460ff165b801561198657506000600c54600b5461198491906126cd565b115b1561199357611993611c93565b6001600160a01b03851660009081526012602052604090205460019060ff16806119d557506001600160a01b03851660009081526012602052604090205460ff165b806119e95750600d54600160a01b900460ff165b156119f2575060005b6001600160a01b03851660009081526013602052604090205460ff16611ae4577f0000000000000000000000000000000000000000000000000000000000002710601054611a3f60045490565b611a499190612827565b611a539190612764565b84611a73876001600160a01b031660009081526002602052604090205490565b611a7d91906126cd565b1115611ae45760405162461bcd60e51b815260206004820152603060248201527f42616c616e6365206f6620746f20757365722063616e6e6f74206d6f7265207460448201526f1a185b881dd85b1b195d081b1a5b5a5d60821b6064820152608401610834565b8015611c80576001600160a01b038616600090815260116020526040812054819060ff1615611b88577f000000000000000000000000000000000000000000000000000000000000271060075487611b3c9190612827565b611b469190612764565b91507f000000000000000000000000000000000000000000000000000000000000271060095487611b779190612827565b611b819190612764565b9050611c20565b6001600160a01b03871660009081526011602052604090205460ff1615611c20577f000000000000000000000000000000000000000000000000000000000000271060085487611bd89190612827565b611be29190612764565b91507f0000000000000000000000000000000000000000000000000000000000002710600a5487611c139190612827565b611c1d9190612764565b90505b81600b6000828254611c3291906126cd565b9250508190555080600c6000828254611c4b91906126cd565b9091555060009050611c5d82846126cd565b90508015611c7c57611c6f818861283e565b9650611c7c893083612082565b5050505b611c8b868686612082565b505050505050565b600d805460ff60a01b1916600160a01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611cdb57611cdb612851565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7d9190612867565b81600181518110611d9057611d90612851565b6001600160a01b039092166020928302919091018201523060009081526002909152604081205490506000600c54600b54611dcb91906126cd565b90506000816002600b54611ddf9190612764565b611de99085612827565b611df39190612764565b90506000611e01828561283e565b90506002600b54611e129190612764565b611e1c908461283e565b60405163791ac94760e01b81529093506001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611e749084906000908a9030904290600401612884565b600060405180830381600087803b158015611e8e57600080fd5b505af1925050508015611e9f575060015b611ead575050505050611fd1565b600c5447906000908590611ec19084612827565b611ecb9190612764565b90506000611ed9828461283e565b9050600085118015611eeb5750600081115b15611fa05760405163f305d71960e01b815230600482015260248101869052600060448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af193505050508015611f97575060408051601f3d908101601f19168201909252611f94918101906128f5565b60015b15611fa0575050505b8115611fbe57600d54611fbc906001600160a01b0316836121b3565b505b50506000600b819055600c555050505050505b600d805460ff60a01b19169055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526116ad90849061222f565b6001600160a01b0383166120a85760405162461bcd60e51b81526004016108349061279f565b6001600160a01b0382166120ce5760405162461bcd60e51b8152600401610834906127e4565b6001600160a01b038316600090815260026020526040902054818110156121465760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610834565b6001600160a01b0380851660008181526002602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906121a69086815260200190565b60405180910390a36118a4565b60006121bd612304565b814710156121cd57506000612226565b6000836001600160a01b03168360405160006040518083038185875af1925050503d806000811461221a576040519150601f19603f3d011682016040523d82523d6000602084013e61221f565b606091505b5090925050505b61098660018055565b6000612284826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661235d9092919063ffffffff16565b90508051600014806122a55750808060200190518101906122a59190612923565b6116ad5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610834565b6002600154036123565760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610834565b6002600155565b606061236c8484600085612374565b949350505050565b6060824710156123d55760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610834565b600080866001600160a01b031685876040516123f19190612940565b60006040518083038185875af1925050503d806000811461242e576040519150601f19603f3d011682016040523d82523d6000602084013e612433565b606091505b50915091506124448783838761244f565b979650505050505050565b606083156124be5782516000036124b7576001600160a01b0385163b6124b75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610834565b508161236c565b61236c83838151156124d35781518083602001fd5b8060405162461bcd60e51b81526004016108349190612533565b6000806040838503121561250057600080fd5b50508035926020909101359150565b60005b8381101561252a578181015183820152602001612512565b50506000910152565b602081526000825180602084015261255281604085016020870161250f565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610d7457600080fd5b6000806040838503121561258e57600080fd5b823561259981612566565b946020939093013593505050565b8015158114610d7457600080fd5b6000602082840312156125c757600080fd5b81356125d2816125a7565b9392505050565b6000806000606084860312156125ee57600080fd5b83356125f981612566565b9250602084013561260981612566565b929592945050506040919091013590565b60006020828403121561262c57600080fd5b81356125d281612566565b60006020828403121561264957600080fd5b5035919050565b6000806040838503121561266357600080fd5b823561266e81612566565b9150602083013561267e816125a7565b809150509250929050565b6000806040838503121561269c57600080fd5b82356126a781612566565b9150602083013561267e81612566565b634e487b7160e01b600052601160045260246000fd5b80820180821115610986576109866126b7565b600181811c908216806126f457607f821691505b60208210810361271457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b60008261278157634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561279857600080fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8082028115828204841417610986576109866126b7565b81810381811115610986576109866126b7565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561287957600080fd5b81516125d281612566565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128d45784516001600160a01b0316835293830193918301916001016128af565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561290a57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561293557600080fd5b81516125d2816125a7565b6000825161295281846020870161250f565b919091019291505056fea26469706673582212207defd45508b3dbb70dd796e919d224966633f7c69295acf25003d8897bd8ccf764736f6c63430008130033

Deployed Bytecode Sourcemap

24156:13454:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28381:599;;;;;;;;;;-1:-1:-1;28381:599:0;;;;;:::i;:::-;;:::i;17784:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18782:226;;;;;;;;;;-1:-1:-1;18782:226:0;;;;;:::i;:::-;;:::i;:::-;;;1544:14:1;;1537:22;1519:41;;1507:2;1492:18;18782:226:0;1379:187:1;24249:30:0;;;;;;;;;;;;;;;;;;;1717:25:1;;;1705:2;1690:18;24249:30:0;1571:177:1;24679:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1943:32:1;;;1925:51;;1913:2;1898:18;24679:51:0;1753:229:1;18105:108:0;;;;;;;;;;-1:-1:-1;18193:12:0;;18105:108;;30661:224;;;;;;;;;;-1:-1:-1;30661:224:0;;;;;:::i;:::-;;:::i;19016:295::-;;;;;;;;;;-1:-1:-1;19016:295:0;;;;;:::i;:::-;;:::i;28988:617::-;;;;;;;;;;-1:-1:-1;28988:617:0;;;;;:::i;:::-;;:::i;24286:31::-;;;;;;;;;;;;;;;;18004:93;;;;;;;;;;-1:-1:-1;18004:93:0;;18087:2;2959:36:1;;2947:2;2932:18;18004:93:0;2817:184:1;19319:263:0;;;;;;;;;;-1:-1:-1;19319:263:0;;;;;:::i;:::-;;:::i;24363:31::-;;;;;;;;;;;;;;;;24737:38;;;;;;;;;;;;;;;32363:128;;;;;;;;;;-1:-1:-1;32363:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;32455:28:0;32431:4;32455:28;;;:19;:28;;;;;;;;;32363:128;24641:29;;;;;;;;;;-1:-1:-1;24641:29:0;;;;;;;;29613:580;;;;;;;;;;-1:-1:-1;29613:580:0;;;;;:::i;:::-;;:::i;24784:29::-;;;;;;;;;;;;;;;;37402:205;;;;;;;;;;;;;:::i;18221:143::-;;;;;;;;;;-1:-1:-1;18221:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;18338:18:0;18311:7;18338:18;;;:9;:18;;;;;;;18221:143;23601:103;;;;;;;;;;;;;:::i;24490:35::-;;;;;;;;;;;;;;;;24326:30;;;;;;;;;;;;;;;;30893:463;;;;;;;;;;-1:-1:-1;30893:463:0;;;;;:::i;:::-;;:::i;24534:30::-;;;;;;;;;;-1:-1:-1;24534:30:0;;;;-1:-1:-1;;;;;24534:30:0;;;31830:154;;;;;;;;;;-1:-1:-1;31830:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;31943:33:0;31919:4;31943:33;;;:27;:33;;;;;;;;;31830:154;24448:35;;;;;;;;;;;;;;;;32499:616;;;;;;;;;;-1:-1:-1;32499:616:0;;;;;:::i;:::-;;:::i;23366:87::-;;;;;;;;;;-1:-1:-1;23412:7:0;23439:6;-1:-1:-1;;;;;23439:6:0;23366:87;;17892:104;;;;;;;;;;;;;:::i;24403:36::-;;;;;;;;;;;;;;;31366:456;;;;;;;;;;-1:-1:-1;31366:456:0;;;;;:::i;:::-;;:::i;19590:498::-;;;;;;;;;;-1:-1:-1;19590:498:0;;;;;:::i;:::-;;:::i;33123:164::-;;;;;;;;;;-1:-1:-1;33123:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;33241:38:0;33217:4;33241:38;;;:29;:38;;;;;;;;;33123:164;18372:218;;;;;;;;;;-1:-1:-1;18372:218:0;;;;;:::i;:::-;;:::i;30201:452::-;;;;;;;;;;-1:-1:-1;30201:452:0;;;;;:::i;:::-;;:::i;27428:490::-;;;;;;;;;;;;;:::i;31992:363::-;;;;;;;;;;-1:-1:-1;31992:363:0;;;;;:::i;:::-;;:::i;18598:176::-;;;;;;;;;;-1:-1:-1;18598:176:0;;;;;:::i;:::-;;:::i;24601:33::-;;;;;;;;;;;;;;;;23712:238;;;;;;;;;;-1:-1:-1;23712:238:0;;;;;:::i;:::-;;:::i;27926:447::-;;;;;;;;;;-1:-1:-1;27926:447:0;;;;;:::i;:::-;;:::i;28381:599::-;23325:13;:11;:13::i;:::-;28548:16:::1;28529:15;;:35;;:91;;;;28604:16;28585:15;;:35;;28529:91;28507:171;;;::::0;-1:-1:-1;;;28507:171:0;;4633:2:1;28507:171:0::1;::::0;::::1;4615:21:1::0;4672:2;4652:18;;;4645:30;4711:32;4691:18;;;4684:60;4761:18;;28507:171:0::1;;;;;;;;;28750:5;28711:35;28730:16:::0;28711;:35:::1;:::i;:::-;:44;;28689:125;;;::::0;-1:-1:-1;;;28689:125:0;;5254:2:1;28689:125:0::1;::::0;::::1;5236:21:1::0;5293:2;5273:18;;;5266:30;5332:33;5312:18;;;5305:61;5383:18;;28689:125:0::1;5052:355:1::0;28689:125:0::1;28827:15;:34:::0;;;28872:15:::1;:34:::0;;;28924:48:::1;::::0;;5586:25:1;;;5642:2;5627:18;;5620:34;;;28924:48:0::1;::::0;5559:18:1;28924:48:0::1;;;;;;;;28381:599:::0;;:::o;17784:100::-;17838:13;17871:5;17864:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17784:100;:::o;18782:226::-;18890:4;17244:10;18946:32;17244:10;18962:7;18971:6;18946:8;:32::i;:::-;18996:4;18989:11;;;18782:226;;;;;:::o;30661:224::-;23325:13;:11;:13::i;:::-;30736:17:::1;::::0;:27;::::1;;:17;::::0;;::::1;:27;;::::0;30728:66:::1;;;::::0;-1:-1:-1;;;30728:66:0;;6252:2:1;30728:66:0::1;::::0;::::1;6234:21:1::0;6291:2;6271:18;;;6264:30;6330:28;6310:18;;;6303:56;6376:18;;30728:66:0::1;6050:350:1::0;30728:66:0::1;30807:17;:26:::0;;-1:-1:-1;;30807:26:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30849:28:::1;::::0;1519:41:1;;;30849:28:0::1;::::0;1507:2:1;1492:18;30849:28:0::1;;;;;;;;30661:224:::0;:::o;19016:295::-;19147:4;17244:10;19205:38;19221:4;17244:10;19236:6;19205:15;:38::i;:::-;19254:27;19264:4;19270:2;19274:6;19254:9;:27::i;:::-;-1:-1:-1;19299:4:0;;19016:295;-1:-1:-1;;;;19016:295:0:o;28988:617::-;23325:13;:11;:13::i;:::-;29159:17:::1;29139:16;;:37;;:95;;;;29217:17;29197:16;;:37;;29139:95;29117:176;;;::::0;-1:-1:-1;;;29117:176:0;;6607:2:1;29117:176:0::1;::::0;::::1;6589:21:1::0;6646:2;6626:18;;;6619:30;6685:33;6665:18;;;6658:61;6736:18;;29117:176:0::1;6405:355:1::0;29117:176:0::1;29367:5;29326:37;29346:17:::0;29326;:37:::1;:::i;:::-;:46;;29304:128;;;::::0;-1:-1:-1;;;29304:128:0;;6967:2:1;29304:128:0::1;::::0;::::1;6949:21:1::0;;;6986:18;;;6979:30;7045:34;7025:18;;;7018:62;7097:18;;29304:128:0::1;6765:356:1::0;29304:128:0::1;29445:16;:36:::0;;;29492:16:::1;:36:::0;;;29546:51:::1;::::0;;5586:25:1;;;5642:2;5627:18;;5620:34;;;29546:51:0::1;::::0;5559:18:1;29546:51:0::1;5412:248:1::0;19319:263:0;19432:4;17244:10;19488:64;17244:10;19504:7;19541:10;19513:25;17244:10;19504:7;19513:9;:25::i;:::-;:38;;;;:::i;:::-;19488:8;:64::i;29613:580::-;23325:13;:11;:13::i;:::-;29739:15:::1;::::0;-1:-1:-1;;;;;29739:15:0;;::::1;29719:35:::0;;::::1;::::0;29697:125:::1;;;::::0;-1:-1:-1;;;29697:125:0;;7328:2:1;29697:125:0::1;::::0;::::1;7310:21:1::0;7367:2;7347:18;;;7340:30;7406:34;7386:18;;;7379:62;-1:-1:-1;;;7457:18:1;;;7450:38;7505:19;;29697:125:0::1;7126:404:1::0;29697:125:0::1;-1:-1:-1::0;;;;;29855:30:0;::::1;29833:123;;;::::0;-1:-1:-1;;;29833:123:0;;7737:2:1;29833:123:0::1;::::0;::::1;7719:21:1::0;7776:2;7756:18;;;7749:30;7815:34;7795:18;;;7788:62;-1:-1:-1;;;7866:18:1;;;7859:41;7917:19;;29833:123:0::1;7535:407:1::0;29833:123:0::1;-1:-1:-1::0;;;;;27389:19:0;;;:23;29967:116:::1;;;::::0;-1:-1:-1;;;29967:116:0;;8149:2:1;29967:116:0::1;::::0;::::1;8131:21:1::0;8188:2;8168:18;;;8161:30;8227:34;8207:18;;;8200:62;-1:-1:-1;;;8278:18:1;;;8271:35;8323:19;;29967:116:0::1;7947:401:1::0;29967:116:0::1;30096:15;:34:::0;;-1:-1:-1;;;;;;30096:34:0::1;-1:-1:-1::0;;;;;30096:34:0;::::1;::::0;;::::1;::::0;;;30146:39:::1;::::0;::::1;::::0;-1:-1:-1;;30146:39:0::1;29613:580:::0;:::o;37402:205::-;37497:4;37448:28;18338:18;;;:9;:18;;;;;;37524:24;37516:60;;;;-1:-1:-1;;;37516:60:0;;8555:2:1;37516:60:0;;;8537:21:1;8594:2;8574:18;;;8567:30;8633:25;8613:18;;;8606:53;8676:18;;37516:60:0;8353:347:1;37516:60:0;37589:10;:8;:10::i;:::-;37437:170;37402:205::o;23601:103::-;23325:13;:11;:13::i;:::-;23666:30:::1;23693:1;23666:18;:30::i;:::-;23601:103::o:0;30893:463::-;23325:13;:11;:13::i;:::-;31006:6:::1;30988:14;;:24:::0;30966:111:::1;;;::::0;-1:-1:-1;;;30966:111:0;;8907:2:1;30966:111:0::1;::::0;::::1;8889:21:1::0;8946:2;8926:18;;;8919:30;8985:34;8965:18;;;8958:62;-1:-1:-1;;;9036:18:1;;;9029:35;9081:19;;30966:111:0::1;8705:401:1::0;30966:111:0::1;31120:2;31110:6;:12;;:32;;;;;31136:6;31126;:16;;31110:32;31088:178;;;::::0;-1:-1:-1;;;31088:178:0;;9313:2:1;31088:178:0::1;::::0;::::1;9295:21:1::0;9352:2;9332:18;;;9325:30;9391:34;9371:18;;;9364:62;9462:34;9442:18;;;9435:62;9534:34;9513:19;;;9506:63;9586:19;;31088:178:0::1;9111:500:1::0;31088:178:0::1;31279:14;:23:::0;;;31320:28:::1;::::0;1717:25:1;;;31320:28:0::1;::::0;1705:2:1;1690:18;31320:28:0::1;1571:177:1::0;32499:616:0;23325:13;:11;:13::i;:::-;32665:4:::1;-1:-1:-1::0;;;;;32646:24:0;::::1;::::0;32624:123:::1;;;::::0;-1:-1:-1;;;32624:123:0;;9818:2:1;32624:123:0::1;::::0;::::1;9800:21:1::0;9857:2;9837:18;;;9830:30;9896:34;9876:18;;;9869:62;-1:-1:-1;;;9947:18:1;;;9940:47;10004:19;;32624:123:0::1;9616:413:1::0;32624:123:0::1;-1:-1:-1::0;;;;;32780:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;32758:142:::1;;;;-1:-1:-1::0;;;32758:142:0::1;;;;;;;:::i;:::-;32938:13;-1:-1:-1::0;;;;;32919:33:0::1;:7;-1:-1:-1::0;;;;;32919:33:0::1;::::0;32911:66:::1;;;::::0;-1:-1:-1;;;32911:66:0;;10647:2:1;32911:66:0::1;::::0;::::1;10629:21:1::0;10686:2;10666:18;;;10659:30;-1:-1:-1;;;10705:18:1;;;10698:50;10765:18;;32911:66:0::1;10445:344:1::0;32911:66:0::1;-1:-1:-1::0;;;;;32990:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;32990:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33057:50;;1519:41:1;;;33057:50:0::1;::::0;1492:18:1;33057:50:0::1;;;;;;;;32499:616:::0;;:::o;17892:104::-;17948:13;17981:7;17974:14;;;;;:::i;31366:456::-;23325:13;:11;:13::i;:::-;-1:-1:-1;;;;;31507:33:0;::::1;;::::0;;;:27:::1;:33;::::0;;;;;:43;::::1;;:33;::::0;;::::1;:43;;::::0;31485:138:::1;;;::::0;-1:-1:-1;;;31485:138:0;;10996:2:1;31485:138:0::1;::::0;::::1;10978:21:1::0;11035:2;11015:18;;;11008:30;11074:34;11054:18;;;11047:62;-1:-1:-1;;;11125:18:1;;;11118:43;11178:19;;31485:138:0::1;10794:409:1::0;31485:138:0::1;31658:13;-1:-1:-1::0;;;;;31642:30:0::1;:4;-1:-1:-1::0;;;;;31642:30:0::1;::::0;31634:63:::1;;;::::0;-1:-1:-1;;;31634:63:0;;10647:2:1;31634:63:0::1;::::0;::::1;10629:21:1::0;10686:2;10666:18;;;10659:30;-1:-1:-1;;;10705:18:1;;;10698:50;10765:18;;31634:63:0::1;10445:344:1::0;31634:63:0::1;-1:-1:-1::0;;;;;31710:33:0;::::1;;::::0;;;:27:::1;:33;::::0;;;;;;;;:42;;-1:-1:-1;;31710:42:0::1;::::0;::::1;;::::0;;::::1;::::0;;;31770:44;;1519:41:1;;;31770:44:0::1;::::0;1492:18:1;31770:44:0::1;1379:187:1::0;19590:498:0;19708:4;17244:10;19708:4;19791:25;17244:10;19808:7;19791:9;:25::i;:::-;19764:52;;19869:15;19849:16;:35;;19827:122;;;;-1:-1:-1;;;19827:122:0;;11410:2:1;19827:122:0;;;11392:21:1;11449:2;11429:18;;;11422:30;11488:34;11468:18;;;11461:62;-1:-1:-1;;;11539:18:1;;;11532:35;11584:19;;19827:122:0;11208:401:1;19827:122:0;19985:60;19994:5;20001:7;20029:15;20010:16;:34;19985:8;:60::i;18372:218::-;18476:4;17244:10;18532:28;17244:10;18549:2;18553:6;18532:9;:28::i;30201:452::-;23325:13;:11;:13::i;:::-;30322:6:::1;30300:18;;:28:::0;30278:119:::1;;;::::0;-1:-1:-1;;;30278:119:0;;11816:2:1;30278:119:0::1;::::0;::::1;11798:21:1::0;11855:2;11835:18;;;11828:30;11894:34;11874:18;;;11867:62;-1:-1:-1;;;11945:18:1;;;11938:39;11994:19;;30278:119:0::1;11614:405:1::0;30278:119:0::1;30456:9;30440:13;18193:12:::0;;;18105:108;30440:13:::1;:25;;;;:::i;:::-;30430:6;:35;;30408:147;;;::::0;-1:-1:-1;;;30408:147:0;;12448:2:1;30408:147:0::1;::::0;::::1;12430:21:1::0;12487:2;12467:18;;;12460:30;12526:34;12506:18;;;12499:62;12597:32;12577:18;;;12570:60;12647:19;;30408:147:0::1;12246:426:1::0;30408:147:0::1;30568:18;:27:::0;;;30613:32:::1;::::0;1717:25:1;;;30613:32:0::1;::::0;1705:2:1;1690:18;30613:32:0::1;1571:177:1::0;27428:490:0;27477:7;27501:13;27518:2;27501:19;27497:414;;-1:-1:-1;27544:42:0;;27428:490::o;27497:414::-;27608:13;27625:2;27608:19;27604:307;;-1:-1:-1;27651:42:0;;27428:490::o;27604:307::-;27715:13;27732:1;27715:18;:40;;;;27737:13;27754:1;27737:18;27715:40;27711:200;;;-1:-1:-1;27779:42:0;;27428:490::o;27711:200::-;27854:45;;-1:-1:-1;;;27854:45:0;;12879:2:1;27854:45:0;;;12861:21:1;12918:2;12898:18;;;12891:30;12957:34;12937:18;;;12930:62;-1:-1:-1;;;13008:18:1;;;13001:33;13051:19;;27854:45:0;12677:399:1;31992:363:0;23325:13;:11;:13::i;:::-;-1:-1:-1;;;;;32129:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;32107:132:::1;;;;-1:-1:-1::0;;;32107:132:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32250:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;32250:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;32307:40;;1519:41:1;;;32307:40:0::1;::::0;1492:18:1;32307:40:0::1;1379:187:1::0;18598:176:0;-1:-1:-1;;;;;18739:18:0;;;18712:7;18739:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18598:176::o;23712:238::-;23325:13;:11;:13::i;:::-;-1:-1:-1;;;;;23815:22:0;::::1;23793:110;;;::::0;-1:-1:-1;;;23793:110:0;;13283:2:1;23793:110:0::1;::::0;::::1;13265:21:1::0;13322:2;13302:18;;;13295:30;13361:34;13341:18;;;13334:62;-1:-1:-1;;;13412:18:1;;;13405:36;13458:19;;23793:110:0::1;13081:402:1::0;23793:110:0::1;23914:28;23933:8;23914:18;:28::i;27926:447::-:0;23325:13;:11;:13::i;:::-;28022:4:::1;-1:-1:-1::0;;;;;28005:22:0;::::1;::::0;27997:67:::1;;;::::0;-1:-1:-1;;;27997:67:0;;13690:2:1;27997:67:0::1;::::0;::::1;13672:21:1::0;;;13709:18;;;13702:30;13768:34;13748:18;;;13741:62;13820:18;;27997:67:0::1;13488:356:1::0;27997:67:0::1;-1:-1:-1::0;;;;;28081:21:0;::::1;28077:126;;28119:51;::::0;28127:10:::1;::::0;28148:21:::1;28119:51:::0;::::1;;;::::0;::::1;::::0;;;28148:21;28127:10;28119:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;37437:170:::0;37402:205::o;28077:126::-:1;28275:35;::::0;-1:-1:-1;;;28275:35:0;;28304:4:::1;28275:35;::::0;::::1;1925:51:1::0;28240:5:0;;28213:17:::1;::::0;-1:-1:-1;;;;;28275:20:0;::::1;::::0;::::1;::::0;1898:18:1;;28275:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28257:53:::0;-1:-1:-1;28321:44:0::1;-1:-1:-1::0;;;;;28321:23:0;::::1;28345:10;28257:53:::0;28321:23:::1;:44::i;:::-;27986:387;;27926:447:::0;:::o;23461:132::-;23412:7;23439:6;-1:-1:-1;;;;;23439:6:0;17244:10;23525:23;23517:68;;;;-1:-1:-1;;;23517:68:0;;14240:2:1;23517:68:0;;;14222:21:1;;;14259:18;;;14252:30;14318:34;14298:18;;;14291:62;14370:18;;23517:68:0;14038:356:1;21866:380:0;-1:-1:-1;;;;;22002:19:0;;21994:68;;;;-1:-1:-1;;;21994:68:0;;14601:2:1;21994:68:0;;;14583:21:1;14640:2;14620:18;;;14613:30;14679:34;14659:18;;;14652:62;-1:-1:-1;;;14730:18:1;;;14723:34;14774:19;;21994:68:0;14399:400:1;21994:68:0;-1:-1:-1;;;;;22081:21:0;;22073:68;;;;-1:-1:-1;;;22073:68:0;;15006:2:1;22073:68:0;;;14988:21:1;15045:2;15025:18;;;15018:30;15084:34;15064:18;;;15057:62;-1:-1:-1;;;15135:18:1;;;15128:32;15177:19;;22073:68:0;14804:398:1;22073:68:0;-1:-1:-1;;;;;22154:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;22206:32;;1717:25:1;;;22206:32:0;;1690:18:1;22206:32:0;;;;;;;21866:380;;;:::o;22254:502::-;22389:24;22416:25;22426:5;22433:7;22416:9;:25::i;:::-;22389:52;;-1:-1:-1;;22456:16:0;:37;22452:297;;22556:6;22536:16;:26;;22510:117;;;;-1:-1:-1;;;22510:117:0;;15409:2:1;22510:117:0;;;15391:21:1;15448:2;15428:18;;;15421:30;15487:31;15467:18;;;15460:59;15536:18;;22510:117:0;15207:353:1;22510:117:0;22671:51;22680:5;22687:7;22715:6;22696:16;:25;22671:8;:51::i;:::-;22378:378;22254:502;;;:::o;33295:2206::-;-1:-1:-1;;;;;33427:18:0;;33419:68;;;;-1:-1:-1;;;33419:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33506:16:0;;33498:64;;;;-1:-1:-1;;;33498:64:0;;;;;;;:::i;:::-;33579:6;33589:1;33579:11;33575:93;;33607:28;33623:4;33629:2;33633:1;33607:15;:28::i;33575:93::-;33729:4;33680:28;18338:18;;;:9;:18;;;;;;33787;;33763:42;;;;;;;33836:33;;-1:-1:-1;33861:8:0;;-1:-1:-1;;;33861:8:0;;;;33860:9;33836:33;:84;;;;-1:-1:-1;;;;;;33887:33:0;;;;;;:27;:33;;;;;;;;33886:34;33836:84;:118;;;;-1:-1:-1;33937:17:0;;;;33836:118;:182;;;;;34017:1;33994:20;;33971;;:43;;;;:::i;:::-;:47;33836:182;33818:249;;;34045:10;:8;:10::i;:::-;-1:-1:-1;;;;;34115:25:0;;34079:12;34115:25;;;:19;:25;;;;;;34094:4;;34115:25;;;:52;;-1:-1:-1;;;;;;34144:23:0;;;;;;:19;:23;;;;;;;;34115:52;:64;;;-1:-1:-1;34171:8:0;;-1:-1:-1;;;34171:8:0;;;;34115:64;34111:112;;;-1:-1:-1;34206:5:0;34111:112;-1:-1:-1;;;;;34241:33:0;;;;;;:29;:33;;;;;;;;34236:294;;34411:11;34393:14;;34377:13;18193:12;;;18105:108;34377:13;:30;;;;:::i;:::-;34376:46;;;;:::i;:::-;34341:6;34325:13;34335:2;-1:-1:-1;;;;;18338:18:0;18311:7;18338:18;;;:9;:18;;;;;;;18221:143;34325:13;:22;;;;:::i;:::-;:97;;34295:219;;;;-1:-1:-1;;;34295:219:0;;16750:2:1;34295:219:0;;;16732:21:1;16789:2;16769:18;;;16762:30;16828:34;16808:18;;;16801:62;-1:-1:-1;;;16879:18:1;;;16872:46;16935:19;;34295:219:0;16548:412:1;34295:219:0;34556:7;34552:896;;;-1:-1:-1;;;;;34670:33:0;;34580:27;34670:33;;;:27;:33;;;;;;34580:27;;34670:33;;34666:440;;;34775:11;34756:15;;34747:6;:24;;;;:::i;:::-;34746:40;;;;:::i;:::-;34724:62;;34856:11;34837:15;;34828:6;:24;;;;:::i;:::-;34827:40;;;;:::i;:::-;34805:62;;34666:440;;;-1:-1:-1;;;;;34893:31:0;;;;;;:27;:31;;;;;;;;34889:217;;;34997:11;34977:16;;34968:6;:25;;;;:::i;:::-;34967:41;;;;:::i;:::-;34945:63;;35079:11;35059:16;;35050:6;:25;;;;:::i;:::-;35049:41;;;;:::i;:::-;35027:63;;34889:217;35146:19;35122:20;;:43;;;;;;;:::i;:::-;;;;;;;;35204:19;35180:20;;:43;;;;;;;:::i;:::-;;;;-1:-1:-1;35240:12:0;;-1:-1:-1;35255:41:0;35277:19;35255;:41;:::i;:::-;35240:56;-1:-1:-1;35317:8:0;;35313:124;;35346:14;35356:4;35346:14;;:::i;:::-;;;35379:42;35395:4;35409;35416;35379:15;:42::i;:::-;34565:883;;;34552:896;35460:33;35476:4;35482:2;35486:6;35460:15;:33::i;:::-;33408:2093;;;33295:2206;;;:::o;35509:1607::-;25048:8;:15;;-1:-1:-1;;;;25048:15:0;-1:-1:-1;;;25048:15:0;;;35580:16:::1;::::0;;35594:1:::1;35580:16:::0;;;;;::::1;::::0;;-1:-1:-1;;35580:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;35580:16:0::1;35556:40;;35625:4;35607;35612:1;35607:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;35607:23:0::1;;;-1:-1:-1::0;;;;;35607:23:0::1;;;::::0;::::1;35651:15;-1:-1:-1::0;;;;;35651:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35641:4;35646:1;35641:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35641:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:32;35735:4:::1;35686:28;18338:18:::0;;;:9;:18;;;;;;;35686:55:::1;;35754:16;35796:20;;35773;;:43;;;;:::i;:::-;35754:62;;35829:20;35919:8;35913:1;35890:20;;:24;;;;:::i;:::-;35853:62;::::0;:20;:62:::1;:::i;:::-;35852:75;;;;:::i;:::-;35829:98:::0;-1:-1:-1;35940:22:0::1;35965:35;35829:98:::0;35965:20;:35:::1;:::i;:::-;35940:60;;36050:1;36026:20;;36025:26;;;;:::i;:::-;36013:38;::::0;;::::1;:::i;:::-;36081:223;::::0;-1:-1:-1;;;36081:223:0;;36013:38;;-1:-1:-1;;;;;;36081:15:0::1;:66;::::0;::::1;::::0;:223:::1;::::0;36166:14;;36199:1:::1;::::0;36219:4;;36250::::1;::::0;36274:15:::1;::::0;36081:223:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;36064:292;;36338:7;;;;;;;36064:292;36460:20;::::0;36389:21:::1;::::0;36368:18:::1;::::0;36484:8;;36447:33:::1;::::0;36389:21;36447:33:::1;:::i;:::-;36446:46;;;;:::i;:::-;36423:69:::0;-1:-1:-1;36503:18:0::1;36524:25;36423:69:::0;36524:10;:25:::1;:::i;:::-;36503:46;;36581:1;36566:12;:16;:34;;;;;36599:1;36586:10;:14;36566:34;36562:376;;;36638:264;::::0;-1:-1:-1;;;36638:264:0;;36719:4:::1;36638:264;::::0;::::1;18944:34:1::0;18994:18;;;18987:34;;;36782:1:0::1;19037:18:1::0;;;19030:34;;;19080:18;;;19073:34;36838:6:0::1;19123:19:1::0;;;19116:44;36868:15:0::1;19176:19:1::0;;;19169:35;36638:15:0::1;-1:-1:-1::0;;;;;36638:31:0::1;::::0;::::1;::::0;36677:10;;18878:19:1;;36638:264:0::1;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;36638:264:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;36638:264:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;36617:310:::0;::::1;;;;;;36954:16:::0;;36950:87:::1;;36995:15;::::0;36987:38:::1;::::0;-1:-1:-1;;;;;36995:15:0::1;37012:12:::0;36987:7:::1;:38::i;:::-;;36950:87;-1:-1:-1::0;;37072:1:0::1;37049:20;:24:::0;;;37084:20:::1;:24:::0;-1:-1:-1;;;;;;25074:1:0::1;25086:8:::0;:16;;-1:-1:-1;;;;25086:16:0;;;35509:1607::o;23958:191::-;24032:16;24051:6;;-1:-1:-1;;;;;24068:17:0;;;-1:-1:-1;;;;;;24068:17:0;;;;;;24101:40;;24051:6;;;;;;;24101:40;;24032:16;24101:40;24021:128;23958:191;:::o;12331:214::-;12468:58;;;-1:-1:-1;;;;;19718:32:1;;12468:58:0;;;19700:51:1;19767:18;;;;19760:34;;;12468:58:0;;;;;;;;;;19673:18:1;;;;12468:58:0;;;;;;;;-1:-1:-1;;;;;12468:58:0;-1:-1:-1;;;12468:58:0;;;12414:123;;12448:5;;12414:19;:123::i;20096:714::-;-1:-1:-1;;;;;20227:18:0;;20219:68;;;;-1:-1:-1;;;20219:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20306:16:0;;20298:64;;;;-1:-1:-1;;;20298:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20448:15:0;;20426:19;20448:15;;;:9;:15;;;;;;20496:21;;;;20474:109;;;;-1:-1:-1;;;20474:109:0;;20007:2:1;20474:109:0;;;19989:21:1;20046:2;20026:18;;;20019:30;20085:34;20065:18;;;20058:62;-1:-1:-1;;;20136:18:1;;;20129:36;20182:19;;20474:109:0;19805:402:1;20474:109:0;-1:-1:-1;;;;;20619:15:0;;;;;;;:9;:15;;;;;;20637:20;;;20619:38;;20674:13;;;;;;;;;;:23;;;;;;20726:26;;;;;;20651:6;1717:25:1;;1705:2;1690:18;;1571:177;20726:26:0;;;;;;;;20765:37;27926:447;37124:270;37226:4;16688:21;:19;:21::i;:::-;37271:6:::1;37247:21;:30;37243:48;;;-1:-1:-1::0;37286:5:0::1;37279:12;;37243:48;37305:12;37331:3;-1:-1:-1::0;;;;;37323:17:0::1;37348:6;37323:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;37304:55:0;;-1:-1:-1;;;16720:1:0::1;16732:20:::0;16504:1;16977:22;;16928:79;15439:380;15520:23;15546:106;15588:4;15546:106;;;;;;;;;;;;;;;;;15554:5;-1:-1:-1;;;;;15546:27:0;;;:106;;;;;:::i;:::-;15520:132;;15685:10;:17;15706:1;15685:22;:56;;;;15722:10;15711:30;;;;;;;;;;;;:::i;:::-;15663:148;;;;-1:-1:-1;;;15663:148:0;;20874:2:1;15663:148:0;;;20856:21:1;20913:2;20893:18;;;20886:30;20952:34;20932:18;;;20925:62;-1:-1:-1;;;21003:18:1;;;20996:40;21053:19;;15663:148:0;20672:406:1;16768:152:0;16548:1;16826:7;;:19;16818:63;;;;-1:-1:-1;;;16818:63:0;;21285:2:1;16818:63:0;;;21267:21:1;21324:2;21304:18;;;21297:30;21363:33;21343:18;;;21336:61;21414:18;;16818:63:0;21083:355:1;16818:63:0;16548:1;16894:7;:18;16768:152::o;7136:229::-;7273:12;7305:52;7327:6;7335:4;7341:1;7344:12;7305:21;:52::i;:::-;7298:59;7136:229;-1:-1:-1;;;;7136:229:0:o;7737:612::-;7907:12;7979:5;7954:21;:30;;7932:118;;;;-1:-1:-1;;;7932:118:0;;21645:2:1;7932:118:0;;;21627:21:1;21684:2;21664:18;;;21657:30;21723:34;21703:18;;;21696:62;-1:-1:-1;;;21774:18:1;;;21767:36;21820:19;;7932:118:0;21443:402:1;7932:118:0;8062:12;8076:23;8103:6;-1:-1:-1;;;;;8103:11:0;8122:5;8143:4;8103:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8061:97;;;;8189:152;8234:6;8259:7;8285:10;8314:12;8189:26;:152::i;:::-;8169:172;7737:612;-1:-1:-1;;;;;;;7737:612:0:o;9853:477::-;10038:12;10067:7;10063:260;;;10095:10;:17;10116:1;10095:22;10091:123;;-1:-1:-1;;;;;27389:19:0;;;10138:60;;;;-1:-1:-1;;;10138:60:0;;22344:2:1;10138:60:0;;;22326:21:1;22383:2;22363:18;;;22356:30;22422:31;22402:18;;;22395:59;22471:18;;10138:60:0;22142:353:1;10138:60:0;-1:-1:-1;10235:10:0;10228:17;;10063:260;10278:33;10286:10;10298:12;10774:17;;:21;10770:299;;10917:10;10911:17;10974:15;10961:10;10957:2;10953:19;10946:44;10770:299;11044:12;11037:20;;-1:-1:-1;;;11037:20:0;;;;;;;;:::i;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:250::-;352:1;362:113;376:6;373:1;370:13;362:113;;;452:11;;;446:18;433:11;;;426:39;398:2;391:10;362:113;;;-1:-1:-1;;509:1:1;491:16;;484:27;267:250::o;522:396::-;671:2;660:9;653:21;634:4;703:6;697:13;746:6;741:2;730:9;726:18;719:34;762:79;834:6;829:2;818:9;814:18;809:2;801:6;797:15;762:79;:::i;:::-;902:2;881:15;-1:-1:-1;;877:29:1;862:45;;;;909:2;858:54;;522:396;-1:-1:-1;;522:396:1:o;923:131::-;-1:-1:-1;;;;;998:31:1;;988:42;;978:70;;1044:1;1041;1034:12;1059:315;1127:6;1135;1188:2;1176:9;1167:7;1163:23;1159:32;1156:52;;;1204:1;1201;1194:12;1156:52;1243:9;1230:23;1262:31;1287:5;1262:31;:::i;:::-;1312:5;1364:2;1349:18;;;;1336:32;;-1:-1:-1;;;1059:315:1:o;1987:118::-;2073:5;2066:13;2059:21;2052:5;2049:32;2039:60;;2095:1;2092;2085:12;2110:241;2166:6;2219:2;2207:9;2198:7;2194:23;2190:32;2187:52;;;2235:1;2232;2225:12;2187:52;2274:9;2261:23;2293:28;2315:5;2293:28;:::i;:::-;2340:5;2110:241;-1:-1:-1;;;2110:241:1:o;2356:456::-;2433:6;2441;2449;2502:2;2490:9;2481:7;2477:23;2473:32;2470:52;;;2518:1;2515;2508:12;2470:52;2557:9;2544:23;2576:31;2601:5;2576:31;:::i;:::-;2626:5;-1:-1:-1;2683:2:1;2668:18;;2655:32;2696:33;2655:32;2696:33;:::i;:::-;2356:456;;2748:7;;-1:-1:-1;;;2802:2:1;2787:18;;;;2774:32;;2356:456::o;3214:247::-;3273:6;3326:2;3314:9;3305:7;3301:23;3297:32;3294:52;;;3342:1;3339;3332:12;3294:52;3381:9;3368:23;3400:31;3425:5;3400:31;:::i;3466:180::-;3525:6;3578:2;3566:9;3557:7;3553:23;3549:32;3546:52;;;3594:1;3591;3584:12;3546:52;-1:-1:-1;3617:23:1;;3466:180;-1:-1:-1;3466:180:1:o;3651:382::-;3716:6;3724;3777:2;3765:9;3756:7;3752:23;3748:32;3745:52;;;3793:1;3790;3783:12;3745:52;3832:9;3819:23;3851:31;3876:5;3851:31;:::i;:::-;3901:5;-1:-1:-1;3958:2:1;3943:18;;3930:32;3971:30;3930:32;3971:30;:::i;:::-;4020:7;4010:17;;;3651:382;;;;;:::o;4038:388::-;4106:6;4114;4167:2;4155:9;4146:7;4142:23;4138:32;4135:52;;;4183:1;4180;4173:12;4135:52;4222:9;4209:23;4241:31;4266:5;4241:31;:::i;:::-;4291:5;-1:-1:-1;4348:2:1;4333:18;;4320:32;4361:33;4320:32;4361:33;:::i;4790:127::-;4851:10;4846:3;4842:20;4839:1;4832:31;4882:4;4879:1;4872:15;4906:4;4903:1;4896:15;4922:125;4987:9;;;5008:10;;;5005:36;;;5021:18;;:::i;5665:380::-;5744:1;5740:12;;;;5787;;;5808:61;;5862:4;5854:6;5850:17;5840:27;;5808:61;5915:2;5907:6;5904:14;5884:18;5881:38;5878:161;;5961:10;5956:3;5952:20;5949:1;5942:31;5996:4;5993:1;5986:15;6024:4;6021:1;6014:15;5878:161;;5665:380;;;:::o;10034:406::-;10236:2;10218:21;;;10275:2;10255:18;;;10248:30;10314:34;10309:2;10294:18;;10287:62;-1:-1:-1;;;10380:2:1;10365:18;;10358:40;10430:3;10415:19;;10034:406::o;12024:217::-;12064:1;12090;12080:132;;12134:10;12129:3;12125:20;12122:1;12115:31;12169:4;12166:1;12159:15;12197:4;12194:1;12187:15;12080:132;-1:-1:-1;12226:9:1;;12024:217::o;13849:184::-;13919:6;13972:2;13960:9;13951:7;13947:23;13943:32;13940:52;;;13988:1;13985;13978:12;13940:52;-1:-1:-1;14011:16:1;;13849:184;-1:-1:-1;13849:184:1:o;15565:401::-;15767:2;15749:21;;;15806:2;15786:18;;;15779:30;15845:34;15840:2;15825:18;;15818:62;-1:-1:-1;;;15911:2:1;15896:18;;15889:35;15956:3;15941:19;;15565:401::o;15971:399::-;16173:2;16155:21;;;16212:2;16192:18;;;16185:30;16251:34;16246:2;16231:18;;16224:62;-1:-1:-1;;;16317:2:1;16302:18;;16295:33;16360:3;16345:19;;15971:399::o;16375:168::-;16448:9;;;16479;;16496:15;;;16490:22;;16476:37;16466:71;;16517:18;;:::i;16965:128::-;17032:9;;;17053:11;;;17050:37;;;17067:18;;:::i;17230:127::-;17291:10;17286:3;17282:20;17279:1;17272:31;17322:4;17319:1;17312:15;17346:4;17343:1;17336:15;17362:251;17432:6;17485:2;17473:9;17464:7;17460:23;17456:32;17453:52;;;17501:1;17498;17491:12;17453:52;17533:9;17527:16;17552:31;17577:5;17552:31;:::i;17618:980::-;17880:4;17928:3;17917:9;17913:19;17959:6;17948:9;17941:25;17985:2;18023:6;18018:2;18007:9;18003:18;17996:34;18066:3;18061:2;18050:9;18046:18;18039:31;18090:6;18125;18119:13;18156:6;18148;18141:22;18194:3;18183:9;18179:19;18172:26;;18233:2;18225:6;18221:15;18207:29;;18254:1;18264:195;18278:6;18275:1;18272:13;18264:195;;;18343:13;;-1:-1:-1;;;;;18339:39:1;18327:52;;18434:15;;;;18399:12;;;;18375:1;18293:9;18264:195;;;-1:-1:-1;;;;;;;18515:32:1;;;;18510:2;18495:18;;18488:60;-1:-1:-1;;;18579:3:1;18564:19;18557:35;18476:3;17618:980;-1:-1:-1;;;17618:980:1:o;19215:306::-;19303:6;19311;19319;19372:2;19360:9;19351:7;19347:23;19343:32;19340:52;;;19388:1;19385;19378:12;19340:52;19417:9;19411:16;19401:26;;19467:2;19456:9;19452:18;19446:25;19436:35;;19511:2;19500:9;19496:18;19490:25;19480:35;;19215:306;;;;;:::o;20422:245::-;20489:6;20542:2;20530:9;20521:7;20517:23;20513:32;20510:52;;;20558:1;20555;20548:12;20510:52;20590:9;20584:16;20609:28;20631:5;20609:28;:::i;21850:287::-;21979:3;22017:6;22011:13;22033:66;22092:6;22087:3;22080:4;22072:6;22068:17;22033:66;:::i;:::-;22115:16;;;;;21850:287;-1:-1:-1;;21850:287:1:o

Swarm Source

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