ETH Price: $2,435.53 (+1.39%)

Token

Jin Chan (JIN)
 

Overview

Max Total Supply

888,888,888 JIN

Holders

103

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
759,023.17550931406349242 JIN

Value
$0.00
0xd7c5df8a110366a27e5f3aa002c502cb3d29241e
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:
JIN

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

/*

         ▄█   ▄█  ███▄▄▄▄         ▄████████    ▄█    █▄       ▄████████ ███▄▄▄▄   
        ███  ███  ███▀▀▀██▄      ███    ███   ███    ███     ███    ███ ███▀▀▀██▄ 
        ███  ███▌ ███   ███      ███    █▀    ███    ███     ███    ███ ███   ███ 
        ███  ███▌ ███   ███      ███         ▄███▄▄▄▄███▄▄   ███    ███ ███   ███ 
        ███  ███▌ ███   ███      ███        ▀▀███▀▀▀▀███▀  ▀███████████ ███   ███ 
        ███  ███  ███   ███      ███    █▄    ███    ███     ███    ███ ███   ███ 
        ███  ███  ███   ███      ███    ███   ███    ███     ███    ███ ███   ███ 
    █▄ ▄███  █▀    ▀█   █▀       ████████▀    ███    █▀      ███    █▀   ▀█   █▀                                                                         

    Jin Chan: 金蟾
    A golden money toad originated from Chinese Folklore that represents a Feng Shui charm for prosperity, fortitude, luck & more.
    Simply hold $JIN and receive 2% rewards, paid in $ETH.

        Website: https://jinchan.finance
        Telegram: https://t.me/jinchancoin
        Twitter: https://twitter.com/jinchancoin
        Linktree: https://linktr.ee/jinchancoin

*/

pragma solidity 0.8.19;

// SPDX-License-Identifier: Unlicensed

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function decimals() external view returns (uint8);

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

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

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

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

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

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

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

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

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

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

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

    function WETH() external pure returns (address);

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

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

interface IDividendDistributor {
    function setDistributionCriteria(
        uint256 _minPeriod,
        uint256 _minDistribution
    ) external;

    function setShare(address shareholder, uint256 amount) external;

    function deposit() external payable;

    function process(uint256 gas) external;
}

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;
    address _token;

    address distributorOwner;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    address[] shareholders;
    mapping(address => uint256) shareholderIndexes;
    mapping(address => uint256) shareholderClaims;
    mapping(address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10**36;

    uint256 public minPeriod = 60 minutes;
    uint256 public minDistribution = 1 * (10**19);

    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token);
        _;
    }

    constructor(address _distributorOwner) {
        _token = msg.sender;
        distributorOwner = _distributorOwner;
    }

    function setDistributionCriteria(
        uint256 newMinPeriod,
        uint256 newMinDistribution
    ) external override onlyToken {
        minPeriod = newMinPeriod;
        minDistribution = newMinDistribution;
    }

    function setShare(address shareholder, uint256 amount)
        external
        override
        onlyToken
    {
        if (shares[shareholder].amount > 0) {
            distributeDividend(shareholder);
        }

        if (amount > 0 && shares[shareholder].amount == 0) {
            addShareholder(shareholder);
        } else if (amount == 0 && shares[shareholder].amount > 0) {
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(
            shares[shareholder].amount
        );
    }

    function deposit() external payable override onlyToken {
        totalDividends = totalDividends.add(msg.value);
        dividendsPerShare = dividendsPerShare.add(
            dividendsPerShareAccuracyFactor.mul(msg.value).div(totalShares)
        );
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if (shareholderCount == 0) {
            return;
        }

        uint256 iterations = 0;
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        while (gasUsed < gas && iterations < shareholderCount) {
            if (currentIndex >= shareholderCount) {
                currentIndex = 0;
            }

            if (shouldDistribute(shareholders[currentIndex])) {
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

    function shouldDistribute(address shareholder)
        internal
        view
        returns (bool)
    {
        return
            shareholderClaims[shareholder] + minPeriod < block.timestamp &&
            getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if (shares[shareholder].amount == 0) {
            return;
        }

        uint256 amount = getUnpaidEarnings(shareholder);
        if (amount > 0) {
            totalDistributed = totalDistributed.add(amount);
            // RewardToken.transfer(shareholder, amount);
            payable(shareholder).transfer(amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder]
                .totalRealised
                .add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(
                shares[shareholder].amount
            );
        }
    }

    function claimDividend(address shareholder) external onlyToken {
        distributeDividend(shareholder);
    }

    function changeOwner(address newOwner) external onlyToken {
        distributorOwner = newOwner;
    }

    function rescueDividends(uint256 amountPercentage) external onlyToken {
        uint256 amountETH = address(this).balance;
        payable(msg.sender).transfer((amountETH * amountPercentage) / 100);
    }

    function getUnpaidEarnings(address shareholder)
        public
        view
        returns (uint256)
    {
        if (shares[shareholder].amount == 0) {
            return 0;
        }

        uint256 shareholderTotalDividends = getCumulativeDividends(
            shares[shareholder].amount
        );
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if (shareholderTotalDividends <= shareholderTotalExcluded) {
            return 0;
        }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share)
        internal
        view
        returns (uint256)
    {
        return
            share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[
            shareholders.length - 1
        ];
        shareholderIndexes[
            shareholders[shareholders.length - 1]
        ] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}

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

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

abstract contract Ownable is Context {
    address private _owner;

    /**
     * @dev The caller account is not onlyOwner to perform an operation.
     */
    error OwnableUnonlyOwnerAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnonlyOwnerAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract JIN is IERC20, Ownable {
    using SafeMath for uint256;

    string constant _name = "Jin Chan";
    string constant _symbol = "JIN";
    uint8 constant _decimals = 18;

    address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    address public autoLiquidityReceiver;
    address public marketingWallet;

    uint256 _totalSupply = 888888888 * (10**_decimals);
    uint256 public _maxTxAmount = (_totalSupply * 10) / 1000;
    uint256 public _walletMax = (_totalSupply * 10) / 1000;
    bool public restrictWhales = true;

    bool public tradingOpen = false;

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

    mapping(address => bool) public isFeeExempt;
    mapping(address => bool) public isTxLimitExempt;
    mapping(address => bool) public isDividendExempt;

    bool public takeBuyFee = true;
    bool public takeSellFee = true;
    bool public takeTransferFee = true;

    uint256 public liquidityFee = 0;
    uint256 public marketingFee = 150;
    uint256 public rewardsFee = 0;

    uint256 public totalFee = 0;
    uint256 public totalFeeIfSelling = 0;

    IDEXRouter public router;
    address public pair;
    mapping(address => bool) public isPair;

    DividendDistributor public dividendDistributor;
    uint256 distributorGas = 0;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;

    uint256 public swapThreshold = (_totalSupply * 3) / 2000;

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

    event AutoLiquify(uint256 amountETH, uint256 amountToken);

    constructor() {
        autoLiquidityReceiver = msg.sender;
        marketingWallet = 0xf2e54D476856CA8202ce3aE6Aa35AD00Cbb5Ed63;

        router = IDEXRouter(routerAddress);
        address pair_weth = IDEXFactory(router.factory()).createPair(
            router.WETH(),
            address(this)
        );
        pair = pair_weth;
        isPair[pair] = true;

        _allowances[address(this)][address(router)] = type(uint256).max;

        dividendDistributor = new DividendDistributor(msg.sender);

        isFeeExempt[msg.sender] = true;
        isFeeExempt[address(this)] = true;

        isTxLimitExempt[msg.sender] = true;
        isTxLimitExempt[pair] = true;
        isTxLimitExempt[pair_weth] = true;

        isDividendExempt[pair] = true;
        isDividendExempt[pair_weth] = true;
        isDividendExempt[msg.sender] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[address(0xdead)] = true;
        isDividendExempt[address(0)] = true;

        totalFee = liquidityFee.add(marketingFee).add(rewardsFee);
        totalFeeIfSelling = totalFee + 340;

        _balances[msg.sender] = _totalSupply;

        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}

    function name() external pure override returns (string memory) {
        return _name;
    }

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

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

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

    function getCirculatingSupply() public view returns (uint256) {
        return
            _totalSupply.sub(balanceOf(address(0xdead))).sub(
                balanceOf(address(0))
            );
    }

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

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

    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function checkPendingDividends(address account) external view returns (uint256) {
        return dividendDistributor.getUnpaidEarnings(account);
    }

    function claimDividend() external {
        dividendDistributor.claimDividend(msg.sender);
    }
    
    function openTrading() public onlyOwner {
        tradingOpen = true;

    }

    function changeTakeBuyfee(bool status) public onlyOwner {
        takeBuyFee = status;
    }

    function changeTakeSellfee(bool status) public onlyOwner {
        takeSellFee = status;
    }

    function changeTakeTransferfee(bool status) public onlyOwner {
        takeTransferFee = status;
    }

    function setWalletLimit(uint256 newLimit) external onlyOwner {
        require(newLimit >= 5, "Wallet Limit needs to be at least 0.5%");
        _walletMax = (_totalSupply * newLimit) / 1000;
    }

    function setTxLimit(uint256 newLimit) external onlyOwner {
        require(newLimit >= 5, "Wallet Limit needs to be at least 0.5%");
        _maxTxAmount = (_totalSupply * newLimit) / 1000;
    }

    function changeFees(
        uint256 newLiqFeeThou,
        uint256 newRewardFeeThou,
        uint256 newmarketingFee,
        uint256 extraSellFee
    ) external onlyOwner {
        liquidityFee = newLiqFeeThou;
        rewardsFee = newRewardFeeThou;
        marketingFee = newmarketingFee;

        totalFee = liquidityFee.add(marketingFee).add(rewardsFee);
        totalFeeIfSelling = totalFee + extraSellFee;
    }

    function changeSwapBackSettings(
        bool enableSwapBack,
        uint256 newSwapBackLimit,
        bool swapByLimitOnly
    ) external onlyOwner {
        swapAndLiquifyEnabled = enableSwapBack;
        swapThreshold = newSwapBackLimit;
        swapAndLiquifyByLimitOnly = swapByLimitOnly;
    }

    function changeDistributionCriteria(
        uint256 newinPeriod,
        uint256 newMinDistribution
    ) external onlyOwner {
        dividendDistributor.setDistributionCriteria(
            newinPeriod,
            newMinDistribution
        );
    }

    function changeDistributorSettings(uint256 gas) external onlyOwner {
        require(gas < 750000);
        distributorGas = gas;
    }

    function processDividends(uint256 gas) external onlyOwner {
        dividendDistributor.process(gas);
    }

    function setRouterAddress(address newRouter) public onlyOwner {
        IDEXRouter _uniswapV2Router = IDEXRouter(newRouter);
        // Create a uniswap pair for this new token
        IDEXFactory _uniswapV2Factory = IDEXFactory(_uniswapV2Router.factory());
        address pairAddress = _uniswapV2Factory.getPair(
            address(this),
            _uniswapV2Router.WETH()
        );

        if (pairAddress == address(0)) {
            pairAddress = _uniswapV2Factory.createPair(
                address(this),
                _uniswapV2Router.WETH()
            );
        }
        isPair[pairAddress] = true;
        isDividendExempt[pairAddress] = true;
        isTxLimitExempt[pairAddress] = true;

        router = _uniswapV2Router;
    }

    function changePair(address _address, bool status) public onlyOwner {
        isPair[_address] = status;
    }

    function changeIsFeeExempt(address holder, bool exempt) public onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function changeIsTxLimitExempt(address holder, bool exempt)
        public
        onlyOwner
    {
        isTxLimitExempt[holder] = exempt;
    }

    function changeIsDividendExempt(address holder, bool exempt)
        public
        onlyOwner
    {
        if (isPair[holder]) {
            exempt = true;
        }

        isDividendExempt[holder] = exempt;

        if (exempt) {
            dividendDistributor.setShare(holder, 0);
        } else {
            dividendDistributor.setShare(holder, _balances[holder]);
        }
    }

    function addDapp(address target) public onlyOwner {
        changeIsDividendExempt(target, true);
        changeIsTxLimitExempt(target, true);
        changeIsFeeExempt(target, true);
    }

    function changeFeeReceivers(
        address newLiquidityReceiver,
        address newMarketingWallet
    ) external onlyOwner {
        autoLiquidityReceiver = newLiquidityReceiver;
        marketingWallet = newMarketingWallet;
    }

    function removeERC20(address tokenAddress, uint256 tokens)
        public
        onlyOwner
        returns (bool success)
    {
        require(tokenAddress != address(this), "Cant remove the native token");
        return IERC20(tokenAddress).transfer(msg.sender, tokens);
    }

    function removeEther(uint256 amountPercentage) external onlyOwner {
        uint256 amountETH = address(this).balance;
        payable(msg.sender).transfer((amountETH * amountPercentage) / 100);
    }

    function ManualSwap() external onlyOwner {
        swapBack();
    }

    function FinishLaunch() external onlyOwner {
        _maxTxAmount = _totalSupply;
        _walletMax = _totalSupply;

        takeTransferFee = false;

        liquidityFee = 0;
        marketingFee = 0;
        rewardsFee = 20;

        totalFee = marketingFee.add(rewardsFee);
        totalFeeIfSelling = totalFee;
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(
            amount <= _maxTxAmount || isTxLimitExempt[sender],
            "TX Limit Exceeded"
        );
    }

    function transfer(address recipient, uint256 amount)
        external
        override
        returns (bool)
    {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender]
                .sub(amount, "Insufficient Allowance");
        }
        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        if (inSwapAndLiquify) {
            return _basicTransfer(sender, recipient, amount);
        }
       if (!isFeeExempt[sender]) {
            require(tradingOpen, "Trading not open yet");
        }
        require(
            amount <= _maxTxAmount || isTxLimitExempt[sender],
            "TX Limit Exceeded"
        );

        if (
            !isPair[sender] &&
            !inSwapAndLiquify &&
            swapAndLiquifyEnabled &&
            _balances[address(this)] >= swapThreshold
        ) {
            swapBack();
        }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(
            amount,
            "Insufficient Balance"
        );

        if (!isTxLimitExempt[recipient] && restrictWhales) {
            require(_balances[recipient].add(amount) <= _walletMax);
        }

        uint256 finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient]
            ? takeFee(sender, recipient, amount)
            : amount;
        _balances[recipient] = _balances[recipient].add(finalAmount);

        // Dividend tracker
        if (!isDividendExempt[sender]) {
            try
                dividendDistributor.setShare(sender, _balances[sender])
            {} catch {}
        }

        if (!isDividendExempt[recipient]) {
            try
                dividendDistributor.setShare(recipient, _balances[recipient])
            {} catch {}
        }

        try dividendDistributor.process(distributorGas) {} catch {}

        emit Transfer(sender, recipient, finalAmount);

        return true;
    }

    function _basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(
            amount,
            "Insufficient Balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function takeFee(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (uint256) {
        uint256 feeApplicable = 0;

        if (isPair[recipient] && takeSellFee) {
            feeApplicable = totalFeeIfSelling;
        }
        if (isPair[sender] && takeBuyFee) {
            feeApplicable = totalFee;
        }
        if (!isPair[sender] && !isPair[recipient]) {
            if (takeTransferFee) {
                feeApplicable = totalFeeIfSelling;
            } else {
                feeApplicable = 0;
            }
        }

        uint256 feeAmount = amount.mul(feeApplicable).div(1000);

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function swapBack() internal lockTheSwap {
        uint256 tokensToLiquify = _balances[address(this)];
        uint256 amountToLiquify = tokensToLiquify
            .mul(liquidityFee)
            .div(totalFee)
            .div(2);
        uint256 amountToSwap = tokensToLiquify.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance;

        uint256 totalETHFee = totalFee.sub(liquidityFee.div(2));

        uint256 amountETHLiquidity = amountETH
            .mul(liquidityFee)
            .div(totalETHFee)
            .div(2);
        uint256 amountETHReflection = amountETH.mul(rewardsFee).div(
            totalETHFee
        );
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(
            totalETHFee
        );

        try
            dividendDistributor.deposit{value: amountETHReflection}()
        {} catch {}

        (bool tmpSuccess, ) = payable(marketingWallet).call{
            value: amountETHMarketing,
            gas: 30000
        }("");

        tmpSuccess = false;

        if (amountToLiquify > 0) {
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountETHLiquidity, amountToLiquify);
        }
    }


}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnonlyOwnerAccount","type":"error"},{"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":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"}],"name":"AutoLiquify","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"},{"inputs":[],"name":"FinishLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ManualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"addDapp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newinPeriod","type":"uint256"},{"internalType":"uint256","name":"newMinDistribution","type":"uint256"}],"name":"changeDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"changeDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityReceiver","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"changeFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiqFeeThou","type":"uint256"},{"internalType":"uint256","name":"newRewardFeeThou","type":"uint256"},{"internalType":"uint256","name":"newmarketingFee","type":"uint256"},{"internalType":"uint256","name":"extraSellFee","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"changePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableSwapBack","type":"bool"},{"internalType":"uint256","name":"newSwapBackLimit","type":"uint256"},{"internalType":"bool","name":"swapByLimitOnly","type":"bool"}],"name":"changeSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"changeTakeBuyfee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"changeTakeSellfee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"changeTakeTransferfee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"checkPendingDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dividendDistributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"removeERC20","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"removeEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restrictWhales","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"takeBuyFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"takeSellFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"takeTransferFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620000386012600a62000671565b62000048906334fb5e3862000682565b6004556103e8600454600a6200005f919062000682565b6200006b91906200069c565b6005556103e8600454600a62000082919062000682565b6200008e91906200069c565b6006556007805461ffff19166001179055600d80546201010162ffffff199091161790556000600e8190556096600f556010819055601181905560128190556017556018805462ffff0019166101001790556004546107d090620000f490600362000682565b6200010091906200069c565b6019553480156200011057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600280546001600160a01b0319908116331790915560038054821673f2e54d476856ca8202ce3ae6aa35ad00cbb5ed63179055600154601380549092166001600160a01b03919091169081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa158015620001e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002069190620006bf565b6001600160a01b031663c9c65396601360009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000268573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028e9190620006bf565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620002db573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003019190620006bf565b601480546001600160a01b0319166001600160a01b038381169182179092556000908152601560209081526040808320805460ff1916600117905530835260098252808320601354909416835292905281902060001990555190915033906200036a9062000550565b6001600160a01b039091168152602001604051809103906000f08015801562000397573d6000803e3d6000fd5b50601680546001600160a01b0319166001600160a01b03928316179055336000818152600a60209081526040808320805460ff199081166001908117909255308086528386208054831684179055868652600b8552838620805483168417905560148054891687528487208054841685179055898916808852858820805485168617905590549098168652600c909452828520805482168317905595845281842080548716821790559383528083208054861685179055908252812080548416831790557f45117a726ea4f344045dc210793664a28d2d320b7e03f6bffdae553d24c3586c805484168317905580527f13649b2456f1b42fef0f0040b3aaeabcd21a76a0f3f5defd4f583839455116e88054909216179055601054600f54600e54620004d19291620004ca919062000539565b9062000539565b6011819055620004e490610154620006f1565b60125560045433600081815260086020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000707565b6000620005478284620006f1565b90505b92915050565b610bfc8062002dd983390190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005b55781600019048211156200059957620005996200055e565b80851615620005a757918102915b93841c939080029062000579565b509250929050565b600082620005ce575060016200054a565b81620005dd575060006200054a565b8160018114620005f65760028114620006015762000621565b60019150506200054a565b60ff8411156200061557620006156200055e565b50506001821b6200054a565b5060208310610133831016604e8410600b841016171562000646575081810a6200054a565b62000652838362000574565b80600019048211156200066957620006696200055e565b029392505050565b60006200054760ff841683620005bd565b80820281158282048414176200054a576200054a6200055e565b600082620006ba57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620006d257600080fd5b81516001600160a01b0381168114620006ea57600080fd5b9392505050565b808201808211156200054a576200054a6200055e565b6126c280620007176000396000f3fe6080604052600436106103b15760003560e01c80637d1db4a5116101e7578063a9f7864b1161010d578063e5e31b13116100a0578063f2fde38b1161006f578063f2fde38b14610b2b578063f887ea4014610b4b578063fabe628314610b6b578063ffb54a9914610b8b57600080fd5b8063e5e31b1314610aac578063f0ef821f14610adc578063f0fc6bca14610af6578063f1d5f51714610b0b57600080fd5b8063ca33e64c116100dc578063ca33e64c14610a10578063ca987b0e14610a30578063da00097d14610a46578063dd62ed3e14610a6657600080fd5b8063a9f7864b1461099b578063bad3ea6a146109bb578063bb54c40e146109db578063c9567bf9146109fb57600080fd5b806395d89b4111610185578063a3a2e89e11610154578063a3a2e89e1461091b578063a53559891461093b578063a8aa1b311461095b578063a9059cbb1461097b57600080fd5b806395d89b41146108a457806398118cb4146108d05780639fe9f469146108e6578063a1780c181461090657600080fd5b80638b42507f116101c15780638b42507f146108215780638da5cb5b146108515780638eb664091461086f578063900d96111461088457600080fd5b80637d1db4a5146107d5578063807c2d9c146107eb5780638637b0691461080157600080fd5b80634355855a116102d7578063705409331161026a57806371bb96e71161023957806371bb96e71461073d57806375f0a8741461075d578063773fcb5c14610795578063787a051b146107b557600080fd5b806370540933146106b35780637070c898146106d257806370a08231146106f2578063715018a61461072857600080fd5b8063571ac8b0116102a6578063571ac8b01461063d5780635c85974f1461065d578063650c42261461067d5780636b67c4df1461069d57600080fd5b80634355855a146105b457806344de2e4c146105e4578063479f66d8146105fe5780634a74bb021461061e57600080fd5b806327b7ca5f1161034f57806334c708891161031e57806334c7088914610524578063399c7976146105445780633f4218e01461056457806341cb87fc1461059457600080fd5b806327b7ca5f146104bd5780632b112e49146104dd5780632bb14e1d146104f2578063313ce5671461050857600080fd5b806318160ddd1161038b57806318160ddd146104505780631df4ccfc146104655780631f2c80f11461047b57806323b872dd1461049d57600080fd5b80630445b667146103bd57806306fdde03146103e6578063095ea7b31461042057600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103d360195481565b6040519081526020015b60405180910390f35b3480156103f257600080fd5b506040805180820190915260088152672534b71021b430b760c11b60208201525b6040516103dd919061229b565b34801561042c57600080fd5b5061044061043b3660046122fe565b610baa565b60405190151581526020016103dd565b34801561045c57600080fd5b506004546103d3565b34801561047157600080fd5b506103d360115481565b34801561048757600080fd5b5061049b61049636600461232a565b610c17565b005b3480156104a957600080fd5b506104406104b8366004612363565b610c4d565b3480156104c957600080fd5b5061049b6104d83660046123a4565b610d0f565b3480156104e957600080fd5b506103d3610d3b565b3480156104fe57600080fd5b506103d360105481565b34801561051457600080fd5b50604051601281526020016103dd565b34801561053057600080fd5b5061049b61053f3660046123cf565b610dac565b34801561055057600080fd5b5061049b61055f366004612411565b610dea565b34801561057057600080fd5b5061044061057f3660046123a4565b600a6020526000908152604090205460ff1681565b3480156105a057600080fd5b5061049b6105af3660046123a4565b610e1d565b3480156105c057600080fd5b506104406105cf3660046123a4565b600c6020526000908152604090205460ff1681565b3480156105f057600080fd5b506007546104409060ff1681565b34801561060a57600080fd5b5061049b61061936600461243f565b6110d1565b34801561062a57600080fd5b5060185461044090610100900460ff1681565b34801561064957600080fd5b506104406106583660046123a4565b6110ed565b34801561066957600080fd5b5061049b61067836600461243f565b6110fb565b34801561068957600080fd5b5061049b610698366004612458565b61114e565b3480156106a957600080fd5b506103d3600f5481565b3480156106bf57600080fd5b50600d5461044090610100900460ff1681565b3480156106de57600080fd5b5061049b6106ed36600461248a565b611192565b3480156106fe57600080fd5b506103d361070d3660046123a4565b6001600160a01b031660009081526008602052604090205490565b34801561073457600080fd5b5061049b6111b6565b34801561074957600080fd5b5061049b61075836600461243f565b6111ca565b34801561076957600080fd5b5060035461077d906001600160a01b031681565b6040516001600160a01b0390911681526020016103dd565b3480156107a157600080fd5b5061049b6107b0366004612411565b611236565b3480156107c157600080fd5b5061049b6107d036600461243f565b611344565b3480156107e157600080fd5b506103d360055481565b3480156107f757600080fd5b506103d360065481565b34801561080d57600080fd5b5061044061081c3660046122fe565b611394565b34801561082d57600080fd5b5061044061083c3660046123a4565b600b6020526000908152604090205460ff1681565b34801561085d57600080fd5b506000546001600160a01b031661077d565b34801561087b57600080fd5b5061049b611467565b34801561089057600080fd5b5061049b61089f36600461248a565b6114ad565b3480156108b057600080fd5b506040805180820190915260038152622524a760e91b6020820152610413565b3480156108dc57600080fd5b506103d3600e5481565b3480156108f257600080fd5b506103d36109013660046123a4565b6114cf565b34801561091257600080fd5b5061049b61153e565b34801561092757600080fd5b5061049b610936366004612411565b61154e565b34801561094757600080fd5b50600d546104409062010000900460ff1681565b34801561096757600080fd5b5060145461077d906001600160a01b031681565b34801561098757600080fd5b506104406109963660046122fe565b611581565b3480156109a757600080fd5b5061049b6109b63660046124a7565b61158e565b3480156109c757600080fd5b5060165461077d906001600160a01b031681565b3480156109e757600080fd5b5061049b6109f636600461248a565b6115ce565b348015610a0757600080fd5b5061049b6115e9565b348015610a1c57600080fd5b5060025461077d906001600160a01b031681565b348015610a3c57600080fd5b506103d360125481565b348015610a5257600080fd5b506018546104409062010000900460ff1681565b348015610a7257600080fd5b506103d3610a8136600461232a565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b348015610ab857600080fd5b50610440610ac73660046123a4565b60156020526000908152604090205460ff1681565b348015610ae857600080fd5b50600d546104409060ff1681565b348015610b0257600080fd5b5061049b611602565b348015610b1757600080fd5b5061049b610b2636600461243f565b611661565b348015610b3757600080fd5b5061049b610b463660046123a4565b6116ab565b348015610b5757600080fd5b5060135461077d906001600160a01b031681565b348015610b7757600080fd5b5061049b610b86366004612411565b6116e6565b348015610b9757600080fd5b5060075461044090610100900460ff1681565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c059086815260200190565b60405180910390a35060015b92915050565b610c1f611719565b600280546001600160a01b039384166001600160a01b03199182161790915560038054929093169116179055565b6001600160a01b038316600090815260096020908152604080832033845290915281205460001914610cfa576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600982528381203382529091529190912054610cd5918490611746565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b610d05848484611772565b90505b9392505050565b610d17611719565b610d22816001611236565b610d2d8160016116e6565b610d3881600161154e565b50565b60086020527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c75461dead60009081527f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd09334299546004549192610da7929091610da19190611c06565b90611c06565b905090565b610db4611719565b60188054601993909355901515620100000262ff000019931515610100029390931662ffff001990921691909117919091179055565b610df2611719565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b610e25611719565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8e91906124c9565b90506000816001600160a01b031663e6a4390530856001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ee0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0491906124c9565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7391906124c9565b90506001600160a01b03811661106957816001600160a01b031663c9c6539630856001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff591906124c9565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611042573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106691906124c9565b90505b6001600160a01b0390811660009081526015602090815260408083208054600160ff199182168117909255600c84528285208054821683179055600b909352922080549091169091179055601380546001600160a01b03191693909116929092179091555050565b6110d9611719565b620b71b081106110e857600080fd5b601755565b6000610c1182600019610baa565b611103611719565b600581101561112d5760405162461bcd60e51b8152600401611124906124e6565b60405180910390fd5b6103e88160045461113e9190612542565b6111489190612559565b60055550565b611156611719565b600e8490556010839055600f829055611179836111738685611c12565b90611c12565b601181905561118990829061257b565b60125550505050565b61119a611719565b600d8054911515620100000262ff000019909216919091179055565b6111be611719565b6111c86000611c1e565b565b6111d2611719565b6016546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c47990602401600060405180830381600087803b15801561121b57600080fd5b505af115801561122f573d6000803e3d6000fd5b5050505050565b61123e611719565b6001600160a01b03821660009081526015602052604090205460ff1615611263575060015b6001600160a01b0382166000908152600c60205260409020805460ff191682158015919091179091556112fb57601654604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca96906044015b600060405180830381600087803b1580156112df57600080fd5b505af11580156112f3573d6000803e3d6000fd5b505050505050565b6016546001600160a01b0383811660008181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca96906044016112c5565b61134c611719565b47336108fc606461135d8585612542565b6113679190612559565b6040518115909202916000818181858888f1935050505015801561138f573d6000803e3d6000fd5b505050565b600061139e611719565b306001600160a01b038416036113f65760405162461bcd60e51b815260206004820152601c60248201527f43616e742072656d6f766520746865206e617469766520746f6b656e000000006044820152606401611124565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015611443573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d08919061258e565b61146f611719565b6004546005819055600655600d805462ff0000191690556000600e819055600f819055601460108190556114a39190611c12565b6011819055601255565b6114b5611719565b600d80549115156101000261ff0019909216919091179055565b60165460405163051fa63360e31b81526001600160a01b03838116600483015260009216906328fd319890602401602060405180830381865afa15801561151a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1191906125ab565b611546611719565b6111c8611c6e565b611556611719565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000610d08338484611772565b611596611719565b6016546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044016112c5565b6115d6611719565b600d805460ff1916911515919091179055565b6115f1611719565b6007805461ff001916610100179055565b601654604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b15801561164757600080fd5b505af115801561165b573d6000803e3d6000fd5b50505050565b611669611719565b600581101561168a5760405162461bcd60e51b8152600401611124906124e6565b6103e88160045461169b9190612542565b6116a59190612559565b60065550565b6116b3611719565b6001600160a01b0381166116dd57604051631e4fbdf760e01b815260006004820152602401611124565b610d3881611c1e565b6116ee611719565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146111c857604051634426e76960e11b8152336004820152602401611124565b6000818484111561176a5760405162461bcd60e51b8152600401611124919061229b565b505050900390565b60185460009060ff16156117925761178b84848461202d565b9050610d08565b6001600160a01b0384166000908152600a602052604090205460ff1661180057600754610100900460ff166118005760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401611124565b6005548211158061182957506001600160a01b0384166000908152600b602052604090205460ff165b6118695760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401611124565b6001600160a01b03841660009081526015602052604090205460ff16158015611895575060185460ff16155b80156118a85750601854610100900460ff165b80156118c557506019543060009081526008602052604090205410155b156118d2576118d2611c6e565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260089091529190912054611924918490611746565b6001600160a01b038086166000908152600860209081526040808320949094559186168152600b909152205460ff16158015611962575060075460ff165b15611998576006546001600160a01b03841660009081526008602052604090205461198d9084611c12565b111561199857600080fd5b6001600160a01b0384166000908152600a602052604081205460ff161580156119da57506001600160a01b0384166000908152600a602052604090205460ff16155b6119e457826119ef565b6119ef858585612113565b6001600160a01b038516600090815260086020526040902054909150611a159082611c12565b6001600160a01b038086166000908152600860209081526040808320949094559188168152600c909152205460ff16611ab9576016546001600160a01b0386811660008181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611aa657600080fd5b505af1925050508015611ab7575060015b505b6001600160a01b0384166000908152600c602052604090205460ff16611b4a576016546001600160a01b0385811660008181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611b3757600080fd5b505af1925050508015611b48575060015b505b6016546017546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611b829160040190815260200190565b600060405180830381600087803b158015611b9c57600080fd5b505af1925050508015611bad575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611bf391815260200190565b60405180910390a3506001949350505050565b6000610d0882846125c4565b6000610d08828461257b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6018805460ff1916600117905530600090815260086020526040812054601154600e54919291611caf91600291611ca9919082908790612283565b9061228f565b90506000611cbd8383611c06565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611cf757611cf76125d7565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7491906124c9565b81600181518110611d8757611d876125d7565b6001600160a01b03928316602091820292909201015260135460405163791ac94760e01b815291169063791ac94790611dcd9085906000908690309042906004016125ed565b600060405180830381600087803b158015611de757600080fd5b505af1158015611dfb573d6000803e3d6000fd5b5050600e5447925060009150611e1f90611e1690600261228f565b60115490611c06565b90506000611e416002611ca984611ca9600e548861228390919063ffffffff16565b90506000611e5e83611ca96010548761228390919063ffffffff16565b90506000611e7b84611ca9600f548861228390919063ffffffff16565b9050601660009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015611ecd57600080fd5b505af193505050508015611edf575060015b506003546040516000916001600160a01b03169061753090849084818181858888f193505050503d8060008114611f32576040519150601f19603f3d011682016040523d82523d6000602084013e611f37565b606091505b506000925050891590506120175760135460025460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990869060c40160606040518083038185885af1158015611fb5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611fda919061265e565b505060408051868152602081018c90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506018805460ff191690555050505050505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260089091529182205461207e918490611746565b6001600160a01b0380861660009081526008602052604080822093909355908516815220546120ad9083611c12565b6001600160a01b0380851660008181526008602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906121019086815260200190565b60405180910390a35060019392505050565b6001600160a01b038216600090815260156020526040812054819060ff1680156121445750600d54610100900460ff165b1561214e57506012545b6001600160a01b03851660009081526015602052604090205460ff1680156121785750600d5460ff165b1561218257506011545b6001600160a01b03851660009081526015602052604090205460ff161580156121c457506001600160a01b03841660009081526015602052604090205460ff16155b156121e757600d5462010000900460ff16156121e357506012546121e7565b5060005b60006121f96103e8611ca98685612283565b306000908152600860205260409020549091506122169082611c12565b30600081815260086020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122679085815260200190565b60405180910390a36122798482611c06565b9695505050505050565b6000610d088284612542565b6000610d088284612559565b600060208083528351808285015260005b818110156122c8578581018301518582016040015282016122ac565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d3857600080fd5b6000806040838503121561231157600080fd5b823561231c816122e9565b946020939093013593505050565b6000806040838503121561233d57600080fd5b8235612348816122e9565b91506020830135612358816122e9565b809150509250929050565b60008060006060848603121561237857600080fd5b8335612383816122e9565b92506020840135612393816122e9565b929592945050506040919091013590565b6000602082840312156123b657600080fd5b8135610d08816122e9565b8015158114610d3857600080fd5b6000806000606084860312156123e457600080fd5b83356123ef816123c1565b9250602084013591506040840135612406816123c1565b809150509250925092565b6000806040838503121561242457600080fd5b823561242f816122e9565b91506020830135612358816123c1565b60006020828403121561245157600080fd5b5035919050565b6000806000806080858703121561246e57600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561249c57600080fd5b8135610d08816123c1565b600080604083850312156124ba57600080fd5b50508035926020909101359150565b6000602082840312156124db57600080fd5b8151610d08816122e9565b60208082526026908201527f57616c6c6574204c696d6974206e6565647320746f206265206174206c6561736040820152657420302e352560d01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c1157610c1161252c565b60008261257657634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c1157610c1161252c565b6000602082840312156125a057600080fd5b8151610d08816123c1565b6000602082840312156125bd57600080fd5b5051919050565b81810381811115610c1157610c1161252c565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561263d5784516001600160a01b031683529383019391830191600101612618565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561267357600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220a183d6eeb4c2f8caf91179713a11f877b27adce1bf59216cb5ad55b207be87b564736f6c6343000813003360806040526ec097ce7bc90715b34b9f1000000000600a55610e10600b55678ac7230489e80000600c5534801561003557600080fd5b50604051610bfc380380610bfc83398101604081905261005491610087565b60008054336001600160a01b031991821617909155600180549091166001600160a01b03929092169190911790556100b7565b60006020828403121561009957600080fd5b81516001600160a01b03811681146100b057600080fd5b9392505050565b610b36806100c66000396000f3fe6080604052600436106100f35760003560e01c8063a6f9dae11161008a578063e2d2e21911610059578063e2d2e21914610284578063efca2eed1461029a578063ffb2c479146102b0578063ffd49c84146102d057600080fd5b8063a6f9dae1146101e5578063c9d6567e14610205578063ce7c2ac214610225578063d0e30db01461027c57600080fd5b80632d48e896116100c65780632d48e896146101835780633a98ef39146101a35780634fab0ae8146101b9578063997664d7146101cf57600080fd5b806311ce023d146100f857806314b6ca961461012157806315f7e05e1461014357806328fd319814610163575b600080fd5b34801561010457600080fd5b5061010e600a5481565b6040519081526020015b60405180910390f35b34801561012d57600080fd5b5061014161013c3660046109c6565b6102e6565b005b34801561014f57600080fd5b5061014161015e3660046109f0565b61045e565b34801561016f57600080fd5b5061010e61017e3660046109f0565b610481565b34801561018f57600080fd5b5061014161019e366004610a0b565b61050c565b3480156101af57600080fd5b5061010e60065481565b3480156101c557600080fd5b5061010e600c5481565b3480156101db57600080fd5b5061010e60075481565b3480156101f157600080fd5b506101416102003660046109f0565b61052e565b34801561021157600080fd5b50610141610220366004610a2d565b610567565b34801561023157600080fd5b506102616102403660046109f0565b60056020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610118565b6101416105c6565b34801561029057600080fd5b5061010e60095481565b3480156102a657600080fd5b5061010e60085481565b3480156102bc57600080fd5b506101416102cb366004610a2d565b610619565b3480156102dc57600080fd5b5061010e600b5481565b6000546001600160a01b031633146102fd57600080fd5b6001600160a01b03821660009081526005602052604090205415610324576103248261071d565b60008111801561034a57506001600160a01b038216600090815260056020526040902054155b156103b057600280546001600160a01b0384166000818152600360205260408120839055600183018455929092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b03191690911790556103e3565b801580156103d557506001600160a01b03821660009081526005602052604090205415155b156103e3576103e3826107fa565b6001600160a01b03821660009081526005602052604090205460065461041491839161040e9161090f565b90610924565b6006556001600160a01b038216600090815260056020526040902081905561043b81610930565b6001600160a01b0390921660009081526005602052604090206001019190915550565b6000546001600160a01b0316331461047557600080fd5b61047e8161071d565b50565b6001600160a01b03811660009081526005602052604081205481036104a857506000919050565b6001600160a01b0382166000908152600560205260408120546104ca90610930565b6001600160a01b0384166000908152600560205260409020600101549091508082116104fa575060009392505050565b610504828261090f565b949350505050565b6000546001600160a01b0316331461052357600080fd5b600b91909155600c55565b6000546001600160a01b0316331461054557600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461057e57600080fd5b47336108fc606461058f8585610a5c565b6105999190610a73565b6040518115909202916000818181858888f193505050501580156105c1573d6000803e3d6000fd5b505050565b6000546001600160a01b031633146105dd57600080fd5b6007546105ea9034610924565b600755600654600a546106149161060b91610605903461094d565b90610959565b60095490610924565b600955565b6000546001600160a01b0316331461063057600080fd5b6002546000819003610640575050565b60008060005a90505b848210801561065757508383105b156107165783600d541061066b576000600d555b61069d6002600d548154811061068357610683610a95565b6000918252602090912001546001600160a01b0316610965565b156106d4576106d46002600d54815481106106ba576106ba610a95565b6000918252602090912001546001600160a01b031661071d565b6106e96106e25a839061090f565b8390610924565b91505a600d805491925060006106fe83610aab565b9190505550828061070e90610aab565b935050610649565b5050505050565b6001600160a01b038116600090815260056020526040812054900361073f5750565b600061074a82610481565b905080156107f65760085461075f9082610924565b6008556040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610798573d6000803e3d6000fd5b506001600160a01b038216600090815260046020908152604080832042905560059091529020600201546107cc9082610924565b6001600160a01b038316600090815260056020526040902060028101919091555461043b90610930565b5050565b6002805461080a90600190610ac4565b8154811061081a5761081a610a95565b60009182526020808320909101546001600160a01b038481168452600390925260409092205460028054929093169291811061085857610858610a95565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600391829052604081205460028054919392916108a490600190610ac4565b815481106108b4576108b4610a95565b60009182526020808320909101546001600160a01b0316835282019290925260400190205560028054806108ea576108ea610ad7565b600082815260209020810160001990810180546001600160a01b031916905501905550565b600061091b8284610ac4565b90505b92915050565b600061091b8284610aed565b600061091e600a546106056009548561094d90919063ffffffff16565b600061091b8284610a5c565b600061091b8284610a73565b600b546001600160a01b0382166000908152600460205260408120549091429161098f9190610aed565b10801561091e5750600c546109a383610481565b1192915050565b80356001600160a01b03811681146109c157600080fd5b919050565b600080604083850312156109d957600080fd5b6109e2836109aa565b946020939093013593505050565b600060208284031215610a0257600080fd5b61091b826109aa565b60008060408385031215610a1e57600080fd5b50508035926020909101359150565b600060208284031215610a3f57600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761091e5761091e610a46565b600082610a9057634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201610abd57610abd610a46565b5060010190565b8181038181111561091e5761091e610a46565b634e487b7160e01b600052603160045260246000fd5b8082018082111561091e5761091e610a4656fea26469706673582212208d3e79f6f7c8f4d55aff293e77ec9ee6c9e0c19ab836e4eba98a44b8ba38981864736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103b15760003560e01c80637d1db4a5116101e7578063a9f7864b1161010d578063e5e31b13116100a0578063f2fde38b1161006f578063f2fde38b14610b2b578063f887ea4014610b4b578063fabe628314610b6b578063ffb54a9914610b8b57600080fd5b8063e5e31b1314610aac578063f0ef821f14610adc578063f0fc6bca14610af6578063f1d5f51714610b0b57600080fd5b8063ca33e64c116100dc578063ca33e64c14610a10578063ca987b0e14610a30578063da00097d14610a46578063dd62ed3e14610a6657600080fd5b8063a9f7864b1461099b578063bad3ea6a146109bb578063bb54c40e146109db578063c9567bf9146109fb57600080fd5b806395d89b4111610185578063a3a2e89e11610154578063a3a2e89e1461091b578063a53559891461093b578063a8aa1b311461095b578063a9059cbb1461097b57600080fd5b806395d89b41146108a457806398118cb4146108d05780639fe9f469146108e6578063a1780c181461090657600080fd5b80638b42507f116101c15780638b42507f146108215780638da5cb5b146108515780638eb664091461086f578063900d96111461088457600080fd5b80637d1db4a5146107d5578063807c2d9c146107eb5780638637b0691461080157600080fd5b80634355855a116102d7578063705409331161026a57806371bb96e71161023957806371bb96e71461073d57806375f0a8741461075d578063773fcb5c14610795578063787a051b146107b557600080fd5b806370540933146106b35780637070c898146106d257806370a08231146106f2578063715018a61461072857600080fd5b8063571ac8b0116102a6578063571ac8b01461063d5780635c85974f1461065d578063650c42261461067d5780636b67c4df1461069d57600080fd5b80634355855a146105b457806344de2e4c146105e4578063479f66d8146105fe5780634a74bb021461061e57600080fd5b806327b7ca5f1161034f57806334c708891161031e57806334c7088914610524578063399c7976146105445780633f4218e01461056457806341cb87fc1461059457600080fd5b806327b7ca5f146104bd5780632b112e49146104dd5780632bb14e1d146104f2578063313ce5671461050857600080fd5b806318160ddd1161038b57806318160ddd146104505780631df4ccfc146104655780631f2c80f11461047b57806323b872dd1461049d57600080fd5b80630445b667146103bd57806306fdde03146103e6578063095ea7b31461042057600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103d360195481565b6040519081526020015b60405180910390f35b3480156103f257600080fd5b506040805180820190915260088152672534b71021b430b760c11b60208201525b6040516103dd919061229b565b34801561042c57600080fd5b5061044061043b3660046122fe565b610baa565b60405190151581526020016103dd565b34801561045c57600080fd5b506004546103d3565b34801561047157600080fd5b506103d360115481565b34801561048757600080fd5b5061049b61049636600461232a565b610c17565b005b3480156104a957600080fd5b506104406104b8366004612363565b610c4d565b3480156104c957600080fd5b5061049b6104d83660046123a4565b610d0f565b3480156104e957600080fd5b506103d3610d3b565b3480156104fe57600080fd5b506103d360105481565b34801561051457600080fd5b50604051601281526020016103dd565b34801561053057600080fd5b5061049b61053f3660046123cf565b610dac565b34801561055057600080fd5b5061049b61055f366004612411565b610dea565b34801561057057600080fd5b5061044061057f3660046123a4565b600a6020526000908152604090205460ff1681565b3480156105a057600080fd5b5061049b6105af3660046123a4565b610e1d565b3480156105c057600080fd5b506104406105cf3660046123a4565b600c6020526000908152604090205460ff1681565b3480156105f057600080fd5b506007546104409060ff1681565b34801561060a57600080fd5b5061049b61061936600461243f565b6110d1565b34801561062a57600080fd5b5060185461044090610100900460ff1681565b34801561064957600080fd5b506104406106583660046123a4565b6110ed565b34801561066957600080fd5b5061049b61067836600461243f565b6110fb565b34801561068957600080fd5b5061049b610698366004612458565b61114e565b3480156106a957600080fd5b506103d3600f5481565b3480156106bf57600080fd5b50600d5461044090610100900460ff1681565b3480156106de57600080fd5b5061049b6106ed36600461248a565b611192565b3480156106fe57600080fd5b506103d361070d3660046123a4565b6001600160a01b031660009081526008602052604090205490565b34801561073457600080fd5b5061049b6111b6565b34801561074957600080fd5b5061049b61075836600461243f565b6111ca565b34801561076957600080fd5b5060035461077d906001600160a01b031681565b6040516001600160a01b0390911681526020016103dd565b3480156107a157600080fd5b5061049b6107b0366004612411565b611236565b3480156107c157600080fd5b5061049b6107d036600461243f565b611344565b3480156107e157600080fd5b506103d360055481565b3480156107f757600080fd5b506103d360065481565b34801561080d57600080fd5b5061044061081c3660046122fe565b611394565b34801561082d57600080fd5b5061044061083c3660046123a4565b600b6020526000908152604090205460ff1681565b34801561085d57600080fd5b506000546001600160a01b031661077d565b34801561087b57600080fd5b5061049b611467565b34801561089057600080fd5b5061049b61089f36600461248a565b6114ad565b3480156108b057600080fd5b506040805180820190915260038152622524a760e91b6020820152610413565b3480156108dc57600080fd5b506103d3600e5481565b3480156108f257600080fd5b506103d36109013660046123a4565b6114cf565b34801561091257600080fd5b5061049b61153e565b34801561092757600080fd5b5061049b610936366004612411565b61154e565b34801561094757600080fd5b50600d546104409062010000900460ff1681565b34801561096757600080fd5b5060145461077d906001600160a01b031681565b34801561098757600080fd5b506104406109963660046122fe565b611581565b3480156109a757600080fd5b5061049b6109b63660046124a7565b61158e565b3480156109c757600080fd5b5060165461077d906001600160a01b031681565b3480156109e757600080fd5b5061049b6109f636600461248a565b6115ce565b348015610a0757600080fd5b5061049b6115e9565b348015610a1c57600080fd5b5060025461077d906001600160a01b031681565b348015610a3c57600080fd5b506103d360125481565b348015610a5257600080fd5b506018546104409062010000900460ff1681565b348015610a7257600080fd5b506103d3610a8136600461232a565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b348015610ab857600080fd5b50610440610ac73660046123a4565b60156020526000908152604090205460ff1681565b348015610ae857600080fd5b50600d546104409060ff1681565b348015610b0257600080fd5b5061049b611602565b348015610b1757600080fd5b5061049b610b2636600461243f565b611661565b348015610b3757600080fd5b5061049b610b463660046123a4565b6116ab565b348015610b5757600080fd5b5060135461077d906001600160a01b031681565b348015610b7757600080fd5b5061049b610b86366004612411565b6116e6565b348015610b9757600080fd5b5060075461044090610100900460ff1681565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c059086815260200190565b60405180910390a35060015b92915050565b610c1f611719565b600280546001600160a01b039384166001600160a01b03199182161790915560038054929093169116179055565b6001600160a01b038316600090815260096020908152604080832033845290915281205460001914610cfa576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600982528381203382529091529190912054610cd5918490611746565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b610d05848484611772565b90505b9392505050565b610d17611719565b610d22816001611236565b610d2d8160016116e6565b610d3881600161154e565b50565b60086020527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c75461dead60009081527f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd09334299546004549192610da7929091610da19190611c06565b90611c06565b905090565b610db4611719565b60188054601993909355901515620100000262ff000019931515610100029390931662ffff001990921691909117919091179055565b610df2611719565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b610e25611719565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8e91906124c9565b90506000816001600160a01b031663e6a4390530856001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ee0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0491906124c9565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7391906124c9565b90506001600160a01b03811661106957816001600160a01b031663c9c6539630856001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff591906124c9565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611042573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106691906124c9565b90505b6001600160a01b0390811660009081526015602090815260408083208054600160ff199182168117909255600c84528285208054821683179055600b909352922080549091169091179055601380546001600160a01b03191693909116929092179091555050565b6110d9611719565b620b71b081106110e857600080fd5b601755565b6000610c1182600019610baa565b611103611719565b600581101561112d5760405162461bcd60e51b8152600401611124906124e6565b60405180910390fd5b6103e88160045461113e9190612542565b6111489190612559565b60055550565b611156611719565b600e8490556010839055600f829055611179836111738685611c12565b90611c12565b601181905561118990829061257b565b60125550505050565b61119a611719565b600d8054911515620100000262ff000019909216919091179055565b6111be611719565b6111c86000611c1e565b565b6111d2611719565b6016546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c47990602401600060405180830381600087803b15801561121b57600080fd5b505af115801561122f573d6000803e3d6000fd5b5050505050565b61123e611719565b6001600160a01b03821660009081526015602052604090205460ff1615611263575060015b6001600160a01b0382166000908152600c60205260409020805460ff191682158015919091179091556112fb57601654604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca96906044015b600060405180830381600087803b1580156112df57600080fd5b505af11580156112f3573d6000803e3d6000fd5b505050505050565b6016546001600160a01b0383811660008181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca96906044016112c5565b61134c611719565b47336108fc606461135d8585612542565b6113679190612559565b6040518115909202916000818181858888f1935050505015801561138f573d6000803e3d6000fd5b505050565b600061139e611719565b306001600160a01b038416036113f65760405162461bcd60e51b815260206004820152601c60248201527f43616e742072656d6f766520746865206e617469766520746f6b656e000000006044820152606401611124565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015611443573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d08919061258e565b61146f611719565b6004546005819055600655600d805462ff0000191690556000600e819055600f819055601460108190556114a39190611c12565b6011819055601255565b6114b5611719565b600d80549115156101000261ff0019909216919091179055565b60165460405163051fa63360e31b81526001600160a01b03838116600483015260009216906328fd319890602401602060405180830381865afa15801561151a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1191906125ab565b611546611719565b6111c8611c6e565b611556611719565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000610d08338484611772565b611596611719565b6016546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044016112c5565b6115d6611719565b600d805460ff1916911515919091179055565b6115f1611719565b6007805461ff001916610100179055565b601654604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b15801561164757600080fd5b505af115801561165b573d6000803e3d6000fd5b50505050565b611669611719565b600581101561168a5760405162461bcd60e51b8152600401611124906124e6565b6103e88160045461169b9190612542565b6116a59190612559565b60065550565b6116b3611719565b6001600160a01b0381166116dd57604051631e4fbdf760e01b815260006004820152602401611124565b610d3881611c1e565b6116ee611719565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146111c857604051634426e76960e11b8152336004820152602401611124565b6000818484111561176a5760405162461bcd60e51b8152600401611124919061229b565b505050900390565b60185460009060ff16156117925761178b84848461202d565b9050610d08565b6001600160a01b0384166000908152600a602052604090205460ff1661180057600754610100900460ff166118005760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401611124565b6005548211158061182957506001600160a01b0384166000908152600b602052604090205460ff165b6118695760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401611124565b6001600160a01b03841660009081526015602052604090205460ff16158015611895575060185460ff16155b80156118a85750601854610100900460ff165b80156118c557506019543060009081526008602052604090205410155b156118d2576118d2611c6e565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260089091529190912054611924918490611746565b6001600160a01b038086166000908152600860209081526040808320949094559186168152600b909152205460ff16158015611962575060075460ff165b15611998576006546001600160a01b03841660009081526008602052604090205461198d9084611c12565b111561199857600080fd5b6001600160a01b0384166000908152600a602052604081205460ff161580156119da57506001600160a01b0384166000908152600a602052604090205460ff16155b6119e457826119ef565b6119ef858585612113565b6001600160a01b038516600090815260086020526040902054909150611a159082611c12565b6001600160a01b038086166000908152600860209081526040808320949094559188168152600c909152205460ff16611ab9576016546001600160a01b0386811660008181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611aa657600080fd5b505af1925050508015611ab7575060015b505b6001600160a01b0384166000908152600c602052604090205460ff16611b4a576016546001600160a01b0385811660008181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611b3757600080fd5b505af1925050508015611b48575060015b505b6016546017546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611b829160040190815260200190565b600060405180830381600087803b158015611b9c57600080fd5b505af1925050508015611bad575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611bf391815260200190565b60405180910390a3506001949350505050565b6000610d0882846125c4565b6000610d08828461257b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6018805460ff1916600117905530600090815260086020526040812054601154600e54919291611caf91600291611ca9919082908790612283565b9061228f565b90506000611cbd8383611c06565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611cf757611cf76125d7565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7491906124c9565b81600181518110611d8757611d876125d7565b6001600160a01b03928316602091820292909201015260135460405163791ac94760e01b815291169063791ac94790611dcd9085906000908690309042906004016125ed565b600060405180830381600087803b158015611de757600080fd5b505af1158015611dfb573d6000803e3d6000fd5b5050600e5447925060009150611e1f90611e1690600261228f565b60115490611c06565b90506000611e416002611ca984611ca9600e548861228390919063ffffffff16565b90506000611e5e83611ca96010548761228390919063ffffffff16565b90506000611e7b84611ca9600f548861228390919063ffffffff16565b9050601660009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015611ecd57600080fd5b505af193505050508015611edf575060015b506003546040516000916001600160a01b03169061753090849084818181858888f193505050503d8060008114611f32576040519150601f19603f3d011682016040523d82523d6000602084013e611f37565b606091505b506000925050891590506120175760135460025460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990869060c40160606040518083038185885af1158015611fb5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611fda919061265e565b505060408051868152602081018c90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506018805460ff191690555050505050505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260089091529182205461207e918490611746565b6001600160a01b0380861660009081526008602052604080822093909355908516815220546120ad9083611c12565b6001600160a01b0380851660008181526008602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906121019086815260200190565b60405180910390a35060019392505050565b6001600160a01b038216600090815260156020526040812054819060ff1680156121445750600d54610100900460ff165b1561214e57506012545b6001600160a01b03851660009081526015602052604090205460ff1680156121785750600d5460ff165b1561218257506011545b6001600160a01b03851660009081526015602052604090205460ff161580156121c457506001600160a01b03841660009081526015602052604090205460ff16155b156121e757600d5462010000900460ff16156121e357506012546121e7565b5060005b60006121f96103e8611ca98685612283565b306000908152600860205260409020549091506122169082611c12565b30600081815260086020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122679085815260200190565b60405180910390a36122798482611c06565b9695505050505050565b6000610d088284612542565b6000610d088284612559565b600060208083528351808285015260005b818110156122c8578581018301518582016040015282016122ac565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d3857600080fd5b6000806040838503121561231157600080fd5b823561231c816122e9565b946020939093013593505050565b6000806040838503121561233d57600080fd5b8235612348816122e9565b91506020830135612358816122e9565b809150509250929050565b60008060006060848603121561237857600080fd5b8335612383816122e9565b92506020840135612393816122e9565b929592945050506040919091013590565b6000602082840312156123b657600080fd5b8135610d08816122e9565b8015158114610d3857600080fd5b6000806000606084860312156123e457600080fd5b83356123ef816123c1565b9250602084013591506040840135612406816123c1565b809150509250925092565b6000806040838503121561242457600080fd5b823561242f816122e9565b91506020830135612358816123c1565b60006020828403121561245157600080fd5b5035919050565b6000806000806080858703121561246e57600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561249c57600080fd5b8135610d08816123c1565b600080604083850312156124ba57600080fd5b50508035926020909101359150565b6000602082840312156124db57600080fd5b8151610d08816122e9565b60208082526026908201527f57616c6c6574204c696d6974206e6565647320746f206265206174206c6561736040820152657420302e352560d01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c1157610c1161252c565b60008261257657634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c1157610c1161252c565b6000602082840312156125a057600080fd5b8151610d08816123c1565b6000602082840312156125bd57600080fd5b5051919050565b81810381811115610c1157610c1161252c565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561263d5784516001600160a01b031683529383019391830191600101612618565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561267357600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220a183d6eeb4c2f8caf91179713a11f877b27adce1bf59216cb5ad55b207be87b564736f6c63430008130033

Deployed Bytecode Sourcemap

15303:15389:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16819:56;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;16819:56:0;;;;;;;;18365:94;;;;;;;;;;-1:-1:-1;18446:5:0;;;;;;;;;;;;-1:-1:-1;;;18446:5:0;;;;18365:94;;;;;;;:::i;19320:248::-;;;;;;;;;;-1:-1:-1;19320:248:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;19320:248:0;1205:187:1;18675:102:0;;;;;;;;;;-1:-1:-1;18757:12:0;;18675:102;;16419:27;;;;;;;;;;;;;;;;23879:240;;;;;;;;;;-1:-1:-1;23879:240:0;;;;;:::i;:::-;;:::i;:::-;;25460:422;;;;;;;;;;-1:-1:-1;25460:422:0;;;;;:::i;:::-;;:::i;23678:193::-;;;;;;;;;;-1:-1:-1;23678:193:0;;;;;:::i;:::-;;:::i;18785:204::-;;;;;;;;;;;;;:::i;16381:29::-;;;;;;;;;;;;;;;;18573:94;;;;;;;;;;-1:-1:-1;18573:94:0;;15483:2;2645:36:1;;2633:2;2618:18;18573:94:0;2503:184:1;21233:308:0;;;;;;;;;;-1:-1:-1;21233:308:0;;;;;:::i;:::-;;:::i;22860:112::-;;;;;;;;;;-1:-1:-1;22860:112:0;;;;;:::i;:::-;;:::i;16026:43::-;;;;;;;;;;-1:-1:-1;16026:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22081:771;;;;;;;;;;-1:-1:-1;22081:771:0;;;;;:::i;:::-;;:::i;16130:48::-;;;;;;;;;;-1:-1:-1;16130:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15832:33;;;;;;;;;;-1:-1:-1;15832:33:0;;;;;;;;21818:138;;;;;;;;;;-1:-1:-1;21818:138:0;;;;;:::i;:::-;;:::i;16718:40::-;;;;;;;;;;-1:-1:-1;16718:40:0;;;;;;;;;;;19576:122;;;;;;;;;;-1:-1:-1;19576:122:0;;;;;:::i;:::-;;:::i;20589:198::-;;;;;;;;;;-1:-1:-1;20589:198:0;;;;;:::i;:::-;;:::i;20795:430::-;;;;;;;;;;-1:-1:-1;20795:430:0;;;;;:::i;:::-;;:::i;16341:33::-;;;;;;;;;;;;;;;;16223:30;;;;;;;;;;-1:-1:-1;16223:30:0;;;;;;;;;;;20269:104;;;;;;;;;;-1:-1:-1;20269:104:0;;;;;:::i;:::-;;:::i;18997:119::-;;;;;;;;;;-1:-1:-1;18997:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;19090:18:0;19063:7;19090:18;;;:9;:18;;;;;;;18997:119;14467:103;;;;;;;;;;;;;:::i;21964:109::-;;;;;;;;;;-1:-1:-1;21964:109:0;;;;;:::i;:::-;;:::i;15612:30::-;;;;;;;;;;-1:-1:-1;15612:30:0;;;;-1:-1:-1;;;;;15612:30:0;;;;;;-1:-1:-1;;;;;4636:32:1;;;4618:51;;4606:2;4591:18;15612:30:0;4472:203:1;23267:403:0;;;;;;;;;;-1:-1:-1;23267:403:0;;;;;:::i;:::-;;:::i;24422:203::-;;;;;;;;;;-1:-1:-1;24422:203:0;;;;;:::i;:::-;;:::i;15708:56::-;;;;;;;;;;;;;;;;15771:54;;;;;;;;;;;;;;;;24127:287;;;;;;;;;;-1:-1:-1;24127:287:0;;;;;:::i;:::-;;:::i;16076:47::-;;;;;;;;;;-1:-1:-1;16076:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13793:87;;;;;;;;;;-1:-1:-1;13839:7:0;13866:6;-1:-1:-1;;;;;13866:6:0;13793:87;;24711:334;;;;;;;;;;;;;:::i;20165:96::-;;;;;;;;;;-1:-1:-1;20165:96:0;;;;;:::i;:::-;;:::i;18467:98::-;;;;;;;;;;-1:-1:-1;18550:7:0;;;;;;;;;;;;-1:-1:-1;;;18550:7:0;;;;18467:98;;16303:31;;;;;;;;;;;;;;;;19706:152;;;;;;;;;;-1:-1:-1;19706:152:0;;;;;:::i;:::-;;:::i;24633:70::-;;;;;;;;;;;;;:::i;22980:120::-;;;;;;;;;;-1:-1:-1;22980:120:0;;;;;:::i;:::-;;:::i;16260:34::-;;;;;;;;;;-1:-1:-1;16260:34:0;;;;;;;;;;;16529:19;;;;;;;;;;-1:-1:-1;16529:19:0;;;;-1:-1:-1;;;;;16529:19:0;;;25264:188;;;;;;;;;;-1:-1:-1;25264:188:0;;;;;:::i;:::-;;:::i;21549:261::-;;;;;;;;;;-1:-1:-1;21549:261:0;;;;;:::i;:::-;;:::i;16602:46::-;;;;;;;;;;-1:-1:-1;16602:46:0;;;;-1:-1:-1;;;;;16602:46:0;;;20063:94;;;;;;;;;;-1:-1:-1;20063:94:0;;;;;:::i;:::-;;:::i;19976:79::-;;;;;;;;;;;;;:::i;15569:36::-;;;;;;;;;;-1:-1:-1;15569:36:0;;;;-1:-1:-1;;;;;15569:36:0;;;16453;;;;;;;;;;;;;;;;16765:45;;;;;;;;;;-1:-1:-1;16765:45:0;;;;;;;;;;;19124:188;;;;;;;;;;-1:-1:-1;19124:188:0;;;;;:::i;:::-;-1:-1:-1;;;;;19276:19:0;;;19244:7;19276:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;19124:188;16555:38;;;;;;;;;;-1:-1:-1;16555:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16187:29;;;;;;;;;;-1:-1:-1;16187:29:0;;;;;;;;19866:98;;;;;;;;;;;;;:::i;20381:200::-;;;;;;;;;;-1:-1:-1;20381:200:0;;;;;:::i;:::-;;:::i;14725:220::-;;;;;;;;;;-1:-1:-1;14725:220:0;;;;;:::i;:::-;;:::i;16498:24::-;;;;;;;;;;-1:-1:-1;16498:24:0;;;;-1:-1:-1;;;;;16498:24:0;;;23108:151;;;;;;;;;;-1:-1:-1;23108:151:0;;;;;:::i;:::-;;:::i;15874:31::-;;;;;;;;;;-1:-1:-1;15874:31:0;;;;;;;;;;;19320:248;19456:10;19422:4;19444:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;19444:32:0;;;;;;;;;;:41;;;19501:37;19422:4;;19444:32;;19501:37;;;;19479:6;160:25:1;;148:2;133:18;;14:177;19501:37:0;;;;;;;;-1:-1:-1;19556:4:0;19320:248;;;;;:::o;23879:240::-;13679:13;:11;:13::i;:::-;24020:21:::1;:44:::0;;-1:-1:-1;;;;;24020:44:0;;::::1;-1:-1:-1::0;;;;;;24020:44:0;;::::1;;::::0;;;24075:15:::1;:36:::0;;;;;::::1;::::0;::::1;;::::0;;23879:240::o;25460:422::-;-1:-1:-1;;;;;25615:19:0;;25594:4;25615:19;;;:11;:19;;;;;;;;25635:10;25615:31;;;;;;;;-1:-1:-1;;25615:52:0;25611:206;;25718:87;;;;;;;;;;;-1:-1:-1;;;25718:87:0;;;;;;;;-1:-1:-1;;;;;25718:19:0;;-1:-1:-1;25718:19:0;;;:11;:19;;;;;25738:10;25718:31;;;;;;;;;;:87;;25772:6;;25718:53;:87::i;:::-;-1:-1:-1;;;;;25684:19:0;;;;;;:11;:19;;;;;;;;25704:10;25684:31;;;;;;;:121;25611:206;25834:40;25848:6;25856:9;25867:6;25834:13;:40::i;:::-;25827:47;;25460:422;;;;;;:::o;23678:193::-;13679:13;:11;:13::i;:::-;23739:36:::1;23762:6;23770:4;23739:22;:36::i;:::-;23786:35;23808:6;23816:4;23786:21;:35::i;:::-;23832:31;23850:6;23858:4;23832:17;:31::i;:::-;23678:193:::0;:::o;18785:204::-;19090:9;:18;;;;18913:6;18838:7;19090:18;;;;;18878:12;;18838:7;;18878:103;;19090:18;;18878:44;;:12;:16;:44::i;:::-;:48;;:103::i;:::-;18858:123;;18785:204;:::o;21233:308::-;13679:13;:11;:13::i;:::-;21398:21:::1;:38:::0;;21447:13:::1;:32:::0;;;;21490:43;::::1;;::::0;::::1;-1:-1:-1::0;;21398:38:0;::::1;;;;21490:43:::0;;;;-1:-1:-1;;21490:43:0;;;;;;;;;;::::1;::::0;;21233:308::o;22860:112::-;13679:13;:11;:13::i;:::-;-1:-1:-1;;;;;22939:16:0;;;::::1;;::::0;;;:6:::1;:16;::::0;;;;:25;;-1:-1:-1;;22939:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22860:112::o;22081:771::-;13679:13;:11;:13::i;:::-;22154:27:::1;22195:9;22154:51;;22269:29;22313:16;-1:-1:-1::0;;;;;22313:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22269:71;;22351:19;22373:17;-1:-1:-1::0;;;;;22373:25:0::1;;22421:4;22441:16;-1:-1:-1::0;;;;;22441:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22373:102;::::0;-1:-1:-1;;;;;;22373:102:0::1;::::0;;;;;;-1:-1:-1;;;;;5881:15:1;;;22373:102:0::1;::::0;::::1;5863:34:1::0;5933:15;;5913:18;;;5906:43;5798:18;;22373:102:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22351:124:::0;-1:-1:-1;;;;;;22492:25:0;::::1;22488:189;;22548:17;-1:-1:-1::0;;;;;22548:28:0::1;;22603:4;22627:16;-1:-1:-1::0;;;;;22627:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22548:117;::::0;-1:-1:-1;;;;;;22548:117:0::1;::::0;;;;;;-1:-1:-1;;;;;5881:15:1;;;22548:117:0::1;::::0;::::1;5863:34:1::0;5933:15;;5913:18;;;5906:43;5798:18;;22548:117:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22534:131;;22488:189;-1:-1:-1::0;;;;;22687:19:0;;::::1;;::::0;;;:6:::1;:19;::::0;;;;;;;:26;;22709:4:::1;-1:-1:-1::0;;22687:26:0;;::::1;::::0;::::1;::::0;;;22724:16:::1;:29:::0;;;;;:36;;;::::1;::::0;::::1;::::0;;22771:15:::1;:28:::0;;;;;:35;;;;::::1;::::0;;::::1;::::0;;22819:6:::1;:25:::0;;-1:-1:-1;;;;;;22819:25:0::1;::::0;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;22081:771:0:o;21818:138::-;13679:13;:11;:13::i;:::-;21910:6:::1;21904:3;:12;21896:21;;;::::0;::::1;;21928:14;:20:::0;21818:138::o;19576:122::-;19631:4;19655:35;19663:7;-1:-1:-1;;19655:7:0;:35::i;20589:198::-;13679:13;:11;:13::i;:::-;20677:1:::1;20665:8;:13;;20657:64;;;;-1:-1:-1::0;;;20657:64:0::1;;;;;;;:::i;:::-;;;;;;;;;20775:4;20763:8;20748:12;;:23;;;;:::i;:::-;20747:32;;;;:::i;:::-;20732:12;:47:::0;-1:-1:-1;20589:198:0:o;20795:430::-;13679:13;:11;:13::i;:::-;20984:12:::1;:28:::0;;;21023:10:::1;:29:::0;;;21063:12:::1;:30:::0;;;21117:46:::1;21036:16:::0;21117:30:::1;20999:13:::0;21078:15;21117:16:::1;:30::i;:::-;:34:::0;::::1;:46::i;:::-;21106:8;:57:::0;;;21194:23:::1;::::0;21205:12;;21194:23:::1;:::i;:::-;21174:17;:43:::0;-1:-1:-1;;;;20795:430:0:o;20269:104::-;13679:13;:11;:13::i;:::-;20341:15:::1;:24:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;20341:24:0;;::::1;::::0;;;::::1;::::0;;20269:104::o;14467:103::-;13679:13;:11;:13::i;:::-;14532:30:::1;14559:1;14532:18;:30::i;:::-;14467:103::o:0;21964:109::-;13679:13;:11;:13::i;:::-;22033:19:::1;::::0;:32:::1;::::0;-1:-1:-1;;;;;;22033:32:0;;::::1;::::0;::::1;160:25:1::0;;;-1:-1:-1;;;;;22033:19:0;;::::1;::::0;:27:::1;::::0;133:18:1;;22033:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21964:109:::0;:::o;23267:403::-;13679:13;:11;:13::i;:::-;-1:-1:-1;;;;;23383:14:0;::::1;;::::0;;;:6:::1;:14;::::0;;;;;::::1;;23379:60;;;-1:-1:-1::0;23423:4:0::1;23379:60;-1:-1:-1::0;;;;;23451:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;23451:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;23497:166:::1;;23524:19;::::0;:39:::1;::::0;-1:-1:-1;;;23524:39:0;;-1:-1:-1;;;;;7224:32:1;;;23524:39:0::1;::::0;::::1;7206:51:1::0;23524:19:0::1;7273:18:1::0;;;7266:34;23524:19:0;;::::1;::::0;:28:::1;::::0;7179:18:1;;23524:39:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23267:403:::0;;:::o;23497:166::-:1;23596:19;::::0;-1:-1:-1;;;;;23633:17:0;;::::1;23596:19;23633:17:::0;;;:9:::1;:17;::::0;;;;;;;23596:55;;-1:-1:-1;;;23596:55:0;;::::1;::::0;::::1;7206:51:1::0;;;;7273:18;;;7266:34;23596:19:0;::::1;::::0;:28:::1;::::0;7179:18:1;;23596:55:0::1;7024:282:1::0;24422:203:0;13679:13;:11;:13::i;:::-;24519:21:::1;24559:10;24551:66;24613:3;24581:28;24593:16:::0;24519:21;24581:28:::1;:::i;:::-;24580:36;;;;:::i;:::-;24551:66;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24488:137;24422:203:::0;:::o;24127:287::-;24239:12;13679:13;:11;:13::i;:::-;24301:4:::1;-1:-1:-1::0;;;;;24277:29:0;::::1;::::0;24269:70:::1;;;::::0;-1:-1:-1;;;24269:70:0;;7792:2:1;24269:70:0::1;::::0;::::1;7774:21:1::0;7831:2;7811:18;;;7804:30;7870;7850:18;;;7843:58;7918:18;;24269:70:0::1;7590:352:1::0;24269:70:0::1;24357:49;::::0;-1:-1:-1;;;24357:49:0;;24387:10:::1;24357:49;::::0;::::1;7206:51:1::0;7273:18;;;7266:34;;;-1:-1:-1;;;;;24357:29:0;::::1;::::0;::::1;::::0;7179:18:1;;24357:49:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24711:334::-:0;13679:13;:11;:13::i;:::-;24780:12:::1;::::0;24765::::1;:27:::0;;;24803:10:::1;:25:::0;24841:15:::1;:23:::0;;-1:-1:-1;;24841:23:0::1;::::0;;-1:-1:-1;24877:12:0::1;:16:::0;;;24904:12:::1;:16:::0;;;24944:2:::1;24931:10;:15:::0;;;24970:28:::1;::::0;-1:-1:-1;24970:16:0::1;:28::i;:::-;24959:8;:39:::0;;;25009:17:::1;:28:::0;24711:334::o;20165:96::-;13679:13;:11;:13::i;:::-;20233:11:::1;:20:::0;;;::::1;;;;-1:-1:-1::0;;20233:20:0;;::::1;::::0;;;::::1;::::0;;20165:96::o;19706:152::-;19804:19;;:46;;-1:-1:-1;;;19804:46:0;;-1:-1:-1;;;;;4636:32:1;;;19804:46:0;;;4618:51:1;19777:7:0;;19804:19;;:37;;4591:18:1;;19804:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24633:70::-;13679:13;:11;:13::i;:::-;24685:10:::1;:8;:10::i;22980:120::-:0;13679:13;:11;:13::i;:::-;-1:-1:-1;;;;;23064:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;23064:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22980:120::o;25264:188::-;25371:4;25400:44;25414:10;25426:9;25437:6;25400:13;:44::i;21549:261::-;13679:13;:11;:13::i;:::-;21689:19:::1;::::0;:113:::1;::::0;-1:-1:-1;;;21689:113:0;;::::1;::::0;::::1;8560:25:1::0;;;8601:18;;;8594:34;;;-1:-1:-1;;;;;21689:19:0;;::::1;::::0;:43:::1;::::0;8533:18:1;;21689:113:0::1;8386:248:1::0;20063:94:0;13679:13;:11;:13::i;:::-;20130:10:::1;:19:::0;;-1:-1:-1;;20130:19:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20063:94::o;19976:79::-;13679:13;:11;:13::i;:::-;20027:11:::1;:18:::0;;-1:-1:-1;;20027:18:0::1;;;::::0;;19976:79::o;19866:98::-;19911:19;;:45;;-1:-1:-1;;;19911:45:0;;19945:10;19911:45;;;4618:51:1;-1:-1:-1;;;;;19911:19:0;;;;:33;;4591:18:1;;19911:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19866:98::o;20381:200::-;13679:13;:11;:13::i;:::-;20473:1:::1;20461:8;:13;;20453:64;;;;-1:-1:-1::0;;;20453:64:0::1;;;;;;;:::i;:::-;20569:4;20557:8;20542:12;;:23;;;;:::i;:::-;20541:32;;;;:::i;:::-;20528:10;:45:::0;-1:-1:-1;20381:200:0:o;14725:220::-;13679:13;:11;:13::i;:::-;-1:-1:-1;;;;;14810:22:0;::::1;14806:93;;14856:31;::::0;-1:-1:-1;;;14856:31:0;;14884:1:::1;14856:31;::::0;::::1;4618:51:1::0;4591:18;;14856:31:0::1;4472:203:1::0;14806:93:0::1;14909:28;14928:8;14909:18;:28::i;23108:151::-:0;13679:13;:11;:13::i;:::-;-1:-1:-1;;;;;23219:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;23219:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23108:151::o;13958:165::-;13839:7;13866:6;-1:-1:-1;;;;;13866:6:0;12812:10;14018:23;14014:102;;14065:39;;-1:-1:-1;;;14065:39:0;;12812:10;14065:39;;;4618:51:1;4591:18;;14065:39:0;4472:203:1;3683:240:0;3803:7;3864:12;3856:6;;;;3848:29;;;;-1:-1:-1;;;3848:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;3899:5:0;;;3683:240::o;25890:1755::-;26037:16;;26016:4;;26037:16;;26033:97;;;26077:41;26092:6;26100:9;26111:6;26077:14;:41::i;:::-;26070:48;;;;26033:97;-1:-1:-1;;;;;26144:19:0;;;;;;:11;:19;;;;;;;;26139:97;;26188:11;;;;;;;26180:44;;;;-1:-1:-1;;;26180:44:0;;8841:2:1;26180:44:0;;;8823:21:1;8880:2;8860:18;;;8853:30;-1:-1:-1;;;8899:18:1;;;8892:50;8959:18;;26180:44:0;8639:344:1;26180:44:0;26278:12;;26268:6;:22;;:49;;;-1:-1:-1;;;;;;26294:23:0;;;;;;:15;:23;;;;;;;;26268:49;26246:116;;;;-1:-1:-1;;;26246:116:0;;9190:2:1;26246:116:0;;;9172:21:1;9229:2;9209:18;;;9202:30;-1:-1:-1;;;9248:18:1;;;9241:47;9305:18;;26246:116:0;8988:341:1;26246:116:0;-1:-1:-1;;;;;26394:14:0;;;;;;:6;:14;;;;;;;;26393:15;:49;;;;-1:-1:-1;26426:16:0;;;;26425:17;26393:49;:87;;;;-1:-1:-1;26459:21:0;;;;;;;26393:87;:145;;;;-1:-1:-1;26525:13:0;;26515:4;26497:24;;;;:9;:24;;;;;;:41;;26393:145;26375:212;;;26565:10;:8;:10::i;:::-;26646:90;;;;;;;;;;;-1:-1:-1;;;26646:90:0;;;;;;;;-1:-1:-1;;;;;26646:17:0;;-1:-1:-1;26646:17:0;;;:9;:17;;;;;;;;:90;;26682:6;;26646:21;:90::i;:::-;-1:-1:-1;;;;;26626:17:0;;;;;;;:9;:17;;;;;;;;:110;;;;26754:26;;;;;:15;:26;;;;;;;26753:27;:45;;;;-1:-1:-1;26784:14:0;;;;26753:45;26749:133;;;26859:10;;-1:-1:-1;;;;;26823:20:0;;;;;;:9;:20;;;;;;:32;;26848:6;26823:24;:32::i;:::-;:46;;26815:55;;;;;;-1:-1:-1;;;;;26917:19:0;;26894;26917;;;:11;:19;;;;;;;;26916:20;:47;;;;-1:-1:-1;;;;;;26941:22:0;;;;;;:11;:22;;;;;;;;26940:23;26916:47;:119;;27029:6;26916:119;;;26979:34;26987:6;26995:9;27006:6;26979:7;:34::i;:::-;-1:-1:-1;;;;;27069:20:0;;;;;;:9;:20;;;;;;26894:141;;-1:-1:-1;27069:37:0;;26894:141;27069:24;:37::i;:::-;-1:-1:-1;;;;;27046:20:0;;;;;;;:9;:20;;;;;;;;:60;;;;27153:24;;;;;:16;:24;;;;;;;27148:158;;27215:19;;-1:-1:-1;;;;;27252:17:0;;;27215:19;27252:17;;;:9;:17;;;;;;;;27215:55;;-1:-1:-1;;;27215:55:0;;;;;7206:51:1;;;;7273:18;;;7266:34;27215:19:0;;;:28;;7179:18:1;;27215:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27194:101;;-1:-1:-1;;;;;27323:27:0;;;;;;:16;:27;;;;;;;;27318:167;;27388:19;;-1:-1:-1;;;;;27428:20:0;;;27388:19;27428:20;;;:9;:20;;;;;;;;27388:61;;-1:-1:-1;;;27388:61:0;;;;;7206:51:1;;;;7273:18;;;7266:34;27388:19:0;;;:28;;7179:18:1;;27388:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27367:107;;27501:19;;27529:14;;27501:43;;-1:-1:-1;;;;;;27501:43:0;;-1:-1:-1;;;;;27501:19:0;;;;:27;;:43;;;;160:25:1;;;148:2;133:18;;14:177;27501:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27497:59;27590:9;-1:-1:-1;;;;;27573:40:0;27582:6;-1:-1:-1;;;;;27573:40:0;;27601:11;27573:40;;;;160:25:1;;148:2;133:18;;14:177;27573:40:0;;;;;;;;-1:-1:-1;27633:4:0;;25890:1755;-1:-1:-1;;;;25890:1755:0:o;3259:98::-;3317:7;3344:5;3348:1;3344;:5;:::i;3153:98::-;3211:7;3238:5;3242:1;3238;:5;:::i;15105:191::-;15179:16;15198:6;;-1:-1:-1;;;;;15215:17:0;;;-1:-1:-1;;;;;;15215:17:0;;;;;;15248:40;;15198:6;;;;;;;15248:40;;15179:16;15248:40;15168:128;15105:191;:::o;28920:1765::-;16918:16;:23;;-1:-1:-1;;16918:23:0;16937:4;16918:23;;;29016:4:::1;16918:16:::0;28998:24;;;:9:::1;:24;::::0;;;;;29125:8:::1;::::0;29093:12:::1;::::0;28998:24;;16918:16;29059:96:::1;::::0;29153:1:::1;::::0;29059:75:::1;::::0;29125:8;29059:75;;28998:24;;29059:33:::1;:47::i;:::-;:65:::0;::::1;:75::i;:96::-;29033:122:::0;-1:-1:-1;29166:20:0::1;29189:36;:15:::0;29033:122;29189:19:::1;:36::i;:::-;29262:16;::::0;;29276:1:::1;29262:16:::0;;;;;::::1;::::0;;29166:59;;-1:-1:-1;29238:21:0::1;::::0;29262:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;29262:16:0::1;29238:40;;29307:4;29289;29294:1;29289:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29289:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;29333:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;29333:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;29289:7;;29333:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29323:4;29328:1;29323:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29323:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;29359:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;29359:188:0;;:6;::::1;::::0;:57:::1;::::0;:188:::1;::::0;29431:12;;29359:6:::1;::::0;29474:4;;29501::::1;::::0;29521:15:::1;::::0;29359:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;29649:12:0::1;::::0;29580:21:::1;::::0;-1:-1:-1;29560:17:0::1;::::0;-1:-1:-1;29636:33:0::1;::::0;29649:19:::1;::::0;29666:1:::1;29649:16;:19::i;:::-;29636:8;::::0;;:12:::1;:33::i;:::-;29614:55;;29682:26;29711:93;29802:1;29711:72;29771:11;29711:41;29739:12;;29711:9;:27;;:41;;;;:::i;:93::-;29682:122;;29815:27;29845:66;29889:11;29845:25;29859:10;;29845:9;:13;;:25;;;;:::i;:66::-;29815:96;;29922:26;29951:68;29997:11;29951:27;29965:12;;29951:9;:13;;:27;;;;:::i;:68::-;29922:97;;30049:19;;;;;;;;;-1:-1:-1::0;;;;;30049:19:0::1;-1:-1:-1::0;;;;;30049:27:0::1;;30084:19;30049:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;30169:15:0::1;::::0;30161:109:::1;::::0;30140:15:::1;::::0;-1:-1:-1;;;;;30169:15:0::1;::::0;30250:5:::1;::::0;30212:18;;30140:15;30161:109;30140:15;30161:109;30212:18;30169:15;30250:5;30161:109:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;30296:5:0::1;::::0;-1:-1:-1;;30318:19:0;;;-1:-1:-1;30314:364:0::1;;30354:6;::::0;30528:21:::1;::::0;30354:244:::1;::::0;-1:-1:-1;;;30354:244:0;;30430:4:::1;30354:244;::::0;::::1;11267:34:1::0;11317:18;;;11310:34;;;30354:6:0::1;11360:18:1::0;;;11353:34;;;11403:18;;;11396:34;-1:-1:-1;;;;;30528:21:0;;::::1;11446:19:1::0;;;11439:44;30568:15:0::1;11499:19:1::0;;;11492:35;30354:6:0;::::1;::::0;:22:::1;::::0;30384:18;;11201:19:1;;30354:244:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;30618:48:0::1;::::0;;8560:25:1;;;8616:2;8601:18;;8594:34;;;30618:48:0::1;::::0;-1:-1:-1;8533:18:1;30618:48:0::1;;;;;;;30314:364;-1:-1:-1::0;;16964:16:0;:24;;-1:-1:-1;;16964:24:0;;;-1:-1:-1;;;;;;;;28920:1765:0:o;27653:401::-;27817:90;;;;;;;;;;;-1:-1:-1;;;27817:90:0;;;;;;;;-1:-1:-1;;;;;27817:17:0;;27780:4;27817:17;;;:9;:17;;;;;;;:90;;27853:6;;27817:21;:90::i;:::-;-1:-1:-1;;;;;27797:17:0;;;;;;;:9;:17;;;;;;:110;;;;27941:20;;;;;;;:32;;27966:6;27941:24;:32::i;:::-;-1:-1:-1;;;;;27918:20:0;;;;;;;:9;:20;;;;;;;:55;;;;27989:35;;;;;;;;;;28017:6;160:25:1;;148:2;133:18;;14:177;27989:35:0;;;;;;;;-1:-1:-1;28042:4:0;27653:401;;;;;:::o;28062:850::-;-1:-1:-1;;;;;28244:17:0;;28182:7;28244:17;;;:6;:17;;;;;;28182:7;;28244:17;;:32;;;;-1:-1:-1;28265:11:0;;;;;;;28244:32;28240:98;;;-1:-1:-1;28309:17:0;;28240:98;-1:-1:-1;;;;;28352:14:0;;;;;;:6;:14;;;;;;;;:28;;;;-1:-1:-1;28370:10:0;;;;28352:28;28348:85;;;-1:-1:-1;28413:8:0;;28348:85;-1:-1:-1;;;;;28448:14:0;;;;;;:6;:14;;;;;;;;28447:15;:37;;;;-1:-1:-1;;;;;;28467:17:0;;;;;;:6;:17;;;;;;;;28466:18;28447:37;28443:216;;;28505:15;;;;;;;28501:147;;;-1:-1:-1;28557:17:0;;28501:147;;;-1:-1:-1;28631:1:0;28501:147;28671:17;28691:35;28721:4;28691:25;:6;28702:13;28691:10;:25::i;:35::-;28784:4;28766:24;;;;:9;:24;;;;;;28671:55;;-1:-1:-1;28766:39:0;;28671:55;28766:28;:39::i;:::-;28757:4;28739:24;;;;:9;:24;;;;;;;:66;;;;28821:42;;-1:-1:-1;;;;;28821:42:0;;;;;;;28853:9;160:25:1;;148:2;133:18;;14:177;28821:42:0;;;;;;;;28883:21;:6;28894:9;28883:10;:21::i;:::-;28876:28;28062:850;-1:-1:-1;;;;;;28062:850:0:o;3365:98::-;3423:7;3450:5;3454:1;3450;:5;:::i;3471:98::-;3529:7;3556:5;3560:1;3556;:5;:::i;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:388::-;1465:6;1473;1526:2;1514:9;1505:7;1501:23;1497:32;1494:52;;;1542:1;1539;1532:12;1494:52;1581:9;1568:23;1600:31;1625:5;1600:31;:::i;:::-;1650:5;-1:-1:-1;1707:2:1;1692:18;;1679:32;1720:33;1679:32;1720:33;:::i;:::-;1772:7;1762:17;;;1397:388;;;;;:::o;1790:456::-;1867:6;1875;1883;1936:2;1924:9;1915:7;1911:23;1907:32;1904:52;;;1952:1;1949;1942:12;1904:52;1991:9;1978:23;2010:31;2035:5;2010:31;:::i;:::-;2060:5;-1:-1:-1;2117:2:1;2102:18;;2089:32;2130:33;2089:32;2130:33;:::i;:::-;1790:456;;2182:7;;-1:-1:-1;;;2236:2:1;2221:18;;;;2208:32;;1790:456::o;2251:247::-;2310:6;2363:2;2351:9;2342:7;2338:23;2334:32;2331:52;;;2379:1;2376;2369:12;2331:52;2418:9;2405:23;2437:31;2462:5;2437:31;:::i;2692:118::-;2778:5;2771:13;2764:21;2757:5;2754:32;2744:60;;2800:1;2797;2790:12;2815:444;2886:6;2894;2902;2955:2;2943:9;2934:7;2930:23;2926:32;2923:52;;;2971:1;2968;2961:12;2923:52;3010:9;2997:23;3029:28;3051:5;3029:28;:::i;:::-;3076:5;-1:-1:-1;3128:2:1;3113:18;;3100:32;;-1:-1:-1;3184:2:1;3169:18;;3156:32;3197:30;3156:32;3197:30;:::i;:::-;3246:7;3236:17;;;2815:444;;;;;:::o;3264:382::-;3329:6;3337;3390:2;3378:9;3369:7;3365:23;3361:32;3358:52;;;3406:1;3403;3396:12;3358:52;3445:9;3432:23;3464:31;3489:5;3464:31;:::i;:::-;3514:5;-1:-1:-1;3571:2:1;3556:18;;3543:32;3584:30;3543:32;3584:30;:::i;3651:180::-;3710:6;3763:2;3751:9;3742:7;3738:23;3734:32;3731:52;;;3779:1;3776;3769:12;3731:52;-1:-1:-1;3802:23:1;;3651:180;-1:-1:-1;3651:180:1:o;3836:385::-;3922:6;3930;3938;3946;3999:3;3987:9;3978:7;3974:23;3970:33;3967:53;;;4016:1;4013;4006:12;3967:53;-1:-1:-1;;4039:23:1;;;4109:2;4094:18;;4081:32;;-1:-1:-1;4160:2:1;4145:18;;4132:32;;4211:2;4196:18;4183:32;;-1:-1:-1;3836:385:1;-1:-1:-1;3836:385:1:o;4226:241::-;4282:6;4335:2;4323:9;4314:7;4310:23;4306:32;4303:52;;;4351:1;4348;4341:12;4303:52;4390:9;4377:23;4409:28;4431:5;4409:28;:::i;4680:248::-;4748:6;4756;4809:2;4797:9;4788:7;4784:23;4780:32;4777:52;;;4825:1;4822;4815:12;4777:52;-1:-1:-1;;4848:23:1;;;4918:2;4903:18;;;4890:32;;-1:-1:-1;4680:248:1:o;5395:251::-;5465:6;5518:2;5506:9;5497:7;5493:23;5489:32;5486:52;;;5534:1;5531;5524:12;5486:52;5566:9;5560:16;5585:31;5610:5;5585:31;:::i;5960:402::-;6162:2;6144:21;;;6201:2;6181:18;;;6174:30;6240:34;6235:2;6220:18;;6213:62;-1:-1:-1;;;6306:2:1;6291:18;;6284:36;6352:3;6337:19;;5960:402::o;6367:127::-;6428:10;6423:3;6419:20;6416:1;6409:31;6459:4;6456:1;6449:15;6483:4;6480:1;6473:15;6499:168;6572:9;;;6603;;6620:15;;;6614:22;;6600:37;6590:71;;6641:18;;:::i;6672:217::-;6712:1;6738;6728:132;;6782:10;6777:3;6773:20;6770:1;6763:31;6817:4;6814:1;6807:15;6845:4;6842:1;6835:15;6728:132;-1:-1:-1;6874:9:1;;6672:217::o;6894:125::-;6959:9;;;6980:10;;;6977:36;;;6993:18;;:::i;7947:245::-;8014:6;8067:2;8055:9;8046:7;8042:23;8038:32;8035:52;;;8083:1;8080;8073:12;8035:52;8115:9;8109:16;8134:28;8156:5;8134:28;:::i;8197:184::-;8267:6;8320:2;8308:9;8299:7;8295:23;8291:32;8288:52;;;8336:1;8333;8326:12;8288:52;-1:-1:-1;8359:16:1;;8197:184;-1:-1:-1;8197:184:1:o;9334:128::-;9401:9;;;9422:11;;;9419:37;;;9436:18;;:::i;9599:127::-;9660:10;9655:3;9651:20;9648:1;9641:31;9691:4;9688:1;9681:15;9715:4;9712:1;9705:15;9731:980;9993:4;10041:3;10030:9;10026:19;10072:6;10061:9;10054:25;10098:2;10136:6;10131:2;10120:9;10116:18;10109:34;10179:3;10174:2;10163:9;10159:18;10152:31;10203:6;10238;10232:13;10269:6;10261;10254:22;10307:3;10296:9;10292:19;10285:26;;10346:2;10338:6;10334:15;10320:29;;10367:1;10377:195;10391:6;10388:1;10385:13;10377:195;;;10456:13;;-1:-1:-1;;;;;10452:39:1;10440:52;;10547:15;;;;10512:12;;;;10488:1;10406:9;10377:195;;;-1:-1:-1;;;;;;;10628:32:1;;;;10623:2;10608:18;;10601:60;-1:-1:-1;;;10692:3:1;10677:19;10670:35;10589:3;9731:980;-1:-1:-1;;;9731:980:1:o;11538:306::-;11626:6;11634;11642;11695:2;11683:9;11674:7;11670:23;11666:32;11663:52;;;11711:1;11708;11701:12;11663:52;11740:9;11734:16;11724:26;;11790:2;11779:9;11775:18;11769:25;11759:35;;11834:2;11823:9;11819:18;11813:25;11803:35;;11538:306;;;;;:::o

Swarm Source

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