ETH Price: $3,487.79 (-0.85%)
Gas: 3 Gwei

Token

SuperBrain Capital Dao ($SBC)
 

Overview

Max Total Supply

100,000,000,000 $SBC

Holders

682

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
38,530,582.871882398 $SBC

Value
$0.00
0x0d986684e7639f51A80630877E5FC57fD8517C96
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:
SuperBrainCapitalDao

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 9 of 9: SuperBrain.sol
/**

SuperBrain Capital Dao: $SBC
- Deflationary DeFi-as-a-Service (DaaS) Token, with 65% supply burned to 0x0dEaD
- Our advisors will bootstrap the investments in our initial phase. We invest on multiple chains and return the profits to $SBC holders.

Tokenomics:
- Buy Tax / Sell Tax: 14%
    - 5% of each buy goes to ETH reflections
    - 5% of each sell to treasury wallet
    - 4% to the liquidity pool.

Website:
http://superbrain.capital

Earning Dashboard:
https://superbrain.capital/dashboard

Telegram:
https://t.me/SBC.Official

Twitter:
https://twitter.com/SuperBrain_C

Medium:
https://superbraincapital.medium.com/

Credit to ACYC (AllCoinsYield Capital), MCC (Multi-Chain Capital) + SAFEMOON (SafeMoon)

*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

import "./Ownable.sol";
import "./IERC20.sol";
import "./Address.sol";
import "./SafeMath.sol";
import "./IUniswapV2Factory.sol";
import "./IUniswapV2Pair.sol";
import "./IUniswapV2Router02.sol";

interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution, uint256 _minimumTokenBalanceForDividends) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function claimDividend(address holder) external;
    function manualSendDividend(uint256 amount, address holder) external;
}


contract SuperBrainCapitalDividendTracker is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

    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 = 1 hours;
    uint256 public minDistribution = 200000000000000; // 0.0002 ETH minimum auto send  
    uint256 public minimumTokenBalanceForDividends = 1000000 * (10**9); // Must hold 1000,000 token to receive ETH

    uint256 currentIndex;

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

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

    constructor () {
        _token = msg.sender;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution, uint256 _minimumTokenBalanceForDividends) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
        minimumTokenBalanceForDividends = _minimumTokenBalanceForDividends;
    }

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

        if(amount > minimumTokenBalanceForDividends && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount <= minimumTokenBalanceForDividends && 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 manualSendDividend(uint256 amount, address holder) external override onlyToken {
        uint256 contractETHBalance = address(this).balance;
        payable(holder).transfer(amount > 0 ? amount : contractETHBalance);
    }

    function deposit() external payable override onlyToken {
        uint256 amount = msg.value;

        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }
    
    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);
            payable(shareholder).transfer(amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }

    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();
    }
    
    function getAccount(address _account) public view returns(
        address account,
        uint256 pendingReward,
        uint256 totalRealised,
        uint256 lastClaimTime,
        uint256 nextClaimTime,
        uint256 secondsUntilAutoClaimAvailable,
        uint256 _totalDistributed){
        account = _account;
        
        Share storage userInfo = shares[_account];
        pendingReward = getUnpaidEarnings(account);
        totalRealised = shares[_account].totalRealised;
        lastClaimTime = shareholderClaims[_account];
        nextClaimTime = lastClaimTime + minPeriod;
        secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ?
                                                    nextClaimTime.sub(block.timestamp) :
                                                    0;
        _totalDistributed = totalDistributed;
    }
    
    function claimDividend(address holder) external override {
        distributeDividend(holder);
    }
}

contract SuperBrainCapitalDao is Ownable, IERC20 {
    using SafeMath for uint256;
    
	struct FeeSet {
		uint256 reflectionFee;
		uint256 treasuryFee;
		uint256 liquidityFee;
		uint256 totalFee;
	}
    
    address WETH;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

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

    string _name = "SuperBrain Capital Dao";
    string _symbol = "$SBC";
    uint8 constant _decimals = 9;
    uint256 public _totalSupply = 100000000000 * (10 ** _decimals);
    uint256 public _maxWallet = _totalSupply.mul(3).div(100); 
    uint256 public _maxTxAmount = _totalSupply.mul(1).div(100);

    mapping (address => bool) excludeFee;
    mapping (address => bool) excludeMaxTxn;
    mapping (address => bool) excludeDividend;
    
	FeeSet public buyFees;
	FeeSet public sellFees;
    uint256 feeDenominator = 100;
    
    address treasuryWallet = address(0xdE9FF8a2ea97cD1e366ff3e5D840fEA724865299);
    address liquidityWallet;

    IUniswapV2Router02 public router;
    address pair;

    SuperBrainCapitalDividendTracker public dividendTracker;

    uint256 lastSwap;
    uint256 interval = 5 minutes;
    bool public swapEnabled = true;
    bool ignoreLimit = true;

    bool isOpen = false;

    uint256 public swapThreshold = _totalSupply / 5000; // 0.02%
    bool inSwap;
    
    modifier swapping() { inSwap = true; _; inSwap = false; }
    modifier open(address from, address to) {
        require(isOpen || from == owner() || to == owner(), "Not Open");
        _;
    }

    constructor () {

        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        WETH = router.WETH();
        pair = IUniswapV2Factory(router.factory()).createPair(WETH, address(this));
        _allowances[address(this)][address(router)] = ~uint256(0);

        dividendTracker = new SuperBrainCapitalDividendTracker();

        address owner_ = msg.sender;
        liquidityWallet = owner_;

        excludeFee[liquidityWallet] = true;
        excludeFee[owner_] = true;
        excludeFee[address(this)] = true;

        excludeMaxTxn[liquidityWallet] = true;
        excludeMaxTxn[owner_] = true;
        excludeMaxTxn[address(this)] = true;

        excludeDividend[pair] = true;
        excludeDividend[address(this)] = true;
        excludeDividend[DEAD] = true;
        
		setBuyFees(5, 5, 4);
		setSellFees(5, 5, 4);
	
        _balances[owner_] = _totalSupply;
        emit Transfer(address(0), owner_, _totalSupply);
    }

    receive() external payable { }

    function setName(string memory newName, string memory newSymbol) public onlyOwner{
        _name = newName;
        _symbol = newSymbol;
    }
    
    function totalSupply() external override view returns (uint256) { return _totalSupply; }
    function decimals() external pure returns (uint8) { return _decimals; }
    function symbol() external returns (string memory) { 
        return _symbol; 
    }
    function name() external returns (string memory) { 
        return _name; 
    }
    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, ~uint256(0));
    }

    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] != ~uint256(0)){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function openTrade() external onlyOwner {
        isOpen = true;
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal open(sender, recipient) returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }
        
        checkTxLimit(sender, recipient, amount);

        if(lastSwap + interval <= block.timestamp){
            if(canSwap())
                swapBack();
        }

        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        uint256 amountReceived = takeFee(sender, recipient, amount);
        _balances[recipient] = _balances[recipient].add(amountReceived);

        if(!excludeDividend[sender]){ try dividendTracker.setShare(sender, _balances[sender]) {} catch {} }
        if(!excludeDividend[recipient]){ try dividendTracker.setShare(recipient, _balances[recipient]) {} catch {} }

        emit Transfer(sender, recipient, amountReceived);
        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 manualSendDividend(uint256 amount, address holder) external onlyOwner {
        dividendTracker.manualSendDividend(amount, holder);
    }

    function checkTxLimit(address sender, address recipient, uint256 amount) internal view {
        require(amount <= _maxTxAmount || excludeMaxTxn[sender], "TX Limit Exceeded");
        
        if (sender != owner() && recipient != address(this)  && recipient != address(DEAD) && recipient != pair && recipient != treasuryWallet && recipient != liquidityWallet){
            uint256 currentBalance = balanceOf(recipient);
            require(excludeMaxTxn[recipient] || (currentBalance + amount <= _maxWallet));
        }
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        if (excludeFee[sender] || excludeFee[recipient]) 
            return amount;
        
        uint256 totalFee;
        if(sender == pair)
            totalFee = buyFees.totalFee;
        else
            totalFee = sellFees.totalFee;
            
        uint256 feeAmount = amount.mul(totalFee).div(feeDenominator);
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function canSwap() internal view returns (bool) {
        return msg.sender != pair
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    function swapBack() internal swapping {
        uint256 swapAmount = _balances[address(this)];
        if(!ignoreLimit)
            swapAmount = swapThreshold;

        lastSwap = block.timestamp;
        FeeSet memory fee = sellFees;
        uint256 totalFee = fee.totalFee;
        uint256 dynamicLiquidityFee = fee.liquidityFee;
        uint256 treasuryFee = fee.treasuryFee;
        uint256 reflectionFee = fee.reflectionFee;
        
        uint256 amountToLiquify = swapAmount.mul(dynamicLiquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = swapAmount.sub(amountToLiquify);

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

        uint256 balanceBefore = address(this).balance;

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

        uint256 amountETH = address(this).balance.sub(balanceBefore);

        uint256 totalETHFee = totalFee.sub(dynamicLiquidityFee.div(2));
        
        uint256 amountETHLiquidity = amountETH.mul(dynamicLiquidityFee).div(totalETHFee).div(2);
        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                liquidityWallet,
                block.timestamp
            );
        }
        
        uint256 amountETHReflection = amountETH.mul(reflectionFee).div(totalETHFee);
        try dividendTracker.deposit{value: amountETHReflection}() {} catch {}
        
        uint256 amountETHTreasury = address(this).balance;
        payable(treasuryWallet).transfer(amountETHTreasury);
    }

    function setExcludeDividend(address holder, bool exempt) external onlyOwner {
        require(holder != address(this) && holder != pair);
        excludeDividend[holder] = exempt;
        if(exempt){
            dividendTracker.setShare(holder, 0);
        }else{
            dividendTracker.setShare(holder, _balances[holder]);
        }
    }

    function setExcludeFeeMultiple(address[] calldata _users, bool exempt) external onlyOwner {
        for(uint8 i = 0; i < _users.length; i++) {
            excludeFee[_users[i]] = exempt;
        }
    }
    
    function setExcludeTxMultiple(address[] calldata _users, bool exempt) external onlyOwner {
        for(uint8 i = 0; i < _users.length; i++) {
            excludeMaxTxn[_users[i]] = exempt;
        }
    }
    
    function setReceiver(address _treasuryWallet, address _liquidityWallet) external onlyOwner {
        treasuryWallet = _treasuryWallet;
        liquidityWallet = _liquidityWallet;
    }

    function rescueToken(address _token, uint256 _amount) external onlyOwner {
        IERC20(_token).transfer(msg.sender, _amount);
    }

    function rescueETH(uint256 _amount) external onlyOwner{
        payable(msg.sender).transfer(_amount);
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount, bool _ignoreLimit, uint256 _interval) external onlyOwner {
        swapEnabled = _enabled;
        swapThreshold = _amount;
        ignoreLimit = _ignoreLimit;
        interval = _interval;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution, uint256 _minimumTokenBalanceForDividends) external onlyOwner {
        dividendTracker.setDistributionCriteria(_minPeriod, _minDistribution, _minimumTokenBalanceForDividends);
    }
    
    function setTxLimit(uint256 amount) external onlyOwner {
        require(amount >= _totalSupply / 2000);
        _maxTxAmount = amount;
    }
    
    function getAccountDividendsInfo(address account)
        external view returns (
            address,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256) {
        return dividendTracker.getAccount(account);
    }
    
    function claim() public {
        dividendTracker.claimDividend(msg.sender);
    }

    function setBuyFees(uint256 _reflectionFee, uint256 _treasuryFee, uint256 _liquidityFee) public onlyOwner {
		buyFees = FeeSet({
			reflectionFee: _reflectionFee,
			treasuryFee: _treasuryFee,
			liquidityFee: _liquidityFee,
			totalFee: _reflectionFee + _treasuryFee + _liquidityFee
		});
	}

	function setSellFees(uint256 _reflectionFee, uint256 _treasuryFee, uint256 _liquidityFee) public onlyOwner {
		sellFees = FeeSet({
			reflectionFee: _reflectionFee,
			treasuryFee: _treasuryFee,
			liquidityFee: _liquidityFee,
			totalFee: _reflectionFee + _treasuryFee + _liquidityFee
		});
	}
}

File 1 of 9: Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Address.sol)

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 2 of 9: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

File 3 of 9: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 4 of 9: IUniswapV2Factory.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

File 5 of 9: IUniswapV2Pair.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

File 6 of 9: IUniswapV2Router02.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.2;

interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

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

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

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

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

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

File 7 of 9: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing 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 {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _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);
    }
}

File 8 of 9: SafeMath.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    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);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFees","outputs":[{"internalType":"uint256","name":"reflectionFee","type":"uint256"},{"internalType":"uint256","name":"treasuryFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"totalFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract SuperBrainCapitalDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountDividendsInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"holder","type":"address"}],"name":"manualSendDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint256","name":"reflectionFee","type":"uint256"},{"internalType":"uint256","name":"treasuryFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"totalFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"},{"internalType":"uint256","name":"_minimumTokenBalanceForDividends","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setExcludeDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setExcludeFeeMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setExcludeTxMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newName","type":"string"},{"internalType":"string","name":"newSymbol","type":"string"}],"name":"setName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryWallet","type":"address"},{"internalType":"address","name":"_liquidityWallet","type":"address"}],"name":"setReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_ignoreLimit","type":"bool"},{"internalType":"uint256","name":"_interval","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","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":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600280546001600160a01b031990811661dead1790915560038054909116905560c0604052601660808190527f5375706572427261696e204361706974616c2044616f0000000000000000000060a0908152620000609160069190620006a5565b50604080518082019091526004808252632453424360e01b60209092019182526200008e91600791620006a5565b506200009d6009600a6200086c565b620000ae9064174876e8006200087d565b600855620000e86064620000d46003600854620004e060201b620012461790919060201c565b620004f760201b620012521790919060201c565b6009556200010e6064620000d46001600854620004e060201b620012461790919060201c565b600a556064601655601780546001600160a01b03191673de9ff8a2ea97cd1e366ff3e5d840fea72486529917905561012c601d55601e805462ffffff19166101011790556008546200016490611388906200089f565b601f553480156200017457600080fd5b50620001803362000505565b601980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155604080516315ab88c960e31b8152905163ad5c464891600480820192602092909190829003018186803b158015620001e057600080fd5b505afa158015620001f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021b9190620008c2565b600180546001600160a01b0319166001600160a01b039283161790556019546040805163c45a015560e01b81529051919092169163c45a0155916004808301926020929190829003018186803b1580156200027557600080fd5b505afa1580156200028a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b09190620008c2565b6001546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b158015620002fd57600080fd5b505af115801562000312573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003389190620008c2565b601a80546001600160a01b0319166001600160a01b039283161790553060009081526005602090815260408083206019549094168352929052819020600019905551620003859062000734565b604051809103906000f080158015620003a2573d6000803e3d6000fd5b50601b80546001600160a01b03199081166001600160a01b039384161790915560188054339216821781556000828152600b60209081526040808320805460ff199081166001908117909255308086528386208054831684179055955488168552600c8452828520805482168317905586855282852080548216831790558585528285208054821683179055601a5488168552600d90935281842080548416821790559383528083208054831685179055600254909516825293902080549093161790915562000476600580600462000555565b620004856005806004620005ff565b6008546001600160a01b038216600081815260046020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3506200094c565b6000620004ee82846200087d565b90505b92915050565b6000620004ee82846200089f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314620005a45760405162461bcd60e51b81526020600482018190526024820152600080516020620037ad83398151915260448201526064015b60405180910390fd5b6040518060800160405280848152602001838152602001828152602001828486620005d09190620008f4565b620005dc9190620008f4565b90528051600e556020810151600f55604081015160105560600151601155505050565b6000546001600160a01b031633146200064a5760405162461bcd60e51b81526020600482018190526024820152600080516020620037ad83398151915260448201526064016200059b565b6040518060800160405280848152602001838152602001828152602001828486620006769190620008f4565b620006829190620008f4565b905280516012556020810151601355604081015160145560600151601555505050565b828054620006b3906200090f565b90600052602060002090601f016020900481019282620006d7576000855562000722565b82601f10620006f257805160ff191683800117855562000722565b8280016001018555821562000722579182015b828111156200072257825182559160200191906001019062000705565b506200073092915062000742565b5090565b610ae88062002cc583390190565b5b8082111562000730576000815560010162000743565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620007b057816000190482111562000794576200079462000759565b80851615620007a257918102915b93841c939080029062000774565b509250929050565b600082620007c957506001620004f1565b81620007d857506000620004f1565b8160018114620007f15760028114620007fc576200081c565b6001915050620004f1565b60ff84111562000810576200081062000759565b50506001821b620004f1565b5060208310610133831016604e8410600b841016171562000841575081810a620004f1565b6200084d83836200076f565b806000190482111562000864576200086462000759565b029392505050565b6000620004ee60ff841683620007b8565b60008160001904831182151516156200089a576200089a62000759565b500290565b600082620008bd57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620008d557600080fd5b81516001600160a01b0381168114620008ed57600080fd5b9392505050565b600082198211156200090a576200090a62000759565b500190565b600181811c908216806200092457607f821691505b602082108114156200094657634e487b7160e01b600052602260045260246000fd5b50919050565b612369806200095c6000396000f3fe6080604052600436106102295760003560e01c8063715018a6116101235780639e252f00116100ab578063e4748b9e1161006f578063e4748b9e146106d2578063f15cd8bd146106f5578063f2fde38b14610715578063f887ea4014610735578063fb201b1d1461075557600080fd5b80639e252f00146105aa578063a9059cbb146105ca578063ad56c13c146105ea578063dd62ed3e14610649578063e0f3ccf51461068f57600080fd5b806386dcb95e116100f257806386dcb95e146105175780638da5cb5b146105375780638e1269441461055557806395d89b41146105755780639c3182021461058a57600080fd5b8063715018a6146104b6578063778089e6146104cb5780637d1db4a5146104eb57806382247ec01461050157600080fd5b8063313ce567116101b1578063571ac8b011610175578063571ac8b0146104065780635c707f07146104265780635c85974f146104465780636ddd17131461046657806370a082311461048057600080fd5b8063313ce5671461037f57806333f3d6281461039b57806336790a84146103bb5780633eaaf86b146103db5780634e71d92d146103f157600080fd5b80630d075d9c116101f85780630d075d9c146102d25780630f683e90146102f257806318160ddd1461031257806323b872dd146103275780632c1f52161461034757600080fd5b80630445b6671461023557806306fdde031461025e578063095ea7b3146102805780630ca61cb1146102b057600080fd5b3661023057005b600080fd5b34801561024157600080fd5b5061024b601f5481565b6040519081526020015b60405180910390f35b34801561026a57600080fd5b5061027361076a565b6040516102559190611d46565b34801561028c57600080fd5b506102a061029b366004611db0565b6107fc565b6040519015158152602001610255565b3480156102bc57600080fd5b506102d06102cb366004611ddc565b610868565b005b3480156102de57600080fd5b506102d06102ed366004611ddc565b61090c565b3480156102fe57600080fd5b506102d061030d366004611ddc565b61098d565b34801561031e57600080fd5b5060085461024b565b34801561033357600080fd5b506102a0610342366004611e08565b610a0e565b34801561035357600080fd5b50601b54610367906001600160a01b031681565b6040516001600160a01b039091168152602001610255565b34801561038b57600080fd5b5060405160098152602001610255565b3480156103a757600080fd5b506102d06103b6366004611db0565b610ad0565b3480156103c757600080fd5b506102d06103d6366004611e57565b610b7f565b3480156103e757600080fd5b5061024b60085481565b3480156103fd57600080fd5b506102d0610c26565b34801561041257600080fd5b506102a0610421366004611edd565b610c7f565b34801561043257600080fd5b506102d0610441366004611f9d565b610c93565b34801561045257600080fd5b506102d0610461366004612001565b610ce4565b34801561047257600080fd5b50601e546102a09060ff1681565b34801561048c57600080fd5b5061024b61049b366004611edd565b6001600160a01b031660009081526004602052604090205490565b3480156104c257600080fd5b506102d0610d2f565b3480156104d757600080fd5b506102d06104e636600461201a565b610d65565b3480156104f757600080fd5b5061024b600a5481565b34801561050d57600080fd5b5061024b60095481565b34801561052357600080fd5b506102d0610532366004612053565b610ea5565b34801561054357600080fd5b506000546001600160a01b0316610367565b34801561056157600080fd5b506102d0610570366004612081565b610efd565b34801561058157600080fd5b50610273610f60565b34801561059657600080fd5b506102d06105a5366004611e57565b610f6f565b3480156105b657600080fd5b506102d06105c5366004612001565b611010565b3480156105d657600080fd5b506102a06105e5366004611db0565b611067565b3480156105f657600080fd5b5061060a610605366004611edd565b611074565b604080516001600160a01b0390981688526020880196909652948601939093526060850191909152608084015260a083015260c082015260e001610255565b34801561065557600080fd5b5061024b610664366004612053565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561069b57600080fd5b506012546013546014546015546106b29392919084565b604080519485526020850193909352918301526060820152608001610255565b3480156106de57600080fd5b50600e54600f546010546011546106b29392919084565b34801561070157600080fd5b506102d06107103660046120a6565b611115565b34801561072157600080fd5b506102d0610730366004611edd565b61116e565b34801561074157600080fd5b50601954610367906001600160a01b031681565b34801561076157600080fd5b506102d0611209565b606060068054610779906120ee565b80601f01602080910402602001604051908101604052809291908181526020018280546107a5906120ee565b80156107f25780601f106107c7576101008083540402835291602001916107f2565b820191906000526020600020905b8154815290600101906020018083116107d557829003601f168201915b5050505050905090565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108579086815260200190565b60405180910390a350600192915050565b6000546001600160a01b0316331461089b5760405162461bcd60e51b815260040161089290612129565b60405180910390fd5b601b54604051630ca61cb160e01b81526004810185905260248101849052604481018390526001600160a01b0390911690630ca61cb190606401600060405180830381600087803b1580156108ef57600080fd5b505af1158015610903573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146109365760405162461bcd60e51b815260040161089290612129565b60405180608001604052808481526020018381526020018281526020018284866109609190612174565b61096a9190612174565b90528051600e556020810151600f55604081015160105560600151601155505050565b6000546001600160a01b031633146109b75760405162461bcd60e51b815260040161089290612129565b60405180608001604052808481526020018381526020018281526020018284866109e19190612174565b6109eb9190612174565b905280516012556020810151601355604081015160145560600151601555505050565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001914610abb576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600582528381203382529091529190912054610a9691849061125e565b6001600160a01b03851660009081526005602090815260408083203384529091529020555b610ac684848461128a565b90505b9392505050565b6000546001600160a01b03163314610afa5760405162461bcd60e51b815260040161089290612129565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b158015610b4257600080fd5b505af1158015610b56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7a919061218c565b505050565b6000546001600160a01b03163314610ba95760405162461bcd60e51b815260040161089290612129565b60005b60ff8116831115610c205781600c600086868560ff16818110610bd157610bd16121a9565b9050602002016020810190610be69190611edd565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610c18816121bf565b915050610bac565b50505050565b601b54604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b158015610c6b57600080fd5b505af1158015610c20573d6000803e3d6000fd5b6000610c8d826000196107fc565b92915050565b6000546001600160a01b03163314610cbd5760405162461bcd60e51b815260040161089290612129565b8151610cd0906006906020850190611cad565b508051610b7a906007906020840190611cad565b6000546001600160a01b03163314610d0e5760405162461bcd60e51b815260040161089290612129565b6107d0600854610d1e91906121df565b811015610d2a57600080fd5b600a55565b6000546001600160a01b03163314610d595760405162461bcd60e51b815260040161089290612129565b610d63600061158a565b565b6000546001600160a01b03163314610d8f5760405162461bcd60e51b815260040161089290612129565b6001600160a01b0382163014801590610db65750601a546001600160a01b03838116911614155b610dbf57600080fd5b6001600160a01b0382166000908152600d60205260409020805460ff19168215801591909117909155610e5757601b54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca96906044015b600060405180830381600087803b158015610e3b57600080fd5b505af1158015610e4f573d6000803e3d6000fd5b505050505050565b601b546001600160a01b03838116600081815260046020819052604091829020549151630a5b654b60e11b81529081019290925260248201529116906314b6ca9690604401610e21565b5050565b6000546001600160a01b03163314610ecf5760405162461bcd60e51b815260040161089290612129565b601780546001600160a01b039384166001600160a01b03199182161790915560188054929093169116179055565b6000546001600160a01b03163314610f275760405162461bcd60e51b815260040161089290612129565b601b546040516323849a5160e21b8152600481018490526001600160a01b03838116602483015290911690638e12694490604401610e21565b606060078054610779906120ee565b6000546001600160a01b03163314610f995760405162461bcd60e51b815260040161089290612129565b60005b60ff8116831115610c205781600b600086868560ff16818110610fc157610fc16121a9565b9050602002016020810190610fd69190611edd565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611008816121bf565b915050610f9c565b6000546001600160a01b0316331461103a5760405162461bcd60e51b815260040161089290612129565b604051339082156108fc029083906000818181858888f19350505050158015610ea1573d6000803e3d6000fd5b6000610ac933848461128a565b601b5460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283928392169063fbcbc0f19060240160e06040518083038186803b1580156110c657600080fd5b505afa1580156110da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fe9190612201565b959e949d50929b5090995097509550909350915050565b6000546001600160a01b0316331461113f5760405162461bcd60e51b815260040161089290612129565b601e8054601f9490945561ffff1990931693151561ff0019169390931761010091151591909102179055601d55565b6000546001600160a01b031633146111985760405162461bcd60e51b815260040161089290612129565b6001600160a01b0381166111fd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610892565b6112068161158a565b50565b6000546001600160a01b031633146112335760405162461bcd60e51b815260040161089290612129565b601e805462ff0000191662010000179055565b6000610ac9828461225e565b6000610ac982846121df565b600081848411156112825760405162461bcd60e51b81526004016108929190611d46565b505050900390565b60008383601e60029054906101000a900460ff16806112b657506000546001600160a01b038381169116145b806112ce57506000546001600160a01b038281169116145b6113055760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610892565b60205460ff16156113225761131b8686866115da565b9250611581565b61132d8686866116c0565b42601d54601c5461133e9190612174565b116113585761134b611804565b1561135857611358611855565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389166000908152600490915291909120546113aa91869061125e565b6001600160a01b0387166000908152600460205260408120919091556113d1878787611b85565b6001600160a01b0387166000908152600460205260409020549091506113f79082611c95565b6001600160a01b03808816600090815260046020908152604080832094909455918a168152600d909152205460ff1661149c57601b546001600160a01b03888116600081815260046020819052604091829020549151630a5b654b60e11b81529081019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561148957600080fd5b505af192505050801561149a575060015b505b6001600160a01b0386166000908152600d602052604090205460ff1661152e57601b546001600160a01b03878116600081815260046020819052604091829020549151630a5b654b60e11b81529081019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561151b57600080fd5b505af192505050801561152c575060015b505b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161157391815260200190565b60405180910390a360019350505b50509392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260049091529182205461162b91849061125e565b6001600160a01b03808616600090815260046020526040808220939093559085168152205461165a9083611c95565b6001600160a01b0380851660008181526004602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116ae9086815260200190565b60405180910390a35060019392505050565b600a54811115806116e957506001600160a01b0383166000908152600c602052604090205460ff165b6117295760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610892565b6000546001600160a01b0384811691161480159061175057506001600160a01b0382163014155b801561176a57506002546001600160a01b03838116911614155b80156117845750601a546001600160a01b03838116911614155b801561179e57506017546001600160a01b03838116911614155b80156117b857506018546001600160a01b03838116911614155b15610b7a576001600160a01b038216600090815260046020908152604080832054600c9092529091205460ff16806117fb57506009546117f88383612174565b11155b610c2057600080fd5b601a546000906001600160a01b03163314801590611825575060205460ff16155b80156118335750601e5460ff165b80156118505750601f543060009081526004602052604090205410155b905090565b6020805460ff1916600117815530600090815260049091526040902054601e54610100900460ff166118865750601f545b42601c5560408051608081018252601254808252601354602083018190526014549383018490526015546060840181905292939160006118d360026118cd87818b89611246565b90611252565b905060006118e18883611ca1565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061191b5761191b6121a9565b6001600160a01b039283166020918202929092010152600180548351921691839190811061194b5761194b6121a9565b6001600160a01b03928316602091820292909201015260195460405163791ac94760e01b81524792919091169063791ac9479061199590869060009087903090429060040161227d565b600060405180830381600087803b1580156119af57600080fd5b505af11580156119c3573d6000803e3d6000fd5b5050505060006119dc8247611ca190919063ffffffff16565b905060006119f56119ee8a6002611252565b8b90611ca1565b90506000611a0a60026118cd8481878f611246565b90508615611aba5760195460185460405163f305d71960e01b8152306004820152602481018a905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015611a7d57600080fd5b505af1158015611a91573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ab691906122ee565b5050505b6000611aca836118cd868c611246565b9050601b60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015611b1c57600080fd5b505af193505050508015611b2e575060015b5060175460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015611b69573d6000803e3d6000fd5b50506020805460ff191690555050505050505050505050505050565b6001600160a01b0383166000908152600b602052604081205460ff1680611bc457506001600160a01b0383166000908152600b602052604090205460ff165b15611bd0575080610ac9565b601a546000906001600160a01b0386811691161415611bf25750601154611bf7565b506015545b601654600090611c0b906118cd8685611246565b30600090815260046020526040902054909150611c289082611c95565b30600081815260046020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c799085815260200190565b60405180910390a3611c8b8482611ca1565b9695505050505050565b6000610ac98284612174565b6000610ac9828461231c565b828054611cb9906120ee565b90600052602060002090601f016020900481019282611cdb5760008555611d21565b82601f10611cf457805160ff1916838001178555611d21565b82800160010185558215611d21579182015b82811115611d21578251825591602001919060010190611d06565b50611d2d929150611d31565b5090565b5b80821115611d2d5760008155600101611d32565b600060208083528351808285015260005b81811015611d7357858101830151858201604001528201611d57565b81811115611d85576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461120657600080fd5b60008060408385031215611dc357600080fd5b8235611dce81611d9b565b946020939093013593505050565b600080600060608486031215611df157600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215611e1d57600080fd5b8335611e2881611d9b565b92506020840135611e3881611d9b565b929592945050506040919091013590565b801515811461120657600080fd5b600080600060408486031215611e6c57600080fd5b833567ffffffffffffffff80821115611e8457600080fd5b818601915086601f830112611e9857600080fd5b813581811115611ea757600080fd5b8760208260051b8501011115611ebc57600080fd5b60209283019550935050840135611ed281611e49565b809150509250925092565b600060208284031215611eef57600080fd5b8135610ac981611d9b565b634e487b7160e01b600052604160045260246000fd5b600082601f830112611f2157600080fd5b813567ffffffffffffffff80821115611f3c57611f3c611efa565b604051601f8301601f19908116603f01168101908282118183101715611f6457611f64611efa565b81604052838152866020858801011115611f7d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215611fb057600080fd5b823567ffffffffffffffff80821115611fc857600080fd5b611fd486838701611f10565b93506020850135915080821115611fea57600080fd5b50611ff785828601611f10565b9150509250929050565b60006020828403121561201357600080fd5b5035919050565b6000806040838503121561202d57600080fd5b823561203881611d9b565b9150602083013561204881611e49565b809150509250929050565b6000806040838503121561206657600080fd5b823561207181611d9b565b9150602083013561204881611d9b565b6000806040838503121561209457600080fd5b82359150602083013561204881611d9b565b600080600080608085870312156120bc57600080fd5b84356120c781611e49565b93506020850135925060408501356120de81611e49565b9396929550929360600135925050565b600181811c9082168061210257607f821691505b6020821081141561212357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156121875761218761215e565b500190565b60006020828403121561219e57600080fd5b8151610ac981611e49565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff8114156121d6576121d661215e565b60010192915050565b6000826121fc57634e487b7160e01b600052601260045260246000fd5b500490565b600080600080600080600060e0888a03121561221c57600080fd5b875161222781611d9b565b602089015160408a015160608b015160808c015160a08d015160c0909d0151949e939d50919b909a50909850965090945092505050565b60008160001904831182151516156122785761227861215e565b500290565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156122cd5784516001600160a01b0316835293830193918301916001016122a8565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561230357600080fd5b8351925060208401519150604084015190509250925092565b60008282101561232e5761232e61215e565b50039056fea264697066735822122073d697293c2a482072a26f06ee620da5ea37f940a386c682adf5877e8e68edd064736f6c6343000809003360806040526ec097ce7bc90715b34b9f1000000000600955610e10600a5565b5e620f48000600b5566038d7ea4c68000600c5534801561003e57600080fd5b50600080546001600160a01b03191633179055610a88806100606000396000f3fe6080604052600436106100f35760003560e01c8063997664d71161008a578063e2d2e21911610059578063e2d2e2191461027a578063efca2eed14610290578063fbcbc0f1146102a6578063ffd49c841461030557600080fd5b8063997664d7146101ef578063be10b61414610205578063ce7c2ac21461021b578063d0e30db01461027257600080fd5b806328fd3198116100c657806328fd3198146101835780633a98ef39146101a35780634fab0ae8146101b95780638e126944146101cf57600080fd5b80630ca61cb1146100f857806311ce023d1461011a57806314b6ca961461014357806315f7e05e14610163575b600080fd5b34801561010457600080fd5b506101186101133660046108e7565b61031b565b005b34801561012657600080fd5b5061013060095481565b6040519081526020015b60405180910390f35b34801561014f57600080fd5b5061011861015e36600461092f565b610340565b34801561016f57600080fd5b5061011861017e366004610959565b6104bc565b34801561018f57600080fd5b5061013061019e366004610959565b6104c8565b3480156101af57600080fd5b5061013060055481565b3480156101c557600080fd5b50610130600b5481565b3480156101db57600080fd5b506101186101ea366004610974565b610551565b3480156101fb57600080fd5b5061013060065481565b34801561021157600080fd5b50610130600c5481565b34801561022757600080fd5b50610257610236366004610959565b60046020526000908152604090208054600182015460029092015490919083565b6040805193845260208401929092529082015260600161013a565b6101186105b1565b34801561028657600080fd5b5061013060085481565b34801561029c57600080fd5b5061013060075481565b3480156102b257600080fd5b506102c66102c1366004610959565b610607565b604080516001600160a01b0390981688526020880196909652948601939093526060850191909152608084015260a083015260c082015260e00161013a565b34801561031157600080fd5b50610130600a5481565b6000546001600160a01b0316331461033257600080fd5b600a92909255600b55600c55565b6000546001600160a01b0316331461035757600080fd5b6001600160a01b0382166000908152600460205260409020541561037e5761037e8261069f565b600c54811180156103a557506001600160a01b038216600090815260046020526040902054155b1561040a57600180546001600160a01b03841660008181526002602052604081208390558284018455929092527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319169091179055610441565b600c54811115801561043357506001600160a01b03821660009081526004602052604090205415155b15610441576104418261077a565b6001600160a01b03821660009081526004602052604090205460055461047291839161046c9161088d565b906108a0565b6005556001600160a01b0382166000908152600460205260409020819055610499816108ac565b6001600160a01b0390921660009081526004602052604090206001019190915550565b6104c58161069f565b50565b6001600160a01b0381166000908152600460205260408120546104ed57506000919050565b6001600160a01b03821660009081526004602052604081205461050f906108ac565b6001600160a01b03841660009081526004602052604090206001015490915080821161053f575060009392505050565b610549828261088d565b949350505050565b6000546001600160a01b0316331461056857600080fd5b476001600160a01b0382166108fc846105815782610583565b845b6040518115909202916000818181858888f193505050501580156105ab573d6000803e3d6000fd5b50505050565b6000546001600160a01b031633146105c857600080fd5b60065434906105d790826108a0565b600655600554600954610601916105f8916105f290856108cf565b906108db565b600854906108a0565b60085550565b6001600160a01b038116600090815260046020526040812082919081908190819081908190610635886104c8565b6001600160a01b038a16600090815260046020908152604080832060020154600390925290912054600a54929950909750955061067290866109b6565b935042841161068257600061068c565b61068c844261088d565b9250600754915050919395979092949650565b6001600160a01b0381166000908152600460205260409020546106bf5750565b60006106ca826104c8565b90508015610776576007546106df90826108a0565b6007556040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610718573d6000803e3d6000fd5b506001600160a01b0382166000908152600360209081526040808320429055600490915290206002015461074c90826108a0565b6001600160a01b0383166000908152600460205260409020600281019190915554610499906108ac565b5050565b600180546107899082906109ce565b81548110610799576107996109e5565b60009182526020808320909101546001600160a01b03848116845260029092526040909220546001805492909316929181106107d7576107d76109e5565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600291829052604081205460018054919392916108229082906109ce565b81548110610832576108326109e5565b60009182526020808320909101546001600160a01b031683528201929092526040019020556001805480610868576108686109fb565b600082815260209020810160001990810180546001600160a01b031916905501905550565b600061089982846109ce565b9392505050565b600061089982846109b6565b60006108c96009546105f2600854856108cf90919063ffffffff16565b92915050565b60006108998284610a11565b60006108998284610a30565b6000806000606084860312156108fc57600080fd5b505081359360208301359350604090920135919050565b80356001600160a01b038116811461092a57600080fd5b919050565b6000806040838503121561094257600080fd5b61094b83610913565b946020939093013593505050565b60006020828403121561096b57600080fd5b61089982610913565b6000806040838503121561098757600080fd5b8235915061099760208401610913565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b600082198211156109c9576109c96109a0565b500190565b6000828210156109e0576109e06109a0565b500390565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6000816000190483118215151615610a2b57610a2b6109a0565b500290565b600082610a4d57634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122082b3e50ce449df3481b7ba05d38cde42b16a59478055d67e7fa1207833953ff364736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106102295760003560e01c8063715018a6116101235780639e252f00116100ab578063e4748b9e1161006f578063e4748b9e146106d2578063f15cd8bd146106f5578063f2fde38b14610715578063f887ea4014610735578063fb201b1d1461075557600080fd5b80639e252f00146105aa578063a9059cbb146105ca578063ad56c13c146105ea578063dd62ed3e14610649578063e0f3ccf51461068f57600080fd5b806386dcb95e116100f257806386dcb95e146105175780638da5cb5b146105375780638e1269441461055557806395d89b41146105755780639c3182021461058a57600080fd5b8063715018a6146104b6578063778089e6146104cb5780637d1db4a5146104eb57806382247ec01461050157600080fd5b8063313ce567116101b1578063571ac8b011610175578063571ac8b0146104065780635c707f07146104265780635c85974f146104465780636ddd17131461046657806370a082311461048057600080fd5b8063313ce5671461037f57806333f3d6281461039b57806336790a84146103bb5780633eaaf86b146103db5780634e71d92d146103f157600080fd5b80630d075d9c116101f85780630d075d9c146102d25780630f683e90146102f257806318160ddd1461031257806323b872dd146103275780632c1f52161461034757600080fd5b80630445b6671461023557806306fdde031461025e578063095ea7b3146102805780630ca61cb1146102b057600080fd5b3661023057005b600080fd5b34801561024157600080fd5b5061024b601f5481565b6040519081526020015b60405180910390f35b34801561026a57600080fd5b5061027361076a565b6040516102559190611d46565b34801561028c57600080fd5b506102a061029b366004611db0565b6107fc565b6040519015158152602001610255565b3480156102bc57600080fd5b506102d06102cb366004611ddc565b610868565b005b3480156102de57600080fd5b506102d06102ed366004611ddc565b61090c565b3480156102fe57600080fd5b506102d061030d366004611ddc565b61098d565b34801561031e57600080fd5b5060085461024b565b34801561033357600080fd5b506102a0610342366004611e08565b610a0e565b34801561035357600080fd5b50601b54610367906001600160a01b031681565b6040516001600160a01b039091168152602001610255565b34801561038b57600080fd5b5060405160098152602001610255565b3480156103a757600080fd5b506102d06103b6366004611db0565b610ad0565b3480156103c757600080fd5b506102d06103d6366004611e57565b610b7f565b3480156103e757600080fd5b5061024b60085481565b3480156103fd57600080fd5b506102d0610c26565b34801561041257600080fd5b506102a0610421366004611edd565b610c7f565b34801561043257600080fd5b506102d0610441366004611f9d565b610c93565b34801561045257600080fd5b506102d0610461366004612001565b610ce4565b34801561047257600080fd5b50601e546102a09060ff1681565b34801561048c57600080fd5b5061024b61049b366004611edd565b6001600160a01b031660009081526004602052604090205490565b3480156104c257600080fd5b506102d0610d2f565b3480156104d757600080fd5b506102d06104e636600461201a565b610d65565b3480156104f757600080fd5b5061024b600a5481565b34801561050d57600080fd5b5061024b60095481565b34801561052357600080fd5b506102d0610532366004612053565b610ea5565b34801561054357600080fd5b506000546001600160a01b0316610367565b34801561056157600080fd5b506102d0610570366004612081565b610efd565b34801561058157600080fd5b50610273610f60565b34801561059657600080fd5b506102d06105a5366004611e57565b610f6f565b3480156105b657600080fd5b506102d06105c5366004612001565b611010565b3480156105d657600080fd5b506102a06105e5366004611db0565b611067565b3480156105f657600080fd5b5061060a610605366004611edd565b611074565b604080516001600160a01b0390981688526020880196909652948601939093526060850191909152608084015260a083015260c082015260e001610255565b34801561065557600080fd5b5061024b610664366004612053565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561069b57600080fd5b506012546013546014546015546106b29392919084565b604080519485526020850193909352918301526060820152608001610255565b3480156106de57600080fd5b50600e54600f546010546011546106b29392919084565b34801561070157600080fd5b506102d06107103660046120a6565b611115565b34801561072157600080fd5b506102d0610730366004611edd565b61116e565b34801561074157600080fd5b50601954610367906001600160a01b031681565b34801561076157600080fd5b506102d0611209565b606060068054610779906120ee565b80601f01602080910402602001604051908101604052809291908181526020018280546107a5906120ee565b80156107f25780601f106107c7576101008083540402835291602001916107f2565b820191906000526020600020905b8154815290600101906020018083116107d557829003601f168201915b5050505050905090565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108579086815260200190565b60405180910390a350600192915050565b6000546001600160a01b0316331461089b5760405162461bcd60e51b815260040161089290612129565b60405180910390fd5b601b54604051630ca61cb160e01b81526004810185905260248101849052604481018390526001600160a01b0390911690630ca61cb190606401600060405180830381600087803b1580156108ef57600080fd5b505af1158015610903573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146109365760405162461bcd60e51b815260040161089290612129565b60405180608001604052808481526020018381526020018281526020018284866109609190612174565b61096a9190612174565b90528051600e556020810151600f55604081015160105560600151601155505050565b6000546001600160a01b031633146109b75760405162461bcd60e51b815260040161089290612129565b60405180608001604052808481526020018381526020018281526020018284866109e19190612174565b6109eb9190612174565b905280516012556020810151601355604081015160145560600151601555505050565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001914610abb576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600582528381203382529091529190912054610a9691849061125e565b6001600160a01b03851660009081526005602090815260408083203384529091529020555b610ac684848461128a565b90505b9392505050565b6000546001600160a01b03163314610afa5760405162461bcd60e51b815260040161089290612129565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b158015610b4257600080fd5b505af1158015610b56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7a919061218c565b505050565b6000546001600160a01b03163314610ba95760405162461bcd60e51b815260040161089290612129565b60005b60ff8116831115610c205781600c600086868560ff16818110610bd157610bd16121a9565b9050602002016020810190610be69190611edd565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610c18816121bf565b915050610bac565b50505050565b601b54604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b158015610c6b57600080fd5b505af1158015610c20573d6000803e3d6000fd5b6000610c8d826000196107fc565b92915050565b6000546001600160a01b03163314610cbd5760405162461bcd60e51b815260040161089290612129565b8151610cd0906006906020850190611cad565b508051610b7a906007906020840190611cad565b6000546001600160a01b03163314610d0e5760405162461bcd60e51b815260040161089290612129565b6107d0600854610d1e91906121df565b811015610d2a57600080fd5b600a55565b6000546001600160a01b03163314610d595760405162461bcd60e51b815260040161089290612129565b610d63600061158a565b565b6000546001600160a01b03163314610d8f5760405162461bcd60e51b815260040161089290612129565b6001600160a01b0382163014801590610db65750601a546001600160a01b03838116911614155b610dbf57600080fd5b6001600160a01b0382166000908152600d60205260409020805460ff19168215801591909117909155610e5757601b54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca96906044015b600060405180830381600087803b158015610e3b57600080fd5b505af1158015610e4f573d6000803e3d6000fd5b505050505050565b601b546001600160a01b03838116600081815260046020819052604091829020549151630a5b654b60e11b81529081019290925260248201529116906314b6ca9690604401610e21565b5050565b6000546001600160a01b03163314610ecf5760405162461bcd60e51b815260040161089290612129565b601780546001600160a01b039384166001600160a01b03199182161790915560188054929093169116179055565b6000546001600160a01b03163314610f275760405162461bcd60e51b815260040161089290612129565b601b546040516323849a5160e21b8152600481018490526001600160a01b03838116602483015290911690638e12694490604401610e21565b606060078054610779906120ee565b6000546001600160a01b03163314610f995760405162461bcd60e51b815260040161089290612129565b60005b60ff8116831115610c205781600b600086868560ff16818110610fc157610fc16121a9565b9050602002016020810190610fd69190611edd565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611008816121bf565b915050610f9c565b6000546001600160a01b0316331461103a5760405162461bcd60e51b815260040161089290612129565b604051339082156108fc029083906000818181858888f19350505050158015610ea1573d6000803e3d6000fd5b6000610ac933848461128a565b601b5460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283928392169063fbcbc0f19060240160e06040518083038186803b1580156110c657600080fd5b505afa1580156110da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fe9190612201565b959e949d50929b5090995097509550909350915050565b6000546001600160a01b0316331461113f5760405162461bcd60e51b815260040161089290612129565b601e8054601f9490945561ffff1990931693151561ff0019169390931761010091151591909102179055601d55565b6000546001600160a01b031633146111985760405162461bcd60e51b815260040161089290612129565b6001600160a01b0381166111fd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610892565b6112068161158a565b50565b6000546001600160a01b031633146112335760405162461bcd60e51b815260040161089290612129565b601e805462ff0000191662010000179055565b6000610ac9828461225e565b6000610ac982846121df565b600081848411156112825760405162461bcd60e51b81526004016108929190611d46565b505050900390565b60008383601e60029054906101000a900460ff16806112b657506000546001600160a01b038381169116145b806112ce57506000546001600160a01b038281169116145b6113055760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610892565b60205460ff16156113225761131b8686866115da565b9250611581565b61132d8686866116c0565b42601d54601c5461133e9190612174565b116113585761134b611804565b1561135857611358611855565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389166000908152600490915291909120546113aa91869061125e565b6001600160a01b0387166000908152600460205260408120919091556113d1878787611b85565b6001600160a01b0387166000908152600460205260409020549091506113f79082611c95565b6001600160a01b03808816600090815260046020908152604080832094909455918a168152600d909152205460ff1661149c57601b546001600160a01b03888116600081815260046020819052604091829020549151630a5b654b60e11b81529081019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561148957600080fd5b505af192505050801561149a575060015b505b6001600160a01b0386166000908152600d602052604090205460ff1661152e57601b546001600160a01b03878116600081815260046020819052604091829020549151630a5b654b60e11b81529081019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561151b57600080fd5b505af192505050801561152c575060015b505b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161157391815260200190565b60405180910390a360019350505b50509392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260049091529182205461162b91849061125e565b6001600160a01b03808616600090815260046020526040808220939093559085168152205461165a9083611c95565b6001600160a01b0380851660008181526004602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116ae9086815260200190565b60405180910390a35060019392505050565b600a54811115806116e957506001600160a01b0383166000908152600c602052604090205460ff165b6117295760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610892565b6000546001600160a01b0384811691161480159061175057506001600160a01b0382163014155b801561176a57506002546001600160a01b03838116911614155b80156117845750601a546001600160a01b03838116911614155b801561179e57506017546001600160a01b03838116911614155b80156117b857506018546001600160a01b03838116911614155b15610b7a576001600160a01b038216600090815260046020908152604080832054600c9092529091205460ff16806117fb57506009546117f88383612174565b11155b610c2057600080fd5b601a546000906001600160a01b03163314801590611825575060205460ff16155b80156118335750601e5460ff165b80156118505750601f543060009081526004602052604090205410155b905090565b6020805460ff1916600117815530600090815260049091526040902054601e54610100900460ff166118865750601f545b42601c5560408051608081018252601254808252601354602083018190526014549383018490526015546060840181905292939160006118d360026118cd87818b89611246565b90611252565b905060006118e18883611ca1565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061191b5761191b6121a9565b6001600160a01b039283166020918202929092010152600180548351921691839190811061194b5761194b6121a9565b6001600160a01b03928316602091820292909201015260195460405163791ac94760e01b81524792919091169063791ac9479061199590869060009087903090429060040161227d565b600060405180830381600087803b1580156119af57600080fd5b505af11580156119c3573d6000803e3d6000fd5b5050505060006119dc8247611ca190919063ffffffff16565b905060006119f56119ee8a6002611252565b8b90611ca1565b90506000611a0a60026118cd8481878f611246565b90508615611aba5760195460185460405163f305d71960e01b8152306004820152602481018a905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015611a7d57600080fd5b505af1158015611a91573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ab691906122ee565b5050505b6000611aca836118cd868c611246565b9050601b60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015611b1c57600080fd5b505af193505050508015611b2e575060015b5060175460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015611b69573d6000803e3d6000fd5b50506020805460ff191690555050505050505050505050505050565b6001600160a01b0383166000908152600b602052604081205460ff1680611bc457506001600160a01b0383166000908152600b602052604090205460ff165b15611bd0575080610ac9565b601a546000906001600160a01b0386811691161415611bf25750601154611bf7565b506015545b601654600090611c0b906118cd8685611246565b30600090815260046020526040902054909150611c289082611c95565b30600081815260046020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c799085815260200190565b60405180910390a3611c8b8482611ca1565b9695505050505050565b6000610ac98284612174565b6000610ac9828461231c565b828054611cb9906120ee565b90600052602060002090601f016020900481019282611cdb5760008555611d21565b82601f10611cf457805160ff1916838001178555611d21565b82800160010185558215611d21579182015b82811115611d21578251825591602001919060010190611d06565b50611d2d929150611d31565b5090565b5b80821115611d2d5760008155600101611d32565b600060208083528351808285015260005b81811015611d7357858101830151858201604001528201611d57565b81811115611d85576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461120657600080fd5b60008060408385031215611dc357600080fd5b8235611dce81611d9b565b946020939093013593505050565b600080600060608486031215611df157600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215611e1d57600080fd5b8335611e2881611d9b565b92506020840135611e3881611d9b565b929592945050506040919091013590565b801515811461120657600080fd5b600080600060408486031215611e6c57600080fd5b833567ffffffffffffffff80821115611e8457600080fd5b818601915086601f830112611e9857600080fd5b813581811115611ea757600080fd5b8760208260051b8501011115611ebc57600080fd5b60209283019550935050840135611ed281611e49565b809150509250925092565b600060208284031215611eef57600080fd5b8135610ac981611d9b565b634e487b7160e01b600052604160045260246000fd5b600082601f830112611f2157600080fd5b813567ffffffffffffffff80821115611f3c57611f3c611efa565b604051601f8301601f19908116603f01168101908282118183101715611f6457611f64611efa565b81604052838152866020858801011115611f7d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215611fb057600080fd5b823567ffffffffffffffff80821115611fc857600080fd5b611fd486838701611f10565b93506020850135915080821115611fea57600080fd5b50611ff785828601611f10565b9150509250929050565b60006020828403121561201357600080fd5b5035919050565b6000806040838503121561202d57600080fd5b823561203881611d9b565b9150602083013561204881611e49565b809150509250929050565b6000806040838503121561206657600080fd5b823561207181611d9b565b9150602083013561204881611d9b565b6000806040838503121561209457600080fd5b82359150602083013561204881611d9b565b600080600080608085870312156120bc57600080fd5b84356120c781611e49565b93506020850135925060408501356120de81611e49565b9396929550929360600135925050565b600181811c9082168061210257607f821691505b6020821081141561212357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156121875761218761215e565b500190565b60006020828403121561219e57600080fd5b8151610ac981611e49565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff8114156121d6576121d661215e565b60010192915050565b6000826121fc57634e487b7160e01b600052601260045260246000fd5b500490565b600080600080600080600060e0888a03121561221c57600080fd5b875161222781611d9b565b602089015160408a015160608b015160808c015160a08d015160c0909d0151949e939d50919b909a50909850965090945092505050565b60008160001904831182151516156122785761227861215e565b500290565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156122cd5784516001600160a01b0316835293830193918301916001016122a8565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561230357600080fd5b8351925060208401519150604084015190509250925092565b60008282101561232e5761232e61215e565b50039056fea264697066735822122073d697293c2a482072a26f06ee620da5ea37f940a386c682adf5877e8e68edd064736f6c63430008090033

Deployed Bytecode Sourcemap

7178:12089:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8601:50;;;;;;;;;;;;;;;;;;;160:25:9;;;148:2;133:18;8601:50:8;;;;;;;;10349:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10690:216::-;;;;;;;;;;-1:-1:-1;10690:216:8;;;;;:::i;:::-;;:::i;:::-;;;1419:14:9;;1412:22;1394:41;;1382:2;1367:18;10690:216:8;1254:187:9;17827:262:8;;;;;;;;;;-1:-1:-1;17827:262:8;;;;;:::i;:::-;;:::i;:::-;;18659:299;;;;;;;;;;-1:-1:-1;18659:299:8;;;;;:::i;:::-;;:::i;18963:301::-;;;;;;;;;;-1:-1:-1;18963:301:8;;;;;:::i;:::-;;:::i;10086:88::-;;;;;;;;;;-1:-1:-1;10159:12:8;;10086:88;;11202:364;;;;;;;;;;-1:-1:-1;11202:364:8;;;;;:::i;:::-;;:::i;8382:55::-;;;;;;;;;;-1:-1:-1;8382:55:8;;;;-1:-1:-1;;;;;8382:55:8;;;;;;-1:-1:-1;;;;;2433:32:9;;;2415:51;;2403:2;2388:18;8382:55:8;2228:244:9;10180:71:8;;;;;;;;;;-1:-1:-1;10180:71:8;;7764:1;2619:36:9;;2607:2;2592:18;10180:71:8;2477:184:9;17296:136:8;;;;;;;;;;-1:-1:-1;17296:136:8;;;;;:::i;:::-;;:::i;16881:208::-;;;;;;;;;;-1:-1:-1;16881:208:8;;;;;:::i;:::-;;:::i;7772:62::-;;;;;;;;;;;;;;;;18567:84;;;;;;;;;;;;;:::i;10914:116::-;;;;;;;;;;-1:-1:-1;10914:116:8;;;;;:::i;:::-;;:::i;9929:145::-;;;;;;;;;;-1:-1:-1;9929:145:8;;;;;:::i;:::-;;:::i;18101:144::-;;;;;;;;;;-1:-1:-1;18101:144:8;;;;;:::i;:::-;;:::i;8504:30::-;;;;;;;;;;-1:-1:-1;8504:30:8;;;;;;;;10437:105;;;;;;;;;;-1:-1:-1;10437:105:8;;;;;:::i;:::-;-1:-1:-1;;;;;10521:18:8;10503:7;10521:18;;;:9;:18;;;;;;;10437:105;1714:103:6;;;;;;;;;;;;;:::i;16303:352:8:-;;;;;;;;;;-1:-1:-1;16303:352:8;;;;;:::i;:::-;;:::i;7905:58::-;;;;;;;;;;;;;;;;7841:56;;;;;;;;;;;;;;;;17101:187;;;;;;;;;;-1:-1:-1;17101:187:8;;;;;:::i;:::-;;:::i;1063:87:6:-;;;;;;;;;;-1:-1:-1;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;1063:87;;12931:148:8;;;;;;;;;;-1:-1:-1;12931:148:8;;;;;:::i;:::-;;:::i;10257:86::-;;;;;;;;;;;;;:::i;16663:206::-;;;;;;;;;;-1:-1:-1;16663:206:8;;;;;:::i;:::-;;:::i;17440:110::-;;;;;;;;;;-1:-1:-1;17440:110:8;;;;;:::i;:::-;;:::i;11038:156::-;;;;;;;;;;-1:-1:-1;11038:156:8;;;;;:::i;:::-;;:::i;18257:298::-;;;;;;;;;;-1:-1:-1;18257:298:8;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;7026:32:9;;;7008:51;;7090:2;7075:18;;7068:34;;;;7118:18;;;7111:34;;;;7176:2;7161:18;;7154:34;;;;7219:3;7204:19;;7197:35;7046:3;7248:19;;7241:35;7307:3;7292:19;;7285:35;6995:3;6980:19;18257:298:8;6693:633:9;10548:133:8;;;;;;;;;;-1:-1:-1;10548:133:8;;;;;:::i;:::-;-1:-1:-1;;;;;10650:19:8;;;10632:7;10650:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;10548:133;8137:22;;;;;;;;;;-1:-1:-1;8137:22:8;;;;;;;;;;;;;;;;;;;7562:25:9;;;7618:2;7603:18;;7596:34;;;;7646:18;;;7639:34;7704:2;7689:18;;7682:34;7549:3;7534:19;8137:22:8;7331:391:9;8112:21:8;;;;;;;;;;-1:-1:-1;8112:21:8;;;;;;;;;;;;;;;17558:261;;;;;;;;;;-1:-1:-1;17558:261:8;;;;;:::i;:::-;;:::i;1972:201:6:-;;;;;;;;;;-1:-1:-1;1972:201:6;;;;;:::i;:::-;;:::i;8322:32:8:-;;;;;;;;;;-1:-1:-1;8322:32:8;;;;-1:-1:-1;;;;;8322:32:8;;;11574:72;;;;;;;;;;;;;:::i;10349:82::-;10383:13;10417:5;10410:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10349:82;:::o;10690:216::-;10794:10;10765:4;10782:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;10782:32:8;;;;;;;;;;:41;;;10839:37;10765:4;;10782:32;;10839:37;;;;10817:6;160:25:9;;148:2;133:18;;14:177;10839:37:8;;;;;;;;-1:-1:-1;10894:4:8;10690:216;;;;:::o;17827:262::-;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;;;;;;;;;17978:15:8::1;::::0;:103:::1;::::0;-1:-1:-1;;;17978:103:8;;::::1;::::0;::::1;9427:25:9::0;;;9468:18;;;9461:34;;;9511:18;;;9504:34;;;-1:-1:-1;;;;;17978:15:8;;::::1;::::0;:39:::1;::::0;9400:18:9;;17978:103:8::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17827:262:::0;;;:::o;18659:299::-;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;18780:173:8::1;;;;;;;;18808:14;18780:173;;;;18841:12;18780:173;;;;18873:13;18780:173;;;;18934:13;18919:12;18902:14;:29;;;;:::i;:::-;:45;;;;:::i;:::-;18780:173:::0;;18770:183;;:7:::1;:183:::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;;::::0;;;-1:-1:-1;;;18659:299:8:o;18963:301::-;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;19086:173:8::1;;;;;;;;19114:14;19086:173;;;;19147:12;19086:173;;;;19179:13;19086:173;;;;19240:13;19225:12;19208:14;:29;;;;:::i;:::-;:45;;;;:::i;:::-;19086:173:::0;;19075:184;;:8:::1;:184:::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;;::::0;;;-1:-1:-1;;;18963:301:8:o;11202:364::-;-1:-1:-1;;;;;11322:19:8;;11302:4;11322:19;;;:11;:19;;;;;;;;11342:10;11322:31;;;;;;;;-1:-1:-1;;11322:46:8;11319:180;;11418:69;;;;;;;;;;;-1:-1:-1;;;11418:69:8;;;;;;;;-1:-1:-1;;;;;11418:19:8;;-1:-1:-1;11418:19:8;;;:11;:19;;;;;11438:10;11418:31;;;;;;;;;;:69;;11454:6;;11418:35;:69::i;:::-;-1:-1:-1;;;;;11384:19:8;;;;;;:11;:19;;;;;;;;11404:10;11384:31;;;;;;;:103;11319:180;11518:40;11532:6;11540:9;11551:6;11518:13;:40::i;:::-;11511:47;;11202:364;;;;;;:::o;17296:136::-;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;17380:44:8::1;::::0;-1:-1:-1;;;17380:44:8;;17404:10:::1;17380:44;::::0;::::1;9988:51:9::0;10055:18;;;10048:34;;;-1:-1:-1;;;;;17380:23:8;::::1;::::0;::::1;::::0;9961:18:9;;17380:44:8::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17296:136:::0;;:::o;16881:208::-;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;16985:7:8::1;16981:101;16998:17;::::0;::::1;::::0;-1:-1:-1;16981:101:8::1;;;17064:6;17037:13;:24;17051:6;;17058:1;17051:9;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17037:24:8::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;17037:24:8;:33;;-1:-1:-1;;17037:33:8::1;::::0;::::1;;::::0;;;::::1;::::0;;17017:3;::::1;::::0;::::1;:::i;:::-;;;;16981:101;;;;16881:208:::0;;;:::o;18567:84::-;18602:15;;:41;;-1:-1:-1;;;18602:41:8;;18632:10;18602:41;;;2415:51:9;-1:-1:-1;;;;;18602:15:8;;;;:29;;2388:18:9;;18602:41:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10914:116;10969:4;10993:29;11001:7;-1:-1:-1;;10993:7:8;:29::i;:::-;10986:36;10914:116;-1:-1:-1;;10914:116:8:o;9929:145::-;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;10021:15:8;;::::1;::::0;:5:::1;::::0;:15:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;10047:19:8;;::::1;::::0;:7:::1;::::0;:19:::1;::::0;::::1;::::0;::::1;:::i;18101:144::-:0;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;18200:4:8::1;18185:12;;:19;;;;:::i;:::-;18175:6;:29;;18167:38;;;::::0;::::1;;18216:12;:21:::0;18101:144::o;1714:103:6:-;1109:7;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;1779:30:::1;1806:1;1779:18;:30::i;:::-;1714:103::o:0;16303:352:8:-;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;-1:-1:-1;;;;;16398:23:8;::::1;16416:4;16398:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;16435:4:8::1;::::0;-1:-1:-1;;;;;16425:14:8;;::::1;16435:4:::0;::::1;16425:14;;16398:41;16390:50;;;::::0;::::1;;-1:-1:-1::0;;;;;16451:23:8;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;16451:32:8::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;16494:154:::1;;16519:15;::::0;:35:::1;::::0;-1:-1:-1;;;16519:35:8;;-1:-1:-1;;;;;10006:32:9;;;16519:35:8::1;::::0;::::1;9988:51:9::0;16519:15:8::1;10055:18:9::0;;;10048:34;16519:15:8;;::::1;::::0;:24:::1;::::0;9961:18:9;;16519:35:8::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16303:352:::0;;:::o;16494:154::-:1;16585:15;::::0;-1:-1:-1;;;;;16618:17:8;;::::1;16585:15;16618:17:::0;;;:9:::1;:17;::::0;;;;;;;;;16585:51;;-1:-1:-1;;;16585:51:8;;;;::::1;9988::9::0;;;;10055:18;;;10048:34;16585:15:8;::::1;::::0;:24:::1;::::0;9961:18:9;;16585:51:8::1;9814:274:9::0;16494:154:8::1;16303:352:::0;;:::o;17101:187::-;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;17203:14:8::1;:32:::0;;-1:-1:-1;;;;;17203:32:8;;::::1;-1:-1:-1::0;;;;;;17203:32:8;;::::1;;::::0;;;17246:15:::1;:34:::0;;;;;::::1;::::0;::::1;;::::0;;17101:187::o;12931:148::-;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;13021:15:8::1;::::0;:50:::1;::::0;-1:-1:-1;;;13021:50:8;;::::1;::::0;::::1;11338:25:9::0;;;-1:-1:-1;;;;;11399:32:9;;;11379:18;;;11372:60;13021:15:8;;::::1;::::0;:34:::1;::::0;11311:18:9;;13021:50:8::1;11164:274:9::0;10257:86:8;10293:13;10327:7;10320:14;;;;;:::i;16663:206::-;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;16768:7:8::1;16764:98;16781:17;::::0;::::1;::::0;-1:-1:-1;16764:98:8::1;;;16844:6;16820:10;:21;16831:6;;16838:1;16831:9;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16820:21:8::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;16820:21:8;:30;;-1:-1:-1;;16820:30:8::1;::::0;::::1;;::::0;;;::::1;::::0;;16800:3;::::1;::::0;::::1;:::i;:::-;;;;16764:98;;17440:110:::0;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;17505:37:8::1;::::0;17513:10:::1;::::0;17505:37;::::1;;;::::0;17534:7;;17505:37:::1;::::0;;;17534:7;17513:10;17505:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;11038:156:::0;11118:4;11142:44;11156:10;11168:9;11179:6;11142:13;:44::i;18257:298::-;18512:15;;:35;;-1:-1:-1;;;18512:35:8;;-1:-1:-1;;;;;2433:32:9;;;18512:35:8;;;2415:51:9;18353:7:8;;;;;;;;;;;;;;18512:15;;:26;;2388:18:9;;18512:35:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18505:42;;;;-1:-1:-1;18505:42:8;;-1:-1:-1;18505:42:8;;-1:-1:-1;18505:42:8;-1:-1:-1;18505:42:8;-1:-1:-1;18505:42:8;;-1:-1:-1;18257:298:8;-1:-1:-1;;18257:298:8:o;17558:261::-;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;17687:11:8::1;:22:::0;;17720:13:::1;:23:::0;;;;-1:-1:-1;;17754:26:8;;;17687:22;::::1;;-1:-1:-1::0;;17754:26:8;;;;;17687:22:::1;17754:26:::0;::::1;;::::0;;;::::1;;::::0;;17791:8:::1;:20:::0;17558:261::o;1972:201:6:-;1109:7;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;-1:-1:-1;;;;;2061:22:6;::::1;2053:73;;;::::0;-1:-1:-1;;;2053:73:6;;12271:2:9;2053:73:6::1;::::0;::::1;12253:21:9::0;12310:2;12290:18;;;12283:30;12349:34;12329:18;;;12322:62;-1:-1:-1;;;12400:18:9;;;12393:36;12446:19;;2053:73:6::1;12069:402:9::0;2053:73:6::1;2137:28;2156:8;2137:18;:28::i;:::-;1972:201:::0;:::o;11574:72:8:-;1109:7:6;1136:6;-1:-1:-1;;;;;1136:6:6;736:10:1;1283:23:6;1275:68;;;;-1:-1:-1;;;1275:68:6;;;;;;;:::i;:::-;11625:6:8::1;:13:::0;;-1:-1:-1;;11625:13:8::1;::::0;::::1;::::0;;11574:72::o;3571:98:7:-;3629:7;3656:5;3660:1;3656;:5;:::i;3970:98::-;4028:7;4055:5;4059:1;4055;:5;:::i;5112:240::-;5232:7;5293:12;5285:6;;;;5277:29;;;;-1:-1:-1;;;5277:29:7;;;;;;;;:::i;:::-;-1:-1:-1;;;5328:5:7;;;5112:240::o;11654:927:8:-;11770:4;11742:6;11750:9;8813:6;;;;;;;;;;;:25;;;-1:-1:-1;1109:7:6;1136:6;-1:-1:-1;;;;;8823:15:8;;;1136:6:6;;8823:15:8;8813:25;:42;;;-1:-1:-1;1109:7:6;1136:6;-1:-1:-1;;;;;8842:13:8;;;1136:6:6;;8842:13:8;8813:42;8805:63;;;;-1:-1:-1;;;8805:63:8;;12851:2:9;8805:63:8;;;12833:21:9;12890:1;12870:18;;;12863:29;-1:-1:-1;;;12908:18:9;;;12901:38;12956:18;;8805:63:8;12649:331:9;8805:63:8;11790:6:::1;::::0;::::1;;11787:63;;;11806:41;11821:6;11829:9;11840:6;11806:14;:41::i;:::-;11799:48;;;;11787:63;11870:39;11883:6;11891:9;11902:6;11870:12;:39::i;:::-;11948:15;11936:8;;11925;;:19;;;;:::i;:::-;:38;11922:110;;11982:9;:7;:9::i;:::-;11979:41;;;12010:10;:8;:10::i;:::-;12064:53;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;12064:53:8::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;12064:17:8;::::1;-1:-1:-1::0;12064:17:8;;;:9:::1;:17:::0;;;;;;;;:53:::1;::::0;12086:6;;12064:21:::1;:53::i;:::-;-1:-1:-1::0;;;;;12044:17:8;::::1;;::::0;;;:9:::1;:17;::::0;;;;:73;;;;12153:34:::1;12054:6:::0;12169:9;12180:6;12153:7:::1;:34::i;:::-;-1:-1:-1::0;;;;;12221:20:8;::::1;;::::0;;;:9:::1;:20;::::0;;;;;12128:59;;-1:-1:-1;12221:40:8::1;::::0;12128:59;12221:24:::1;:40::i;:::-;-1:-1:-1::0;;;;;12198:20:8;;::::1;;::::0;;;:9:::1;:20;::::0;;;;;;;:63;;;;12278:23;;::::1;::::0;;:15:::1;:23:::0;;;;;::::1;;12274:99;;12308:15;::::0;-1:-1:-1;;;;;12341:17:8;;::::1;12308:15;12341:17:::0;;;:9:::1;:17;::::0;;;;;;;;;12308:51;;-1:-1:-1;;;12308:51:8;;;;::::1;9988::9::0;;;;10055:18;;;10048:34;12308:15:8;::::1;::::0;:24:::1;::::0;9961:18:9;;12308:51:8::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;12304:67:::0;::::1;-1:-1:-1::0;;;;;12387:26:8;::::1;;::::0;;;:15:::1;:26;::::0;;;;;::::1;;12383:108;;12420:15;::::0;-1:-1:-1;;;;;12456:20:8;;::::1;12420:15;12456:20:::0;;;:9:::1;:20;::::0;;;;;;;;;12420:57;;-1:-1:-1;;;12420:57:8;;;;::::1;9988:51:9::0;;;;10055:18;;;10048:34;12420:15:8;::::1;::::0;:24:::1;::::0;9961:18:9;;12420:57:8::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;12416:73:::0;::::1;12525:9;-1:-1:-1::0;;;;;12508:43:8::1;12517:6;-1:-1:-1::0;;;;;12508:43:8::1;;12536:14;12508:43;;;;160:25:9::0;;148:2;133:18;;14:177;12508:43:8::1;;;;;;;;12569:4;12562:11;;;8879:1;11654:927:::0;;;;;;;:::o;2333:191:6:-;2407:16;2426:6;;-1:-1:-1;;;;;2443:17:6;;;-1:-1:-1;;;;;;2443:17:6;;;;;;2476:40;;2426:6;;;;;;;2476:40;;2407:16;2476:40;2396:128;2333:191;:::o;12593:330:8:-;12723:53;;;;;;;;;;;-1:-1:-1;;;12723:53:8;;;;;;;;-1:-1:-1;;;;;12723:17:8;;12686:4;12723:17;;;:9;:17;;;;;;;:53;;12745:6;;12723:21;:53::i;:::-;-1:-1:-1;;;;;12703:17:8;;;;;;;:9;:17;;;;;;:73;;;;12810:20;;;;;;;:32;;12835:6;12810:24;:32::i;:::-;-1:-1:-1;;;;;12787:20:8;;;;;;;:9;:20;;;;;;;:55;;;;12858:35;;;;;;;;;;12886:6;160:25:9;;148:2;133:18;;14:177;12858:35:8;;;;;;;;-1:-1:-1;12911:4:8;12593:330;;;;;:::o;13087:533::-;13203:12;;13193:6;:22;;:47;;;-1:-1:-1;;;;;;13219:21:8;;;;;;:13;:21;;;;;;;;13193:47;13185:77;;;;-1:-1:-1;;;13185:77:8;;13187:2:9;13185:77:8;;;13169:21:9;13226:2;13206:18;;;13199:30;-1:-1:-1;;;13245:18:9;;;13238:47;13302:18;;13185:77:8;12985:341:9;13185:77:8;1109:7:6;1136:6;-1:-1:-1;;;;;13287:17:8;;;1136:6:6;;13287:17:8;;;;:47;;-1:-1:-1;;;;;;13308:26:8;;13329:4;13308:26;;13287:47;:78;;;;-1:-1:-1;13360:4:8;;-1:-1:-1;;;;;13339:26:8;;;13360:4;;13339:26;;13287:78;:99;;;;-1:-1:-1;13382:4:8;;-1:-1:-1;;;;;13369:17:8;;;13382:4;;13369:17;;13287:99;:130;;;;-1:-1:-1;13403:14:8;;-1:-1:-1;;;;;13390:27:8;;;13403:14;;13390:27;;13287:130;:162;;;;-1:-1:-1;13434:15:8;;-1:-1:-1;;;;;13421:28:8;;;13434:15;;13421:28;;13287:162;13283:330;;;-1:-1:-1;;;;;10521:18:8;;13465:22;10521:18;;;:9;:18;;;;;;;;;13533:13;:24;;;;;;;;;;:67;;-1:-1:-1;13589:10:8;;13562:23;13579:6;13562:14;:23;:::i;:::-;:37;;13533:67;13525:76;;;;;14251:190;14331:4;;14293;;-1:-1:-1;;;;;14331:4:8;14317:10;:18;;;;:38;;-1:-1:-1;14349:6:8;;;;14348:7;14317:38;:62;;;;-1:-1:-1;14368:11:8;;;;14317:62;:116;;;;-1:-1:-1;14420:13:8;;14410:4;14392:24;;;;:9;:24;;;;;;:41;;14317:116;14310:123;;14251:190;:::o;14449:1846::-;8713:6;:13;;-1:-1:-1;;8713:13:8;8722:4;8713:13;;;14537:4:::1;8713:6:::0;14519:24;;;:9:::1;:24:::0;;;;;;;14558:11:::1;::::0;8713:13;14558:11;::::1;8713:13:::0;14558:11:::1;14554:56;;-1:-1:-1::0;14597:13:8::1;::::0;14554:56:::1;14634:15;14623:8;:26:::0;14660:28:::1;::::0;;::::1;::::0;::::1;::::0;;14680:8:::1;14660:28:::0;;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;:17:::1;14934:56;14660:28;14934:49;14660:28:::0;14934:49;:10;14660:28;14934:14:::1;:35::i;:::-;:39:::0;::::1;:49::i;:56::-;14908:82:::0;-1:-1:-1;15001:20:8::1;15024:31;:10:::0;14908:82;15024:14:::1;:31::i;:::-;15092:16;::::0;;15106:1:::1;15092:16:::0;;;;;::::1;::::0;;15001:54;;-1:-1:-1;15068:21:8::1;::::0;15092:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;15092:16:8::1;15068:40;;15137:4;15119;15124:1;15119:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15119:23:8;;::::1;:7;::::0;;::::1;::::0;;;;;:23;15163:4:::1;::::0;;15153:7;;15163:4;::::1;::::0;15153;;15163;15153:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;15153:14:8;;::::1;:7;::::0;;::::1;::::0;;;;;:14;15238:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;15238:188:8;;15204:21:::1;::::0;15238:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;15310:12;;15180:21:::1;::::0;15353:4;;15380::::1;::::0;15400:15:::1;::::0;15238:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15439:17;15459:40;15485:13;15459:21;:25;;:40;;;;:::i;:::-;15439:60:::0;-1:-1:-1;15512:19:8::1;15534:40;15547:26;:19:::0;15571:1:::1;15547:23;:26::i;:::-;15534:8:::0;;:12:::1;:40::i;:::-;15512:62:::0;-1:-1:-1;15595:26:8::1;15624:58;15680:1;15624:51;15512:62:::0;15624:51;:9;15638:19;15624:13:::1;:34::i;:58::-;15595:87:::0;-1:-1:-1;15696:19:8;;15693:288:::1;;15731:6;::::0;15905:15:::1;::::0;15731:238:::1;::::0;-1:-1:-1;;;15731:238:8;;15807:4:::1;15731:238;::::0;::::1;14657:34:9::0;14707:18;;;14700:34;;;15731:6:8::1;14750:18:9::0;;;14743:34;;;14793:18;;;14786:34;-1:-1:-1;;;;;15905:15:8;;::::1;14836:19:9::0;;;14829:44;15939:15:8::1;14889:19:9::0;;;14882:35;15731:6:8;::::1;::::0;:22:::1;::::0;15761:18;;14591:19:9;;15731:238:8::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;15693:288;16001:27;16031:45;16064:11:::0;16031:28:::1;:9:::0;16045:13;16031::::1;:28::i;:45::-;16001:75;;16091:15;;;;;;;;;-1:-1:-1::0;;;;;16091:15:8::1;-1:-1:-1::0;;;;;16091:23:8::1;;16122:19;16091:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;16087:69:::0;16244:14:::1;::::0;16236:51:::1;::::0;16204:21:::1;::::0;-1:-1:-1;;;;;16244:14:8::1;::::0;16236:51;::::1;;;::::0;16204:21;;16176:25:::1;16236:51:::0;16176:25;16236:51;16204:21;16244:14;16236:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;8731:6:8;:14;;-1:-1:-1;;8731:14:8;;;-1:-1:-1;;;;;;;;;;;;;;14449:1846:8:o;13628:615::-;-1:-1:-1;;;;;13738:18:8;;13714:7;13738:18;;;:10;:18;;;;;;;;;:43;;-1:-1:-1;;;;;;13760:21:8;;;;;;:10;:21;;;;;;;;13738:43;13734:76;;;-1:-1:-1;13804:6:8;13797:13;;13734:76;13871:4;;13831:16;;-1:-1:-1;;;;;13861:14:8;;;13871:4;;13861:14;13858:116;;;-1:-1:-1;13901:16:8;;13858:116;;;-1:-1:-1;13957:17:8;;13858:116;14044:14;;13999:17;;14019:40;;:20;:6;14030:8;14019:10;:20::i;:40::-;14115:4;14097:24;;;;:9;:24;;;;;;13999:60;;-1:-1:-1;14097:39:8;;13999:60;14097:28;:39::i;:::-;14088:4;14070:24;;;;:9;:24;;;;;;;:66;;;;14152:42;;-1:-1:-1;;;;;14152:42:8;;;;;;;14184:9;160:25:9;;148:2;133:18;;14:177;14152:42:8;;;;;;;;14214:21;:6;14225:9;14214:10;:21::i;:::-;14207:28;13628:615;-1:-1:-1;;;;;;13628:615:8:o;2833:98:7:-;2891:7;2918:5;2922:1;2918;:5;:::i;3214:98::-;3272:7;3299:5;3303:1;3299;:5;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;196:597:9;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;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:9;756:15;-1:-1:-1;;752:29:9;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:9:o;798:131::-;-1:-1:-1;;;;;873:31:9;;863:42;;853:70;;919:1;916;909:12;934:315;1002:6;1010;1063:2;1051:9;1042:7;1038:23;1034:32;1031:52;;;1079:1;1076;1069:12;1031:52;1118:9;1105:23;1137:31;1162:5;1137:31;:::i;:::-;1187:5;1239:2;1224:18;;;;1211:32;;-1:-1:-1;;;934:315:9:o;1446:316::-;1523:6;1531;1539;1592:2;1580:9;1571:7;1567:23;1563:32;1560:52;;;1608:1;1605;1598:12;1560:52;-1:-1:-1;;1631:23:9;;;1701:2;1686:18;;1673:32;;-1:-1:-1;1752:2:9;1737:18;;;1724:32;;1446:316;-1:-1:-1;1446:316:9:o;1767:456::-;1844:6;1852;1860;1913:2;1901:9;1892:7;1888:23;1884:32;1881:52;;;1929:1;1926;1919:12;1881:52;1968:9;1955:23;1987:31;2012:5;1987:31;:::i;:::-;2037:5;-1:-1:-1;2094:2:9;2079:18;;2066:32;2107:33;2066:32;2107:33;:::i;:::-;1767:456;;2159:7;;-1:-1:-1;;;2213:2:9;2198:18;;;;2185:32;;1767:456::o;2666:118::-;2752:5;2745:13;2738:21;2731:5;2728:32;2718:60;;2774:1;2771;2764:12;2789:750;2881:6;2889;2897;2950:2;2938:9;2929:7;2925:23;2921:32;2918:52;;;2966:1;2963;2956:12;2918:52;3006:9;2993:23;3035:18;3076:2;3068:6;3065:14;3062:34;;;3092:1;3089;3082:12;3062:34;3130:6;3119:9;3115:22;3105:32;;3175:7;3168:4;3164:2;3160:13;3156:27;3146:55;;3197:1;3194;3187:12;3146:55;3237:2;3224:16;3263:2;3255:6;3252:14;3249:34;;;3279:1;3276;3269:12;3249:34;3334:7;3327:4;3317:6;3314:1;3310:14;3306:2;3302:23;3298:34;3295:47;3292:67;;;3355:1;3352;3345:12;3292:67;3386:4;3378:13;;;;-1:-1:-1;3410:6:9;-1:-1:-1;;3451:20:9;;3438:34;3481:28;3438:34;3481:28;:::i;:::-;3528:5;3518:15;;;2789:750;;;;;:::o;3544:247::-;3603:6;3656:2;3644:9;3635:7;3631:23;3627:32;3624:52;;;3672:1;3669;3662:12;3624:52;3711:9;3698:23;3730:31;3755:5;3730:31;:::i;3796:127::-;3857:10;3852:3;3848:20;3845:1;3838:31;3888:4;3885:1;3878:15;3912:4;3909:1;3902:15;3928:719;3971:5;4024:3;4017:4;4009:6;4005:17;4001:27;3991:55;;4042:1;4039;4032:12;3991:55;4078:6;4065:20;4104:18;4141:2;4137;4134:10;4131:36;;;4147:18;;:::i;:::-;4222:2;4216:9;4190:2;4276:13;;-1:-1:-1;;4272:22:9;;;4296:2;4268:31;4264:40;4252:53;;;4320:18;;;4340:22;;;4317:46;4314:72;;;4366:18;;:::i;:::-;4406:10;4402:2;4395:22;4441:2;4433:6;4426:18;4487:3;4480:4;4475:2;4467:6;4463:15;4459:26;4456:35;4453:55;;;4504:1;4501;4494:12;4453:55;4568:2;4561:4;4553:6;4549:17;4542:4;4534:6;4530:17;4517:54;4615:1;4608:4;4603:2;4595:6;4591:15;4587:26;4580:37;4635:6;4626:15;;;;;;3928:719;;;;:::o;4652:543::-;4740:6;4748;4801:2;4789:9;4780:7;4776:23;4772:32;4769:52;;;4817:1;4814;4807:12;4769:52;4857:9;4844:23;4886:18;4927:2;4919:6;4916:14;4913:34;;;4943:1;4940;4933:12;4913:34;4966:50;5008:7;4999:6;4988:9;4984:22;4966:50;:::i;:::-;4956:60;;5069:2;5058:9;5054:18;5041:32;5025:48;;5098:2;5088:8;5085:16;5082:36;;;5114:1;5111;5104:12;5082:36;;5137:52;5181:7;5170:8;5159:9;5155:24;5137:52;:::i;:::-;5127:62;;;4652:543;;;;;:::o;5200:180::-;5259:6;5312:2;5300:9;5291:7;5287:23;5283:32;5280:52;;;5328:1;5325;5318:12;5280:52;-1:-1:-1;5351:23:9;;5200:180;-1:-1:-1;5200:180:9:o;5385:382::-;5450:6;5458;5511:2;5499:9;5490:7;5486:23;5482:32;5479:52;;;5527:1;5524;5517:12;5479:52;5566:9;5553:23;5585:31;5610:5;5585:31;:::i;:::-;5635:5;-1:-1:-1;5692:2:9;5677:18;;5664:32;5705:30;5664:32;5705:30;:::i;:::-;5754:7;5744:17;;;5385:382;;;;;:::o;5772:388::-;5840:6;5848;5901:2;5889:9;5880:7;5876:23;5872:32;5869:52;;;5917:1;5914;5907:12;5869:52;5956:9;5943:23;5975:31;6000:5;5975:31;:::i;:::-;6025:5;-1:-1:-1;6082:2:9;6067:18;;6054:32;6095:33;6054:32;6095:33;:::i;6373:315::-;6441:6;6449;6502:2;6490:9;6481:7;6477:23;6473:32;6470:52;;;6518:1;6515;6508:12;6470:52;6554:9;6541:23;6531:33;;6614:2;6603:9;6599:18;6586:32;6627:31;6652:5;6627:31;:::i;7727:513::-;7807:6;7815;7823;7831;7884:3;7872:9;7863:7;7859:23;7855:33;7852:53;;;7901:1;7898;7891:12;7852:53;7940:9;7927:23;7959:28;7981:5;7959:28;:::i;:::-;8006:5;-1:-1:-1;8058:2:9;8043:18;;8030:32;;-1:-1:-1;8114:2:9;8099:18;;8086:32;8127:30;8086:32;8127:30;:::i;:::-;7727:513;;;;-1:-1:-1;8176:7:9;;8230:2;8215:18;8202:32;;-1:-1:-1;;7727:513:9:o;8479:380::-;8558:1;8554:12;;;;8601;;;8622:61;;8676:4;8668:6;8664:17;8654:27;;8622:61;8729:2;8721:6;8718:14;8698:18;8695:38;8692:161;;;8775:10;8770:3;8766:20;8763:1;8756:31;8810:4;8807:1;8800:15;8838:4;8835:1;8828:15;8692:161;;8479:380;;;:::o;8864:356::-;9066:2;9048:21;;;9085:18;;;9078:30;9144:34;9139:2;9124:18;;9117:62;9211:2;9196:18;;8864:356::o;9549:127::-;9610:10;9605:3;9601:20;9598:1;9591:31;9641:4;9638:1;9631:15;9665:4;9662:1;9655:15;9681:128;9721:3;9752:1;9748:6;9745:1;9742:13;9739:39;;;9758:18;;:::i;:::-;-1:-1:-1;9794:9:9;;9681:128::o;10093:245::-;10160:6;10213:2;10201:9;10192:7;10188:23;10184:32;10181:52;;;10229:1;10226;10219:12;10181:52;10261:9;10255:16;10280:28;10302:5;10280:28;:::i;10343:127::-;10404:10;10399:3;10395:20;10392:1;10385:31;10435:4;10432:1;10425:15;10459:4;10456:1;10449:15;10475:175;10512:3;10556:4;10549:5;10545:16;10585:4;10576:7;10573:17;10570:43;;;10593:18;;:::i;:::-;10642:1;10629:15;;10475:175;-1:-1:-1;;10475:175:9:o;10655:217::-;10695:1;10721;10711:132;;10765:10;10760:3;10756:20;10753:1;10746:31;10800:4;10797:1;10790:15;10828:4;10825:1;10818:15;10711:132;-1:-1:-1;10857:9:9;;10655:217::o;11443:621::-;11567:6;11575;11583;11591;11599;11607;11615;11668:3;11656:9;11647:7;11643:23;11639:33;11636:53;;;11685:1;11682;11675:12;11636:53;11717:9;11711:16;11736:31;11761:5;11736:31;:::i;:::-;11831:2;11816:18;;11810:25;11875:2;11860:18;;11854:25;11919:2;11904:18;;11898:25;11963:3;11948:19;;11942:26;12008:3;11993:19;;11987:26;12053:3;12038:19;;;12032:26;11786:5;;11810:25;;-1:-1:-1;11854:25:9;;11898;;-1:-1:-1;11942:26:9;;-1:-1:-1;11987:26:9;-1:-1:-1;12032:26:9;;-1:-1:-1;11443:621:9;-1:-1:-1;;;11443:621:9:o;12476:168::-;12516:7;12582:1;12578;12574:6;12570:14;12567:1;12564:21;12559:1;12552:9;12545:17;12541:45;12538:71;;;12589:18;;:::i;:::-;-1:-1:-1;12629:9:9;;12476:168::o;13331:980::-;13593:4;13641:3;13630:9;13626:19;13672:6;13661:9;13654:25;13698:2;13736:6;13731:2;13720:9;13716:18;13709:34;13779:3;13774:2;13763:9;13759:18;13752:31;13803:6;13838;13832:13;13869:6;13861;13854:22;13907:3;13896:9;13892:19;13885:26;;13946:2;13938:6;13934:15;13920:29;;13967:1;13977:195;13991:6;13988:1;13985:13;13977:195;;;14056:13;;-1:-1:-1;;;;;14052:39:9;14040:52;;14147:15;;;;14112:12;;;;14088:1;14006:9;13977:195;;;-1:-1:-1;;;;;;;14228:32:9;;;;14223:2;14208:18;;14201:60;-1:-1:-1;;;14292:3:9;14277:19;14270:35;14189:3;13331:980;-1:-1:-1;;;13331:980:9:o;14928:306::-;15016:6;15024;15032;15085:2;15073:9;15064:7;15060:23;15056:32;15053:52;;;15101:1;15098;15091:12;15053:52;15130:9;15124:16;15114:26;;15180:2;15169:9;15165:18;15159:25;15149:35;;15224:2;15213:9;15209:18;15203:25;15193:35;;14928:306;;;;;:::o;15239:125::-;15279:4;15307:1;15304;15301:8;15298:34;;;15312:18;;:::i;:::-;-1:-1:-1;15349:9:9;;15239:125::o

Swarm Source

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