ETH Price: $3,274.20 (-4.15%)
Gas: 10 Gwei

Token

Anti Jeet Race (AJRACE)
 

Overview

Max Total Supply

1,000,000,000 AJRACE

Holders

77

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
wabs.eth
Balance
165,142.128468725287218676 AJRACE

Value
$0.00
0xEb3BA847938ebe91c66f79A20062BA0f24f31920
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:
AntiJeetRace

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

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

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

/**
 * @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;
    }
}

/**
 * @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);
    }
}

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

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

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



// pragma solidity >=0.6.2;

interface IUniSwapRouter02 is IUniSwapRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}


/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract AntiJeetRace is Context, Ownable, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    mapping (address => bool) private _isExcludedFromAntiWhale;

    bool public antiWhaleEnabled = true;
    bool public maxSellEnabled = true;
    bool private inSwapAndLiquify;
    mapping (address => bool) public _isExcludedFromFee;

    IUniSwapRouter02 public uniswapRouter; // uniswap router assiged using address
    address public uniswapPair;

    uint256 private _totalSupply = 1000000000 *10**18;
    uint256 private _maxTokensPerAddress = 20000000 * 10**18; // Max number of tokens that an address can hold
    uint256 private _maxSellAmount = 5000000 * 10**18; // Max number of tokens that an address can hold
    uint256 private _buyTax = 20;
    uint256 private _sellTax = 20;
    uint256 private _taxThreshold = 2500000 * 10**18;

    string private _name = "Anti Jeet Race";
    string private _symbol = "AJRACE";

    address private _burnAddress = 0x000000000000000000000000000000000000dEaD;

    address private _marketingAddress = payable(0x8c6D6AB188291c7976f12161e91F43B77c571f9f);
    address private _teamAddress = payable(0xC7F9E4D6D5C247ef9195A16Ecc40846ACE390f97);
    address private _rewardAddress = 0x894Cc3424A67D4E798057eA36dbB95848E7B3917;

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    } // modifier to after each successfull swapandliquify disable the swapandliquify

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor() {
        address account = _msgSender();

        IUniSwapRouter02 _uniswapRouter = IUniSwapRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapRouter = _uniswapRouter;
         // Create a uniswap pair for this new token
        uniswapPair = IUniSwapFactory(_uniswapRouter.factory())
            .createPair(address(this), _uniswapRouter.WETH()); 

        _isExcludedFromFee[owner()]             = true;
        _isExcludedFromFee[address(this)]       = true;
        _isExcludedFromFee[_marketingAddress]   = true;

        //Exclude's below addresses from per account tokens limit
        _isExcludedFromAntiWhale[owner()]                   = true;
        _isExcludedFromAntiWhale[address(this)]             = true;
        _isExcludedFromAntiWhale[uniswapPair]               = true;
        _isExcludedFromAntiWhale[_teamAddress]              = true;
        _isExcludedFromAntiWhale[_rewardAddress]            = true;
        _isExcludedFromAntiWhale[_marketingAddress]         = true;
        _isExcludedFromAntiWhale[address(_uniswapRouter)]   = true;
        
        _balances[account] += 900000000 *10**18;
        _balances[0xCE465ff9d88C3Eb1F458D680c3d265e4f4b930d0] += 10000000 *10**18;
        _balances[0xAe4882DE619C882d7645FB9D8Be52dac38657aaf] += 10000000 *10**18;
        _balances[0x34Cf7Ac942A815DDEDdF1319ce91dEa69Af46dCb] += 10000000 *10**18;
        _balances[0xc9c8914C83357cd756a547541084232356c75856] += 10000000 *10**18;
        _balances[0xFb2c1fb5e6a3E1E4300B31bf42028857817C102b] += 10000000 *10**18;
        _balances[0x6efecbC6D76375e2A69c32Cd8ca4dFd866e7838c] += 10000000 *10**18;
        _balances[0x53dDdbc27e1d909487e291120e779a4C43B8B557] += 10000000 *10**18;
        _balances[0x69848B875C9Ad270BE85517f4c49E5bBE1632682] += 10000000 *10**18;
        _balances[0xEb3BA847938ebe91c66f79A20062BA0f24f31920] += 10000000 *10**18;
        _balances[0xe1b0A86C70a8E5b197B2aea46818C99C6cD5AA95] += 10000000 *10**18;
        
        
        emit Transfer(address(0), account, 900000000 *10**18);
        emit Transfer(address(0), 0xCE465ff9d88C3Eb1F458D680c3d265e4f4b930d0, 10000000 *10**18);
        emit Transfer(address(0), 0xAe4882DE619C882d7645FB9D8Be52dac38657aaf, 10000000 *10**18);
        emit Transfer(address(0), 0x34Cf7Ac942A815DDEDdF1319ce91dEa69Af46dCb, 10000000 *10**18);
        emit Transfer(address(0), 0xc9c8914C83357cd756a547541084232356c75856, 10000000 *10**18);
        emit Transfer(address(0), 0xFb2c1fb5e6a3E1E4300B31bf42028857817C102b, 10000000 *10**18);
        emit Transfer(address(0), 0x6efecbC6D76375e2A69c32Cd8ca4dFd866e7838c, 10000000 *10**18);
        emit Transfer(address(0), 0x53dDdbc27e1d909487e291120e779a4C43B8B557, 10000000 *10**18);
        emit Transfer(address(0), 0x69848B875C9Ad270BE85517f4c49E5bBE1632682, 10000000 *10**18);
        emit Transfer(address(0), 0xEb3BA847938ebe91c66f79A20062BA0f24f31920, 10000000 *10**18);
        emit Transfer(address(0), 0xe1b0A86C70a8E5b197B2aea46818C99C6cD5AA95, 10000000 *10**18);
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        uint256 tax = 0;
        uint256 buyTax = _buyTax;
        uint256 sellTax = _sellTax;
        if(sender != owner() && recipient != owner()){
            if(sender  == uniswapPair && !inSwapAndLiquify){
                tax = amount/100*buyTax;
                if(tax != 0){
                    amount -= tax;
                    _balances[address(this)] += tax;
                    emit Transfer(sender, address(this), tax);
                }
            }
            else if(recipient  == uniswapPair && !inSwapAndLiquify){
                tax = amount/100*sellTax;
                if(tax != 0){
                    amount -= tax;
                    _balances[address(this)] += tax/2;
                    emit Transfer(sender, address(this), tax/2);
                    _balances[_rewardAddress] += (tax/2);
                    emit Transfer(sender, _rewardAddress, tax/2);
                    uint256 threshold = _taxThreshold;
                    if(_balances[address(this)] >= threshold){
                        uint256 teamTax = sellTax/2;
                        swapTokensForEth(_marketingAddress, (threshold/(buyTax+teamTax)*buyTax));
                        swapTokensForEth(_teamAddress, (threshold/(buyTax+teamTax)*teamTax));
                    }
                }
            }
        }
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`.
     *
     * Emits a {Transfer} event with `to` set to the burn address.
     *
     * Requirements:
     *
     * - `account` must have at least `amount` tokens.
     */
    function _burn(uint256 amount) external virtual {
        address account = _msgSender();
        require(account != address(0), "ERC20: burn from the zero address");

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

        emit Transfer(account, _burnAddress, amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function distributeReward(address[] memory wallets, uint256[] memory amounts) public {
        require(wallets.length == amounts.length, "Not all Wallets have amount");
        
        address sender = _msgSender();
        require(sender != address(0), "ERC20: transfer from the zero address");
        for(uint256 i=0; i<wallets.length; i++){    
            address recipient = wallets[i];
            uint256 amount = amounts[i];
            require(recipient != address(0), "ERC20: transfer to the zero address");
            uint256 senderBalance = _balances[sender];
            require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
            unchecked {
                _balances[sender] = senderBalance - amount;
            }
            _balances[recipient] += amount;

            emit Transfer(sender, recipient, amount);
        }
    }

    /**  
     * @dev exclude an address from per address tokens limit
     */
    function excludeFromAntiWhale(address account) public onlyOwner {
        _isExcludedFromAntiWhale[account] = true;
    }

    /**  
     * @dev include an address in per address tokens limit
     */
    function includeInAntiWhale(address account) public onlyOwner {
        _isExcludedFromAntiWhale[account] = false;
    }

    /**  
     * @dev return's true if an address is not included in antiwhale
     */
    function isExcludedFromAntiWhale(address account) public view returns(bool){
        return _isExcludedFromAntiWhale[account];
    }

    /**  
     * @dev set's Marketing address
     */
    function setMarketingAddress(address payable marketingAddress) external onlyOwner {
        _marketingAddress = marketingAddress;
    }

    /**  
     * @dev get's Marketing address
     */
    function getMarketingAddress() external view returns(address) {
        return _marketingAddress;
    }

    /**  
     * @dev set's team address
     */
    function setTeamAddress(address payable teamAddress) external onlyOwner {
        _teamAddress = teamAddress;
    }

    /**  
     * @dev get's Team address
     */
    function getTeamAddress() external view returns(address) {
        return _teamAddress;
    }

    /**  
     * @dev set's Reward address
     */
    function setRewardAddress(address rewardAddress) external onlyOwner {
        _rewardAddress = rewardAddress;
    }

    /**  
     * @dev get's Reward address
     */
    function getRewardAddress() external view returns(address) {
        return _rewardAddress;
    }

    /**  
     * @dev set's max amount of tokens
     * that an address can hold
     */
    function setMaxTokenPerAddress(uint256 maxTokens) external onlyOwner {
        _maxTokensPerAddress = (maxTokens * 10**18);
    }

    /**  
     * @dev get's max amount of tokens
     * that an address can hold
     */
    function getMaxTokenPerAddress() external view returns(uint256) {
        return _maxTokensPerAddress;
    }

    /**  
     * @dev set's max amount of tokens
     * that an address can sell
     */
    function setMaxSellAmount(uint256 maxTokens) external onlyOwner {
        _maxSellAmount = (maxTokens * 10**18);
    }

    /**  
     * @dev get's max amount of tokens
     * that an address can sell
     */
    function getMaxSellAmount() external view returns(uint256) {
        return _maxSellAmount;
    }

    /**  
     * @dev set's max amount of tax tokens
     * that should be collected before sell
     */
    function setTaxThreshold(uint256 maxTokens) external onlyOwner {
        _taxThreshold = (maxTokens * 10**18);
    }

    /**  
     * @dev get's max amount of tax tokens
     * that should be collected before sell
     */
    function getTaxThreshold() external view returns(uint256) {
        return _taxThreshold;
    }

    /**  
     * @dev exclude an address from fee
     */
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    /**  
     * @dev include an address for fee
     */
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    /**  
     * @dev set's Sell Tax
     */
    function setSellTax(uint256 sellTax) external onlyOwner {
        _sellTax = sellTax;
    }

    /**  
     * @dev get's Sell Tax
     */
    function getSellTax() external view returns(uint256) {
        return _sellTax;
    }

    /**  
     * @dev set's Buy Tax
     */
    function setBuyTax(uint256 buyTax) external onlyOwner {
        _buyTax = buyTax;
    }

    /**  
     * @dev get's Buy Tax
     */
    function getBuyTax() external view returns(uint256) {
        return _buyTax;
    }

    /**  
     * @dev enable/disable antiwhale
     */
    function flipAntiWhale() external onlyOwner {
        antiWhaleEnabled = !antiWhaleEnabled;
    }

    /**  
     * @dev enable/disable max Sell Limit
     */
    function flipMaxSell() external onlyOwner {
        maxSellEnabled = !maxSellEnabled;
    }

    /**  
     * @dev swap's exact amount of tokens for ETH if swapandliquify is enabled
     */
    function swapTokensForEth(address recipient, uint256 tokenAmount) private lockTheSwap{
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapRouter.WETH();

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

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        if(from != owner() && to != owner()){
            if(antiWhaleEnabled) {
                require(_isExcludedFromAntiWhale[to] || balanceOf(to) + amount <= _maxTokensPerAddress,
                    "Max tokens limit for this account exceeded. Or try lower amount");
            }
            if(maxSellEnabled && to == uniswapPair) {
                require(amount <= _maxSellAmount,
                    "Amount Exceeds Allowed Sell Amount");
            }
        }

    }

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiWhaleEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"distributeReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromAntiWhale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipAntiWhale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipMaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMarketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTokenPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTeamAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInAntiWhale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromAntiWhale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"name":"setMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"name":"setMaxTokenPerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rewardAddress","type":"address"}],"name":"setRewardAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTax","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"name":"setTaxThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"teamAddress","type":"address"}],"name":"setTeamAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniSwapRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

6004805461ffff19166101011790556b033b2e3c9fd0803ce80000006008556a108b2a2c280290940000006009556a0422ca8b0a00a425000000600a556014600b819055600c556a0211654585005212800000600d5560c0604052600e60808181526d416e7469204a656574205261636560901b60a05262000082908262000b88565b50604080518082019091526006815265414a5241434560d01b6020820152600f90620000af908262000b88565b50601080546001600160a01b031990811661dead17909155601180548216738c6d6ab188291c7976f12161e91f43b77c571f9f17905560128054821673c7f9e4d6d5c247ef9195a16ecc40846ace390f971790556013805490911673894cc3424a67d4e798057ea36dbb95848e7b39171790553480156200012f57600080fd5b506200013b3362000a93565b600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa158015620001a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cb919062000c54565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000219573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023f919062000c54565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200028d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b3919062000c54565b600780546001600160a01b0319166001600160a01b039283161781556000805483168152600560209081526040808320805460ff1990811660019081179092553080865283862080548316841790556011805489168752848720805484168517905586548916875260038652848720805484168517905590865283862080548316841790559554871685528285208054821683179055601254871685528285208054821683179055601354871685528285208054821683179055945486168452818420805486168217905586861684528184208054909516811790945593861682529190915290812080546b02e87669c308736a040000009290620003ba90849062000c86565b909155505073ce465ff9d88c3eb1f458d680c3d265e4f4b930d0600090815260016020527fb984e5e59c579f0347bf307f394515688e296a6cb46abaad01344c991f80199a80546a084595161401484a00000092906200041c90849062000c86565b909155505073ae4882de619c882d7645fb9d8be52dac38657aaf600090815260016020527f8138f7e04128716f9d6d0a9b7a9b17fb5cb6267442eb93475e451d0342a81cd380546a084595161401484a00000092906200047e90849062000c86565b90915550507334cf7ac942a815ddeddf1319ce91dea69af46dcb600090815260016020527f8c9488e981ee2bbdf8b8500d2b0fd3b2338b35c5ba761845815b3fa605e0746f80546a084595161401484a0000009290620004e090849062000c86565b909155505073c9c8914c83357cd756a547541084232356c75856600090815260016020527f9bb40c04907158196e5cc481038fc9c37f4173aca425fa8002b9fe8552020d3180546a084595161401484a00000092906200054290849062000c86565b909155505073fb2c1fb5e6a3e1e4300b31bf42028857817c102b600090815260016020527fb02fa433444eb119000bfea9a3a6c2beb8af4c4d39ddae17552ceba3ce3b06de80546a084595161401484a0000009290620005a490849062000c86565b9091555050736efecbc6d76375e2a69c32cd8ca4dfd866e7838c600090815260016020527f88f2fc866f0cf6c8f79a3f4d9f7caf052e5943f7d6fed488aa7817f7381344ea80546a084595161401484a00000092906200060690849062000c86565b90915550507353dddbc27e1d909487e291120e779a4c43b8b557600090815260016020527f93b157ba08e0ca352f646bcecda56c2a6e2ee9b99be2de78a1da8ea9958ad84b80546a084595161401484a00000092906200066890849062000c86565b90915550507369848b875c9ad270be85517f4c49e5bbe1632682600090815260016020527fa2614a843eed7f77dad8b419f32b1013a21d02c29cafca55ad628b6fbf49da1880546a084595161401484a0000009290620006ca90849062000c86565b909155505073eb3ba847938ebe91c66f79a20062ba0f24f31920600090815260016020527f331250076213d897bd1f9e8f42d0ba39ff800adadb26478b21c51c11ee050cbc80546a084595161401484a00000092906200072c90849062000c86565b909155505073e1b0a86c70a8e5b197b2aea46818c99c6cd5aa95600090815260016020527f201d1a88c94622ac6f8abbf0fbbbc1f8d7fb6daa1d009fea31d33395268bf2d480546a084595161401484a00000092906200078e90849062000c86565b90915550506040516b02e87669c308736a0400000081526001600160a01b0383169060009060008051602062002a2d8339815191529060200160405180910390a36040516a084595161401484a000000815273ce465ff9d88c3eb1f458d680c3d265e4f4b930d09060009060008051602062002a2d8339815191529060200160405180910390a36040516a084595161401484a000000815273ae4882de619c882d7645fb9d8be52dac38657aaf9060009060008051602062002a2d8339815191529060200160405180910390a36040516a084595161401484a00000081527334cf7ac942a815ddeddf1319ce91dea69af46dcb9060009060008051602062002a2d8339815191529060200160405180910390a36040516a084595161401484a000000815273c9c8914c83357cd756a547541084232356c758569060009060008051602062002a2d8339815191529060200160405180910390a36040516a084595161401484a000000815273fb2c1fb5e6a3e1e4300b31bf42028857817c102b9060009060008051602062002a2d8339815191529060200160405180910390a36040516a084595161401484a0000008152736efecbc6d76375e2a69c32cd8ca4dfd866e7838c9060009060008051602062002a2d8339815191529060200160405180910390a36040516a084595161401484a00000081527353dddbc27e1d909487e291120e779a4c43b8b5579060009060008051602062002a2d8339815191529060200160405180910390a36040516a084595161401484a00000081527369848b875c9ad270be85517f4c49e5bbe16326829060009060008051602062002a2d8339815191529060200160405180910390a36040516a084595161401484a000000815273eb3ba847938ebe91c66f79a20062ba0f24f319209060009060008051602062002a2d8339815191529060200160405180910390a36040516a084595161401484a000000815273e1b0a86c70a8e5b197b2aea46818c99c6cd5aa959060009060008051602062002a2d8339815191529060200160405180910390a3505062000cae565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000b0e57607f821691505b60208210810362000b2f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000b8357600081815260208120601f850160051c8101602086101562000b5e5750805b601f850160051c820191505b8181101562000b7f5782815560010162000b6a565b5050505b505050565b81516001600160401b0381111562000ba45762000ba462000ae3565b62000bbc8162000bb5845462000af9565b8462000b35565b602080601f83116001811462000bf4576000841562000bdb5750858301515b600019600386901b1c1916600185901b17855562000b7f565b600085815260208120601f198616915b8281101562000c255788860151825594840194600190910190840162000c04565b508582101562000c445787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000c6757600080fd5b81516001600160a01b038116811462000c7f57600080fd5b9392505050565b8082018082111562000ca857634e487b7160e01b600052601160045260246000fd5b92915050565b611d6f8062000cbe6000396000f3fe608060405234801561001057600080fd5b50600436106102745760003560e01c8063822b096e11610151578063bf323719116100c3578063e63d2d5b11610087578063e63d2d5b14610581578063e67444ac14610589578063e99c9d0914610591578063ea2f0b37146105a4578063f19d9bca146105b7578063f2fde38b146105c957600080fd5b8063bf323719146104fe578063bf9321fc14610511578063c816841b14610522578063dc1052e214610535578063dd62ed3e1461054857600080fd5b806395d89b411161011557806395d89b41146104ad5780639b1f9e74146104b55780639e1458c6146104c8578063a457c2d7146104d0578063a9059cbb146104e3578063b0bc85de146104f657600080fd5b8063822b096e146104525780638cd09d50146104655780638da5cb5b14610478578063906e9dd0146104895780639183faaa1461049c57600080fd5b806339509351116101ea5780635e686aaa116101ae5780635e686aaa146103d05780636690864e146103d857806370a08231146103eb578063715018a614610414578063735de9f71461041c578063768dc7101461042f57600080fd5b80633950935114610377578063437823ec1461038a5780634c6580481461039d57806357d87f0d146103b05780635e00e679146103bd57600080fd5b8063182d326e1161023c578063182d326e146102e957806323b872dd1461030e578063252d723a1461032157806325a6cc0614610329578063269f534c1461033c578063313ce5671461036857600080fd5b8063041f5dc41461027957806306fdde031461028357806307a212be146102a1578063095ea7b3146102b457806318160ddd146102d7575b600080fd5b6102816105dc565b005b61028b61062c565b60405161029891906117cc565b60405180910390f35b6102816102af36600461181a565b6106be565b6102c76102c2366004611848565b610700565b6040519015158152602001610298565b6008545b604051908152602001610298565b6012546001600160a01b03165b6040516001600160a01b039091168152602001610298565b6102c761031c366004611874565b610717565b600b546102db565b61028161033736600461181a565b6107c1565b6102c761034a3660046118b5565b6001600160a01b031660009081526003602052604090205460ff1690565b60405160128152602001610298565b6102c7610385366004611848565b610803565b6102816103983660046118b5565b61083f565b6102816103ab3660046118b5565b61088d565b6004546102c79060ff1681565b6102816103cb3660046118b5565b6108db565b6009546102db565b6102816103e63660046118b5565b610927565b6102db6103f93660046118b5565b6001600160a01b031660009081526001602052604090205490565b610281610973565b6006546102f6906001600160a01b031681565b6102c761043d3660046118b5565b60056020526000908152604090205460ff1681565b6102816104603660046119af565b6109a9565b61028161047336600461181a565b610b60565b6000546001600160a01b03166102f6565b6102816104973660046118b5565b610b8f565b6011546001600160a01b03166102f6565b61028b610bdb565b6102816104c336600461181a565b610bea565b610281610d18565b6102c76104de366004611848565b610d56565b6102c76104f1366004611848565b610def565b600c546102db565b61028161050c3660046118b5565b610dfc565b6013546001600160a01b03166102f6565b6007546102f6906001600160a01b031681565b61028161054336600461181a565b610e47565b6102db610556366004611a71565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b600a546102db565b600d546102db565b61028161059f36600461181a565b610e76565b6102816105b23660046118b5565b610eb8565b6004546102c790610100900460ff1681565b6102816105d73660046118b5565b610f03565b6000546001600160a01b0316331461060f5760405162461bcd60e51b815260040161060690611aaa565b60405180910390fd5b6004805461ff001981166101009182900460ff1615909102179055565b6060600e805461063b90611adf565b80601f016020809104026020016040519081016040528092919081815260200182805461066790611adf565b80156106b45780601f10610689576101008083540402835291602001916106b4565b820191906000526020600020905b81548152906001019060200180831161069757829003601f168201915b5050505050905090565b6000546001600160a01b031633146106e85760405162461bcd60e51b815260040161060690611aaa565b6106fa81670de0b6b3a7640000611b2f565b600d5550565b600061070d338484610f9e565b5060015b92915050565b60006107248484846110ba565b6001600160a01b0384166000908152600260209081526040808320338452909152902054828110156107a95760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610606565b6107b68533858403610f9e565b506001949350505050565b6000546001600160a01b031633146107eb5760405162461bcd60e51b815260040161060690611aaa565b6107fd81670de0b6b3a7640000611b2f565b60095550565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909161070d91859061083a908690611b46565b610f9e565b6000546001600160a01b031633146108695760405162461bcd60e51b815260040161060690611aaa565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000546001600160a01b031633146108b75760405162461bcd60e51b815260040161060690611aaa565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b6000546001600160a01b031633146109055760405162461bcd60e51b815260040161060690611aaa565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146109515760405162461bcd60e51b815260040161060690611aaa565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461099d5760405162461bcd60e51b815260040161060690611aaa565b6109a76000611479565b565b80518251146109fa5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420616c6c2057616c6c657473206861766520616d6f756e7400000000006044820152606401610606565b3380610a185760405162461bcd60e51b815260040161060690611b59565b60005b8351811015610b5a576000848281518110610a3857610a38611b9e565b602002602001015190506000848381518110610a5657610a56611b9e565b6020026020010151905060006001600160a01b0316826001600160a01b031603610a925760405162461bcd60e51b815260040161060690611bb4565b6001600160a01b03841660009081526001602052604090205481811015610acb5760405162461bcd60e51b815260040161060690611bf7565b6001600160a01b03808616600090815260016020526040808220858503905591851681529081208054849290610b02908490611b46565b92505081905550826001600160a01b0316856001600160a01b0316600080516020611d1a83398151915284604051610b3c91815260200190565b60405180910390a35050508080610b5290611c3d565b915050610a1b565b50505050565b6000546001600160a01b03163314610b8a5760405162461bcd60e51b815260040161060690611aaa565b600c55565b6000546001600160a01b03163314610bb95760405162461bcd60e51b815260040161060690611aaa565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6060600f805461063b90611adf565b3380610c425760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610606565b6001600160a01b03811660009081526001602052604090205482811015610cb65760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610606565b6001600160a01b03808316600081815260016020526040808220878603905560108054851683529181902080548801905590549051921691600080516020611d1a83398151915290610d0b9087815260200190565b60405180910390a3505050565b6000546001600160a01b03163314610d425760405162461bcd60e51b815260040161060690611aaa565b6004805460ff19811660ff90911615179055565b3360009081526002602090815260408083206001600160a01b038616845290915281205482811015610dd85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610606565b610de53385858403610f9e565b5060019392505050565b600061070d3384846110ba565b6000546001600160a01b03163314610e265760405162461bcd60e51b815260040161060690611aaa565b6001600160a01b03166000908152600360205260409020805460ff19169055565b6000546001600160a01b03163314610e715760405162461bcd60e51b815260040161060690611aaa565b600b55565b6000546001600160a01b03163314610ea05760405162461bcd60e51b815260040161060690611aaa565b610eb281670de0b6b3a7640000611b2f565b600a5550565b6000546001600160a01b03163314610ee25760405162461bcd60e51b815260040161060690611aaa565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b03163314610f2d5760405162461bcd60e51b815260040161060690611aaa565b6001600160a01b038116610f925760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610606565b610f9b81611479565b50565b6001600160a01b0383166110005760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610606565b6001600160a01b0382166110615760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610606565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610d0b565b6001600160a01b0383166110e05760405162461bcd60e51b815260040161060690611b59565b6001600160a01b0382166111065760405162461bcd60e51b815260040161060690611bb4565b6111118383836114c9565b6001600160a01b0383166000908152600160205260409020548181101561114a5760405162461bcd60e51b815260040161060690611bf7565b600b54600c54600091906111666000546001600160a01b031690565b6001600160a01b0316876001600160a01b03161415801561119557506000546001600160a01b03878116911614155b156113f7576007546001600160a01b0388811691161480156111c0575060045462010000900460ff16155b1561124a57816111d1606487611c56565b6111db9190611b2f565b92508215611245576111ed8386611c78565b30600090815260016020526040812080549297508592909190611211908490611b46565b909155505060405183815230906001600160a01b03891690600080516020611d1a8339815191529060200160405180910390a35b6113f7565b6007546001600160a01b038781169116148015611270575060045462010000900460ff16155b156113f75780611281606487611c56565b61128b9190611b2f565b925082156113f75761129d8386611c78565b94506112aa600284611c56565b30600090815260016020526040812080549091906112c9908490611b46565b909155503090506001600160a01b038816600080516020611d1a8339815191526112f4600287611c56565b60405190815260200160405180910390a3611310600284611c56565b6013546001600160a01b03166000908152600160205260408120805490919061133a908490611b46565b90915550506013546001600160a01b03908116908816600080516020611d1a83398151915261136a600287611c56565b60405190815260200160405180910390a3600d543060009081526001602052604090205481116113f55760006113a1600284611c56565b6011549091506113d8906001600160a01b0316856113bf8482611b46565b6113c99086611c56565b6113d39190611b2f565b611654565b6012546113f3906001600160a01b0316826113bf8188611b46565b505b505b6001600160a01b0380881660009081526001602052604080822088880390559188168152908120805487929061142e908490611b46565b92505081905550856001600160a01b0316876001600160a01b0316600080516020611d1a8339815191528760405161146891815260200190565b60405180910390a350505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b038481169116148015906114f557506000546001600160a01b03838116911614155b1561164f5760045460ff16156115c9576001600160a01b03821660009081526003602052604090205460ff168061155757506009548161154a846001600160a01b031660009081526001602052604090205490565b6115549190611b46565b11155b6115c95760405162461bcd60e51b815260206004820152603f60248201527f4d617820746f6b656e73206c696d697420666f722074686973206163636f756e60448201527f742065786365656465642e204f7220747279206c6f77657220616d6f756e74006064820152608401610606565b600454610100900460ff1680156115ed57506007546001600160a01b038381169116145b1561164f57600a5481111561164f5760405162461bcd60e51b815260206004820152602260248201527f416d6f756e74204578636565647320416c6c6f7765642053656c6c20416d6f756044820152611b9d60f21b6064820152608401610606565b505050565b6004805462ff0000191662010000179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061169a5761169a611b9e565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156116f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117179190611c8b565b8160018151811061172a5761172a611b9e565b6001600160a01b0392831660209182029290920101526006546117509130911684610f9e565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611789908590600090869089904290600401611ca8565b600060405180830381600087803b1580156117a357600080fd5b505af11580156117b7573d6000803e3d6000fd5b50506004805462ff0000191690555050505050565b600060208083528351808285015260005b818110156117f9578581018301518582016040015282016117dd565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561182c57600080fd5b5035919050565b6001600160a01b0381168114610f9b57600080fd5b6000806040838503121561185b57600080fd5b823561186681611833565b946020939093013593505050565b60008060006060848603121561188957600080fd5b833561189481611833565b925060208401356118a481611833565b929592945050506040919091013590565b6000602082840312156118c757600080fd5b81356118d281611833565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611918576119186118d9565b604052919050565b600067ffffffffffffffff82111561193a5761193a6118d9565b5060051b60200190565b600082601f83011261195557600080fd5b8135602061196a61196583611920565b6118ef565b82815260059290921b8401810191818101908684111561198957600080fd5b8286015b848110156119a4578035835291830191830161198d565b509695505050505050565b600080604083850312156119c257600080fd5b823567ffffffffffffffff808211156119da57600080fd5b818501915085601f8301126119ee57600080fd5b813560206119fe61196583611920565b82815260059290921b84018101918181019089841115611a1d57600080fd5b948201945b83861015611a44578535611a3581611833565b82529482019490820190611a22565b96505086013592505080821115611a5a57600080fd5b50611a6785828601611944565b9150509250929050565b60008060408385031215611a8457600080fd5b8235611a8f81611833565b91506020830135611a9f81611833565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680611af357607f821691505b602082108103611b1357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761071157610711611b19565b8082018082111561071157610711611b19565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b600060018201611c4f57611c4f611b19565b5060010190565b600082611c7357634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561071157610711611b19565b600060208284031215611c9d57600080fd5b81516118d281611833565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611cf85784516001600160a01b031683529383019391830191600101611cd3565b50506001600160a01b0396909616606085015250505060800152939250505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122025187ef28142068fdd36b616da3522915f8a649d60b738a75d7839e32c97cf1a64736f6c63430008120033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102745760003560e01c8063822b096e11610151578063bf323719116100c3578063e63d2d5b11610087578063e63d2d5b14610581578063e67444ac14610589578063e99c9d0914610591578063ea2f0b37146105a4578063f19d9bca146105b7578063f2fde38b146105c957600080fd5b8063bf323719146104fe578063bf9321fc14610511578063c816841b14610522578063dc1052e214610535578063dd62ed3e1461054857600080fd5b806395d89b411161011557806395d89b41146104ad5780639b1f9e74146104b55780639e1458c6146104c8578063a457c2d7146104d0578063a9059cbb146104e3578063b0bc85de146104f657600080fd5b8063822b096e146104525780638cd09d50146104655780638da5cb5b14610478578063906e9dd0146104895780639183faaa1461049c57600080fd5b806339509351116101ea5780635e686aaa116101ae5780635e686aaa146103d05780636690864e146103d857806370a08231146103eb578063715018a614610414578063735de9f71461041c578063768dc7101461042f57600080fd5b80633950935114610377578063437823ec1461038a5780634c6580481461039d57806357d87f0d146103b05780635e00e679146103bd57600080fd5b8063182d326e1161023c578063182d326e146102e957806323b872dd1461030e578063252d723a1461032157806325a6cc0614610329578063269f534c1461033c578063313ce5671461036857600080fd5b8063041f5dc41461027957806306fdde031461028357806307a212be146102a1578063095ea7b3146102b457806318160ddd146102d7575b600080fd5b6102816105dc565b005b61028b61062c565b60405161029891906117cc565b60405180910390f35b6102816102af36600461181a565b6106be565b6102c76102c2366004611848565b610700565b6040519015158152602001610298565b6008545b604051908152602001610298565b6012546001600160a01b03165b6040516001600160a01b039091168152602001610298565b6102c761031c366004611874565b610717565b600b546102db565b61028161033736600461181a565b6107c1565b6102c761034a3660046118b5565b6001600160a01b031660009081526003602052604090205460ff1690565b60405160128152602001610298565b6102c7610385366004611848565b610803565b6102816103983660046118b5565b61083f565b6102816103ab3660046118b5565b61088d565b6004546102c79060ff1681565b6102816103cb3660046118b5565b6108db565b6009546102db565b6102816103e63660046118b5565b610927565b6102db6103f93660046118b5565b6001600160a01b031660009081526001602052604090205490565b610281610973565b6006546102f6906001600160a01b031681565b6102c761043d3660046118b5565b60056020526000908152604090205460ff1681565b6102816104603660046119af565b6109a9565b61028161047336600461181a565b610b60565b6000546001600160a01b03166102f6565b6102816104973660046118b5565b610b8f565b6011546001600160a01b03166102f6565b61028b610bdb565b6102816104c336600461181a565b610bea565b610281610d18565b6102c76104de366004611848565b610d56565b6102c76104f1366004611848565b610def565b600c546102db565b61028161050c3660046118b5565b610dfc565b6013546001600160a01b03166102f6565b6007546102f6906001600160a01b031681565b61028161054336600461181a565b610e47565b6102db610556366004611a71565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b600a546102db565b600d546102db565b61028161059f36600461181a565b610e76565b6102816105b23660046118b5565b610eb8565b6004546102c790610100900460ff1681565b6102816105d73660046118b5565b610f03565b6000546001600160a01b0316331461060f5760405162461bcd60e51b815260040161060690611aaa565b60405180910390fd5b6004805461ff001981166101009182900460ff1615909102179055565b6060600e805461063b90611adf565b80601f016020809104026020016040519081016040528092919081815260200182805461066790611adf565b80156106b45780601f10610689576101008083540402835291602001916106b4565b820191906000526020600020905b81548152906001019060200180831161069757829003601f168201915b5050505050905090565b6000546001600160a01b031633146106e85760405162461bcd60e51b815260040161060690611aaa565b6106fa81670de0b6b3a7640000611b2f565b600d5550565b600061070d338484610f9e565b5060015b92915050565b60006107248484846110ba565b6001600160a01b0384166000908152600260209081526040808320338452909152902054828110156107a95760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610606565b6107b68533858403610f9e565b506001949350505050565b6000546001600160a01b031633146107eb5760405162461bcd60e51b815260040161060690611aaa565b6107fd81670de0b6b3a7640000611b2f565b60095550565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909161070d91859061083a908690611b46565b610f9e565b6000546001600160a01b031633146108695760405162461bcd60e51b815260040161060690611aaa565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000546001600160a01b031633146108b75760405162461bcd60e51b815260040161060690611aaa565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b6000546001600160a01b031633146109055760405162461bcd60e51b815260040161060690611aaa565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146109515760405162461bcd60e51b815260040161060690611aaa565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461099d5760405162461bcd60e51b815260040161060690611aaa565b6109a76000611479565b565b80518251146109fa5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420616c6c2057616c6c657473206861766520616d6f756e7400000000006044820152606401610606565b3380610a185760405162461bcd60e51b815260040161060690611b59565b60005b8351811015610b5a576000848281518110610a3857610a38611b9e565b602002602001015190506000848381518110610a5657610a56611b9e565b6020026020010151905060006001600160a01b0316826001600160a01b031603610a925760405162461bcd60e51b815260040161060690611bb4565b6001600160a01b03841660009081526001602052604090205481811015610acb5760405162461bcd60e51b815260040161060690611bf7565b6001600160a01b03808616600090815260016020526040808220858503905591851681529081208054849290610b02908490611b46565b92505081905550826001600160a01b0316856001600160a01b0316600080516020611d1a83398151915284604051610b3c91815260200190565b60405180910390a35050508080610b5290611c3d565b915050610a1b565b50505050565b6000546001600160a01b03163314610b8a5760405162461bcd60e51b815260040161060690611aaa565b600c55565b6000546001600160a01b03163314610bb95760405162461bcd60e51b815260040161060690611aaa565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6060600f805461063b90611adf565b3380610c425760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610606565b6001600160a01b03811660009081526001602052604090205482811015610cb65760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610606565b6001600160a01b03808316600081815260016020526040808220878603905560108054851683529181902080548801905590549051921691600080516020611d1a83398151915290610d0b9087815260200190565b60405180910390a3505050565b6000546001600160a01b03163314610d425760405162461bcd60e51b815260040161060690611aaa565b6004805460ff19811660ff90911615179055565b3360009081526002602090815260408083206001600160a01b038616845290915281205482811015610dd85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610606565b610de53385858403610f9e565b5060019392505050565b600061070d3384846110ba565b6000546001600160a01b03163314610e265760405162461bcd60e51b815260040161060690611aaa565b6001600160a01b03166000908152600360205260409020805460ff19169055565b6000546001600160a01b03163314610e715760405162461bcd60e51b815260040161060690611aaa565b600b55565b6000546001600160a01b03163314610ea05760405162461bcd60e51b815260040161060690611aaa565b610eb281670de0b6b3a7640000611b2f565b600a5550565b6000546001600160a01b03163314610ee25760405162461bcd60e51b815260040161060690611aaa565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b03163314610f2d5760405162461bcd60e51b815260040161060690611aaa565b6001600160a01b038116610f925760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610606565b610f9b81611479565b50565b6001600160a01b0383166110005760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610606565b6001600160a01b0382166110615760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610606565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610d0b565b6001600160a01b0383166110e05760405162461bcd60e51b815260040161060690611b59565b6001600160a01b0382166111065760405162461bcd60e51b815260040161060690611bb4565b6111118383836114c9565b6001600160a01b0383166000908152600160205260409020548181101561114a5760405162461bcd60e51b815260040161060690611bf7565b600b54600c54600091906111666000546001600160a01b031690565b6001600160a01b0316876001600160a01b03161415801561119557506000546001600160a01b03878116911614155b156113f7576007546001600160a01b0388811691161480156111c0575060045462010000900460ff16155b1561124a57816111d1606487611c56565b6111db9190611b2f565b92508215611245576111ed8386611c78565b30600090815260016020526040812080549297508592909190611211908490611b46565b909155505060405183815230906001600160a01b03891690600080516020611d1a8339815191529060200160405180910390a35b6113f7565b6007546001600160a01b038781169116148015611270575060045462010000900460ff16155b156113f75780611281606487611c56565b61128b9190611b2f565b925082156113f75761129d8386611c78565b94506112aa600284611c56565b30600090815260016020526040812080549091906112c9908490611b46565b909155503090506001600160a01b038816600080516020611d1a8339815191526112f4600287611c56565b60405190815260200160405180910390a3611310600284611c56565b6013546001600160a01b03166000908152600160205260408120805490919061133a908490611b46565b90915550506013546001600160a01b03908116908816600080516020611d1a83398151915261136a600287611c56565b60405190815260200160405180910390a3600d543060009081526001602052604090205481116113f55760006113a1600284611c56565b6011549091506113d8906001600160a01b0316856113bf8482611b46565b6113c99086611c56565b6113d39190611b2f565b611654565b6012546113f3906001600160a01b0316826113bf8188611b46565b505b505b6001600160a01b0380881660009081526001602052604080822088880390559188168152908120805487929061142e908490611b46565b92505081905550856001600160a01b0316876001600160a01b0316600080516020611d1a8339815191528760405161146891815260200190565b60405180910390a350505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b038481169116148015906114f557506000546001600160a01b03838116911614155b1561164f5760045460ff16156115c9576001600160a01b03821660009081526003602052604090205460ff168061155757506009548161154a846001600160a01b031660009081526001602052604090205490565b6115549190611b46565b11155b6115c95760405162461bcd60e51b815260206004820152603f60248201527f4d617820746f6b656e73206c696d697420666f722074686973206163636f756e60448201527f742065786365656465642e204f7220747279206c6f77657220616d6f756e74006064820152608401610606565b600454610100900460ff1680156115ed57506007546001600160a01b038381169116145b1561164f57600a5481111561164f5760405162461bcd60e51b815260206004820152602260248201527f416d6f756e74204578636565647320416c6c6f7765642053656c6c20416d6f756044820152611b9d60f21b6064820152608401610606565b505050565b6004805462ff0000191662010000179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061169a5761169a611b9e565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156116f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117179190611c8b565b8160018151811061172a5761172a611b9e565b6001600160a01b0392831660209182029290920101526006546117509130911684610f9e565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611789908590600090869089904290600401611ca8565b600060405180830381600087803b1580156117a357600080fd5b505af11580156117b7573d6000803e3d6000fd5b50506004805462ff0000191690555050505050565b600060208083528351808285015260005b818110156117f9578581018301518582016040015282016117dd565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561182c57600080fd5b5035919050565b6001600160a01b0381168114610f9b57600080fd5b6000806040838503121561185b57600080fd5b823561186681611833565b946020939093013593505050565b60008060006060848603121561188957600080fd5b833561189481611833565b925060208401356118a481611833565b929592945050506040919091013590565b6000602082840312156118c757600080fd5b81356118d281611833565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611918576119186118d9565b604052919050565b600067ffffffffffffffff82111561193a5761193a6118d9565b5060051b60200190565b600082601f83011261195557600080fd5b8135602061196a61196583611920565b6118ef565b82815260059290921b8401810191818101908684111561198957600080fd5b8286015b848110156119a4578035835291830191830161198d565b509695505050505050565b600080604083850312156119c257600080fd5b823567ffffffffffffffff808211156119da57600080fd5b818501915085601f8301126119ee57600080fd5b813560206119fe61196583611920565b82815260059290921b84018101918181019089841115611a1d57600080fd5b948201945b83861015611a44578535611a3581611833565b82529482019490820190611a22565b96505086013592505080821115611a5a57600080fd5b50611a6785828601611944565b9150509250929050565b60008060408385031215611a8457600080fd5b8235611a8f81611833565b91506020830135611a9f81611833565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680611af357607f821691505b602082108103611b1357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761071157610711611b19565b8082018082111561071157610711611b19565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b600060018201611c4f57611c4f611b19565b5060010190565b600082611c7357634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561071157610711611b19565b600060208284031215611c9d57600080fd5b81516118d281611833565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611cf85784516001600160a01b031683529383019391830191600101611cd3565b50506001600160a01b0396909616606085015250505060800152939250505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122025187ef28142068fdd36b616da3522915f8a649d60b738a75d7839e32c97cf1a64736f6c63430008120033

Deployed Bytecode Sourcemap

8453:21905:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27600:93;;;:::i;:::-;;13522:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26094:118;;;;;;:::i;:::-;;:::i;15689:169::-;;;;;;:::i;:::-;;:::i;:::-;;;1373:14:1;;1366:22;1348:41;;1336:2;1321:18;15689:169:0;1208:187:1;14642:108:0;14730:12;;14642:108;;;1546:25:1;;;1534:2;1519:18;14642:108:0;1400:177:1;24678:95:0;24753:12;;-1:-1:-1;;;;;24753:12:0;24678:95;;;-1:-1:-1;;;;;1746:32:1;;;1728:51;;1716:2;1701:18;24678:95:0;1582:203:1;16340:492:0;;;;;;:::i;:::-;;:::i;27279:85::-;27349:7;;27279:85;;25214:131;;;;;;:::i;:::-;;:::i;23935:134::-;;;;;;:::i;:::-;-1:-1:-1;;;;;24028:33:0;24005:4;24028:33;;;:24;:33;;;;;;;;;23935:134;14484:93;;;14567:2;2645:36:1;;2633:2;2618:18;14484:93:0;2503:184:1;17241:215:0;;;;;;:::i;:::-;;:::i;26495:111::-;;;;;;:::i;:::-;;:::i;23504:123::-;;;;;;:::i;:::-;;:::i;8723:35::-;;;;;;;;;24835:117;;;;;;:::i;:::-;;:::i;25446:110::-;25528:20;;25446:110;;24501:117;;;;;;:::i;:::-;;:::i;14813:127::-;;;;;;:::i;:::-;-1:-1:-1;;;;;14914:18:0;14887:7;14914:18;;;:9;:18;;;;;;;14813:127;5679:103;;;:::i;8901:37::-;;;;;-1:-1:-1;;;;;8901:37:0;;;8841:51;;;;;;:::i;:::-;;;;;;;;;;;;;;;;22521:893;;;;;;:::i;:::-;;:::i;26844:93::-;;;;;;:::i;:::-;;:::i;5028:87::-;5074:7;5101:6;-1:-1:-1;;;;;5101:6:0;5028:87;;24134:137;;;;;;:::i;:::-;;:::i;24336:105::-;24416:17;;-1:-1:-1;;;;;24416:17:0;24336:105;;13741:104;;;:::i;21186:509::-;;;;;;:::i;:::-;;:::i;27430:99::-;;;:::i;17959:413::-;;;;;;:::i;:::-;;:::i;15153:175::-;;;;;;:::i;:::-;;:::i;26993:87::-;27064:8;;26993:87;;23715:122;;;;;;:::i;:::-;;:::i;25014:99::-;25091:14;;-1:-1:-1;;;;;25091:14:0;25014:99;;8985:26;;;;;-1:-1:-1;;;;;8985:26:0;;;27135:89;;;;;;:::i;:::-;;:::i;15391:151::-;;;;;;:::i;:::-;-1:-1:-1;;;;;15507:18:0;;;15480:7;15507:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15391:151;25878:99;25955:14;;25878:99;;26329:97;26405:13;;26329:97;;25657:120;;;;;;:::i;:::-;;:::i;26678:110::-;;;;;;:::i;:::-;;:::i;8765:33::-;;;;;;;;;;;;5937:201;;;;;;:::i;:::-;;:::i;27600:93::-;5074:7;5101:6;-1:-1:-1;;;;;5101:6:0;3975:10;5248:23;5240:68;;;;-1:-1:-1;;;5240:68:0;;;;;;;:::i;:::-;;;;;;;;;27671:14:::1;::::0;;-1:-1:-1;;27653:32:0;::::1;27671:14;::::0;;;::::1;;;27670:15;27653:32:::0;;::::1;;::::0;;27600:93::o;13522:100::-;13576:13;13609:5;13602:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13522:100;:::o;26094:118::-;5074:7;5101:6;-1:-1:-1;;;;;5101:6:0;3975:10;5248:23;5240:68;;;;-1:-1:-1;;;5240:68:0;;;;;;;:::i;:::-;26185:18:::1;:9:::0;26197:6:::1;26185:18;:::i;:::-;26168:13;:36:::0;-1:-1:-1;26094:118:0:o;15689:169::-;15772:4;15789:39;3975:10;15812:7;15821:6;15789:8;:39::i;:::-;-1:-1:-1;15846:4:0;15689:169;;;;;:::o;16340:492::-;16480:4;16497:36;16507:6;16515:9;16526:6;16497:9;:36::i;:::-;-1:-1:-1;;;;;16573:19:0;;16546:24;16573:19;;;:11;:19;;;;;;;;3975:10;16573:33;;;;;;;;16625:26;;;;16617:79;;;;-1:-1:-1;;;16617:79:0;;7317:2:1;16617:79:0;;;7299:21:1;7356:2;7336:18;;;7329:30;7395:34;7375:18;;;7368:62;-1:-1:-1;;;7446:18:1;;;7439:38;7494:19;;16617:79:0;7115:404:1;16617:79:0;16732:57;16741:6;3975:10;16782:6;16763:16;:25;16732:8;:57::i;:::-;-1:-1:-1;16820:4:0;;16340:492;-1:-1:-1;;;;16340:492:0:o;25214:131::-;5074:7;5101:6;-1:-1:-1;;;;;5101:6:0;3975:10;5248:23;5240:68;;;;-1:-1:-1;;;5240:68:0;;;;;;;:::i;:::-;25318:18:::1;:9:::0;25330:6:::1;25318:18;:::i;:::-;25294:20;:43:::0;-1:-1:-1;25214:131:0:o;17241:215::-;3975:10;17329:4;17378:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17378:34:0;;;;;;;;;;17329:4;;17346:80;;17369:7;;17378:47;;17415:10;;17378:47;:::i;:::-;17346:8;:80::i;26495:111::-;5074:7;5101:6;-1:-1:-1;;;;;5101:6:0;3975:10;5248:23;5240:68;;;;-1:-1:-1;;;5240:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26564:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;26564:34:0::1;26594:4;26564:34;::::0;;26495:111::o;23504:123::-;5074:7;5101:6;-1:-1:-1;;;;;5101:6:0;3975:10;5248:23;5240:68;;;;-1:-1:-1;;;5240:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23579:33:0::1;;::::0;;;:24:::1;:33;::::0;;;;:40;;-1:-1:-1;;23579:40:0::1;23615:4;23579:40;::::0;;23504:123::o;24835:117::-;5074:7;5101:6;-1:-1:-1;;;;;5101:6:0;3975:10;5248:23;5240:68;;;;-1:-1:-1;;;5240:68:0;;;;;;;:::i;:::-;24914:14:::1;:30:::0;;-1:-1:-1;;;;;;24914:30:0::1;-1:-1:-1::0;;;;;24914:30:0;;;::::1;::::0;;;::::1;::::0;;24835:117::o;24501:::-;5074:7;5101:6;-1:-1:-1;;;;;5101:6:0;3975:10;5248:23;5240:68;;;;-1:-1:-1;;;5240:68:0;;;;;;;:::i;:::-;24584:12:::1;:26:::0;;-1:-1:-1;;;;;;24584:26:0::1;-1:-1:-1::0;;;;;24584:26:0;;;::::1;::::0;;;::::1;::::0;;24501:117::o;5679:103::-;5074:7;5101:6;-1:-1:-1;;;;;5101:6:0;3975:10;5248:23;5240:68;;;;-1:-1:-1;;;5240:68:0;;;;;;;:::i;:::-;5744:30:::1;5771:1;5744:18;:30::i;:::-;5679:103::o:0;22521:893::-;22643:7;:14;22625:7;:14;:32;22617:72;;;;-1:-1:-1;;;22617:72:0;;7856:2:1;22617:72:0;;;7838:21:1;7895:2;7875:18;;;7868:30;7934:29;7914:18;;;7907:57;7981:18;;22617:72:0;7654:351:1;22617:72:0;3975:10;;22750:70;;;;-1:-1:-1;;;22750:70:0;;;;;;;:::i;:::-;22835:9;22831:576;22850:7;:14;22848:1;:16;22831:576;;;22889:17;22909:7;22917:1;22909:10;;;;;;;;:::i;:::-;;;;;;;22889:30;;22934:14;22951:7;22959:1;22951:10;;;;;;;;:::i;:::-;;;;;;;22934:27;;23005:1;-1:-1:-1;;;;;22984:23:0;:9;-1:-1:-1;;;;;22984:23:0;;22976:71;;;;-1:-1:-1;;;22976:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23086:17:0;;23062:21;23086:17;;;:9;:17;;;;;;23126:23;;;;23118:74;;;;-1:-1:-1;;;23118:74:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23236:17:0;;;;;;;:9;:17;;;;;;23256:22;;;23236:42;;23308:20;;;;;;;;:30;;23272:6;;23236:17;23308:30;;23272:6;;23308:30;:::i;:::-;;;;;;;;23377:9;-1:-1:-1;;;;;23360:35:0;23369:6;-1:-1:-1;;;;;23360:35:0;-1:-1:-1;;;;;;;;;;;23388:6:0;23360:35;;;;1546:25:1;;1534:2;1519:18;;1400:177;23360:35:0;;;;;;;;22870:537;;;22866:3;;;;;:::i;:::-;;;;22831:576;;;;22606:808;22521:893;;:::o;26844:93::-;5074:7;5101:6;-1:-1:-1;;;;;5101:6:0;3975:10;5248:23;5240:68;;;;-1:-1:-1;;;5240:68:0;;;;;;;:::i;:::-;26911:8:::1;:18:::0;26844:93::o;24134:137::-;5074:7;5101:6;-1:-1:-1;;;;;5101:6:0;3975:10;5248:23;5240:68;;;;-1:-1:-1;;;5240:68:0;;;;;;;:::i;:::-;24227:17:::1;:36:::0;;-1:-1:-1;;;;;;24227:36:0::1;-1:-1:-1::0;;;;;24227:36:0;;;::::1;::::0;;;::::1;::::0;;24134:137::o;13741:104::-;13797:13;13830:7;13823:14;;;;;:::i;21186:509::-;3975:10;;21286:67;;;;-1:-1:-1;;;21286:67:0;;9701:2:1;21286:67:0;;;9683:21:1;9740:2;9720:18;;;9713:30;9779:34;9759:18;;;9752:62;-1:-1:-1;;;9830:18:1;;;9823:31;9871:19;;21286:67:0;9499:397:1;21286:67:0;-1:-1:-1;;;;;21391:18:0;;21366:22;21391:18;;;:9;:18;;;;;;21428:24;;;;21420:71;;;;-1:-1:-1;;;21420:71:0;;10103:2:1;21420:71:0;;;10085:21:1;10142:2;10122:18;;;10115:30;10181:34;10161:18;;;10154:62;-1:-1:-1;;;10232:18:1;;;10225:32;10274:19;;21420:71:0;9901:398:1;21420:71:0;-1:-1:-1;;;;;21527:18:0;;;;;;;:9;:18;;;;;;21548:23;;;21527:44;;21596:12;;;;;21586:23;;;;;;:33;;;;;;21666:12;;21648:39;;21666:12;;;-1:-1:-1;;;;;;;;;;;21648:39:0;;;21565:6;1546:25:1;;1534:2;1519:18;;1400:177;21648:39:0;;;;;;;;21234:461;;21186:509;:::o;27430:99::-;5074:7;5101:6;-1:-1:-1;;;;;5101:6:0;3975:10;5248:23;5240:68;;;;-1:-1:-1;;;5240:68:0;;;;;;;:::i;:::-;27505:16:::1;::::0;;-1:-1:-1;;27485:36:0;::::1;27505:16;::::0;;::::1;27504:17;27485:36;::::0;;27430:99::o;17959:413::-;3975:10;18052:4;18096:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18096:34:0;;;;;;;;;;18149:35;;;;18141:85;;;;-1:-1:-1;;;18141:85:0;;10506:2:1;18141:85:0;;;10488:21:1;10545:2;10525:18;;;10518:30;10584:34;10564:18;;;10557:62;-1:-1:-1;;;10635:18:1;;;10628:35;10680:19;;18141:85:0;10304:401:1;18141:85:0;18262:67;3975:10;18285:7;18313:15;18294:16;:34;18262:8;:67::i;:::-;-1:-1:-1;18360:4:0;;17959:413;-1:-1:-1;;;17959:413:0:o;15153:175::-;15239:4;15256:42;3975:10;15280:9;15291:6;15256:9;:42::i;23715:122::-;5074:7;5101:6;-1:-1:-1;;;;;5101:6:0;3975:10;5248:23;5240:68;;;;-1:-1:-1;;;5240:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23788:33:0::1;23824:5;23788:33:::0;;;:24:::1;:33;::::0;;;;:41;;-1:-1:-1;;23788:41:0::1;::::0;;23715:122::o;27135:89::-;5074:7;5101:6;-1:-1:-1;;;;;5101:6:0;3975:10;5248:23;5240:68;;;;-1:-1:-1;;;5240:68:0;;;;;;;:::i;:::-;27200:7:::1;:16:::0;27135:89::o;25657:120::-;5074:7;5101:6;-1:-1:-1;;;;;5101:6:0;3975:10;5248:23;5240:68;;;;-1:-1:-1;;;5240:68:0;;;;;;;:::i;:::-;25750:18:::1;:9:::0;25762:6:::1;25750:18;:::i;:::-;25732:14;:37:::0;-1:-1:-1;25657:120:0:o;26678:110::-;5074:7;5101:6;-1:-1:-1;;;;;5101:6:0;3975:10;5248:23;5240:68;;;;-1:-1:-1;;;5240:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26745:27:0::1;26775:5;26745:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;26745:35:0::1;::::0;;26678:110::o;5937:201::-;5074:7;5101:6;-1:-1:-1;;;;;5101:6:0;3975:10;5248:23;5240:68;;;;-1:-1:-1;;;5240:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6026:22:0;::::1;6018:73;;;::::0;-1:-1:-1;;;6018:73:0;;10912:2:1;6018:73:0::1;::::0;::::1;10894:21:1::0;10951:2;10931:18;;;10924:30;10990:34;10970:18;;;10963:62;-1:-1:-1;;;11041:18:1;;;11034:36;11087:19;;6018:73:0::1;10710:402:1::0;6018:73:0::1;6102:28;6121:8;6102:18;:28::i;:::-;5937:201:::0;:::o;22133:380::-;-1:-1:-1;;;;;22269:19:0;;22261:68;;;;-1:-1:-1;;;22261:68:0;;11319:2:1;22261:68:0;;;11301:21:1;11358:2;11338:18;;;11331:30;11397:34;11377:18;;;11370:62;-1:-1:-1;;;11448:18:1;;;11441:34;11492:19;;22261:68:0;11117:400:1;22261:68:0;-1:-1:-1;;;;;22348:21:0;;22340:68;;;;-1:-1:-1;;;22340:68:0;;11724:2:1;22340:68:0;;;11706:21:1;11763:2;11743:18;;;11736:30;11802:34;11782:18;;;11775:62;-1:-1:-1;;;11853:18:1;;;11846:32;11895:19;;22340:68:0;11522:398:1;22340:68:0;-1:-1:-1;;;;;22421:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;22473:32;;1546:25:1;;;22473:32:0;;1519:18:1;22473:32:0;1400:177:1;18862:2074:0;-1:-1:-1;;;;;19002:20:0;;18994:70;;;;-1:-1:-1;;;18994:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19083:23:0;;19075:71;;;;-1:-1:-1;;;19075:71:0;;;;;;;:::i;:::-;19159:47;19180:6;19188:9;19199:6;19159:20;:47::i;:::-;-1:-1:-1;;;;;19243:17:0;;19219:21;19243:17;;;:9;:17;;;;;;19279:23;;;;19271:74;;;;-1:-1:-1;;;19271:74:0;;;;;;;:::i;:::-;19399:7;;19435:8;;19356:11;;19399:7;19467;5074;5101:6;-1:-1:-1;;;;;5101:6:0;;5028:87;19467:7;-1:-1:-1;;;;;19457:17:0;:6;-1:-1:-1;;;;;19457:17:0;;;:41;;;;-1:-1:-1;5074:7:0;5101:6;-1:-1:-1;;;;;19478:20:0;;;5101:6;;19478:20;;19457:41;19454:1233;;;19528:11;;-1:-1:-1;;;;;19517:22:0;;;19528:11;;19517:22;:43;;;;-1:-1:-1;19544:16:0;;;;;;;19543:17;19517:43;19514:1162;;;19597:6;19586:10;19593:3;19586:6;:10;:::i;:::-;:17;;;;:::i;:::-;19580:23;-1:-1:-1;19625:8:0;;19622:186;;19657:13;19667:3;19657:13;;:::i;:::-;19711:4;19693:24;;;;:9;:24;;;;;:31;;19657:13;;-1:-1:-1;19721:3:0;;19693:24;;;:31;;19721:3;;19693:31;:::i;:::-;;;;-1:-1:-1;;19752:36:0;;1546:25:1;;;19777:4:0;;-1:-1:-1;;;;;19752:36:0;;;-1:-1:-1;;;;;;;;;;;19752:36:0;1534:2:1;1519:18;19752:36:0;;;;;;;19622:186;19514:1162;;;19859:11;;-1:-1:-1;;;;;19845:25:0;;;19859:11;;19845:25;:46;;;;-1:-1:-1;19875:16:0;;;;;;;19874:17;19845:46;19842:834;;;19928:7;19917:10;19924:3;19917:6;:10;:::i;:::-;:18;;;;:::i;:::-;19911:24;-1:-1:-1;19957:8:0;;19954:707;;19989:13;19999:3;19989:13;;:::i;:::-;;-1:-1:-1;20053:5:0;20057:1;20053:3;:5;:::i;:::-;20043:4;20025:24;;;;:9;:24;;;;;:33;;:24;;;:33;;;;;:::i;:::-;;;;-1:-1:-1;20111:4:0;;-1:-1:-1;;;;;;20086:38:0;;-1:-1:-1;;;;;;;;;;;20118:5:0;20122:1;20118:3;:5;:::i;:::-;20086:38;;1546:25:1;;;1534:2;1519:18;20086:38:0;;;;;;;20177:5;20181:1;20177:3;:5;:::i;:::-;20157:14;;-1:-1:-1;;;;;20157:14:0;20147:25;;;;:9;:25;;;;;:36;;:25;;;:36;;;;;:::i;:::-;;;;-1:-1:-1;;20228:14:0;;-1:-1:-1;;;;;20228:14:0;;;;20211:39;;-1:-1:-1;;;;;;;;;;;20244:5:0;20248:1;20244:3;:5;:::i;:::-;20211:39;;1546:25:1;;;1534:2;1519:18;20211:39:0;;;;;;;20293:13;;20350:4;20273:17;20332:24;;;:9;:24;;;;;;:37;-1:-1:-1;20329:313:0;;20397:15;20415:9;20423:1;20415:7;:9;:::i;:::-;20468:17;;20397:27;;-1:-1:-1;20451:72:0;;-1:-1:-1;;;;;20468:17:0;20515:6;20499:14;20397:27;20515:6;20499:14;:::i;:::-;20488:26;;:9;:26;:::i;:::-;:33;;;;:::i;:::-;20451:16;:72::i;:::-;20567:12;;20550:68;;-1:-1:-1;;;;;20567:12:0;20609:7;20593:14;20609:7;20593:6;:14;:::i;20550:68::-;20370:272;20329:313;19966:695;19954:707;-1:-1:-1;;;;;20722:17:0;;;;;;;:9;:17;;;;;;20742:22;;;20722:42;;20786:20;;;;;;;;:30;;20758:6;;20722:17;20786:30;;20758:6;;20786:30;:::i;:::-;;;;;;;;20851:9;-1:-1:-1;;;;;20834:35:0;20843:6;-1:-1:-1;;;;;20834:35:0;-1:-1:-1;;;;;;;;;;;20862:6:0;20834:35;;;;1546:25:1;;1534:2;1519:18;;1400:177;20834:35:0;;;;;;;;18983:1953;;;;18862:2074;;;:::o;6298:191::-;6372:16;6391:6;;-1:-1:-1;;;;;6408:17:0;;;-1:-1:-1;;;;;;6408:17:0;;;;;;6441:40;;6391:6;;;;;;;6441:40;;6372:16;6441:40;6361:128;6298:191;:::o;29010:617::-;5074:7;5101:6;-1:-1:-1;;;;;29147:15:0;;;5101:6;;29147:15;;;;:32;;-1:-1:-1;5074:7:0;5101:6;-1:-1:-1;;;;;29166:13:0;;;5101:6;;29166:13;;29147:32;29144:474;;;29198:16;;;;29195:231;;;-1:-1:-1;;;;;29243:28:0;;;;;;:24;:28;;;;;;;;;:78;;;29301:20;;29291:6;29275:13;29285:2;-1:-1:-1;;;;;14914:18:0;14887:7;14914:18;;;:9;:18;;;;;;;14813:127;29275:13;:22;;;;:::i;:::-;:46;;29243:78;29235:175;;;;-1:-1:-1;;;29235:175:0;;12482:2:1;29235:175:0;;;12464:21:1;12521:2;12501:18;;;12494:30;12560:34;12540:18;;;12533:62;12631:33;12611:18;;;12604:61;12682:19;;29235:175:0;12280:427:1;29235:175:0;29443:14;;;;;;;:35;;;;-1:-1:-1;29467:11:0;;-1:-1:-1;;;;;29461:17:0;;;29467:11;;29461:17;29443:35;29440:167;;;29517:14;;29507:6;:24;;29499:92;;;;-1:-1:-1;;;29499:92:0;;12914:2:1;29499:92:0;;;12896:21:1;12953:2;12933:18;;;12926:30;12992:34;12972:18;;;12965:62;-1:-1:-1;;;13043:18:1;;;13036:32;13085:19;;29499:92:0;12712:398:1;29499:92:0;29010:617;;;:::o;27801:609::-;9890:16;:23;;-1:-1:-1;;9890:23:0;;;;;27981:16:::1;::::0;;9890;27981;;;;;::::1;::::0;;-1:-1:-1;;27981:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27981:16:0::1;27957:40;;28026:4;28008;28013:1;28008:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28008:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;28052:13:::1;::::0;:20:::1;::::0;;-1:-1:-1;;;28052:20:0;;;;:13;;;::::1;::::0;:18:::1;::::0;:20:::1;::::0;;::::1;::::0;28008:7;;28052:20;;;;;:13;:20:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28042:4;28047:1;28042:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28042:30:0;;::::1;:7;::::0;;::::1;::::0;;;;;:30;28117:13:::1;::::0;28085:60:::1;::::0;28102:4:::1;::::0;28117:13:::1;28133:11:::0;28085:8:::1;:60::i;:::-;28184:13;::::0;:218:::1;::::0;-1:-1:-1;;;28184:218:0;;-1:-1:-1;;;;;28184:13:0;;::::1;::::0;:64:::1;::::0;:218:::1;::::0;28263:11;;28184:13:::1;::::0;28333:4;;28352:9;;28376:15:::1;::::0;28184:218:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;9936:16:0;:24;;-1:-1:-1;;9936:24:0;;;-1:-1:-1;;;;;27801:609:0:o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:180::-;626:6;679:2;667:9;658:7;654:23;650:32;647:52;;;695:1;692;685:12;647:52;-1:-1:-1;718:23:1;;567:180;-1:-1:-1;567:180:1:o;752:131::-;-1:-1:-1;;;;;827:31:1;;817:42;;807:70;;873:1;870;863:12;888:315;956:6;964;1017:2;1005:9;996:7;992:23;988:32;985:52;;;1033:1;1030;1023:12;985:52;1072:9;1059:23;1091:31;1116:5;1091:31;:::i;:::-;1141:5;1193:2;1178:18;;;;1165:32;;-1:-1:-1;;;888:315:1:o;1790:456::-;1867:6;1875;1883;1936:2;1924:9;1915:7;1911:23;1907:32;1904:52;;;1952:1;1949;1942:12;1904:52;1991:9;1978:23;2010:31;2035:5;2010:31;:::i;:::-;2060:5;-1:-1:-1;2117:2:1;2102:18;;2089:32;2130:33;2089:32;2130:33;:::i;:::-;1790:456;;2182:7;;-1:-1:-1;;;2236:2:1;2221:18;;;;2208:32;;1790:456::o;2251:247::-;2310:6;2363:2;2351:9;2342:7;2338:23;2334:32;2331:52;;;2379:1;2376;2369:12;2331:52;2418:9;2405:23;2437:31;2462:5;2437:31;:::i;:::-;2487:5;2251:247;-1:-1:-1;;;2251:247:1:o;3184:127::-;3245:10;3240:3;3236:20;3233:1;3226:31;3276:4;3273:1;3266:15;3300:4;3297:1;3290:15;3316:275;3387:2;3381:9;3452:2;3433:13;;-1:-1:-1;;3429:27:1;3417:40;;3487:18;3472:34;;3508:22;;;3469:62;3466:88;;;3534:18;;:::i;:::-;3570:2;3563:22;3316:275;;-1:-1:-1;3316:275:1:o;3596:183::-;3656:4;3689:18;3681:6;3678:30;3675:56;;;3711:18;;:::i;:::-;-1:-1:-1;3756:1:1;3752:14;3768:4;3748:25;;3596:183::o;3784:662::-;3838:5;3891:3;3884:4;3876:6;3872:17;3868:27;3858:55;;3909:1;3906;3899:12;3858:55;3945:6;3932:20;3971:4;3995:60;4011:43;4051:2;4011:43;:::i;:::-;3995:60;:::i;:::-;4089:15;;;4175:1;4171:10;;;;4159:23;;4155:32;;;4120:12;;;;4199:15;;;4196:35;;;4227:1;4224;4217:12;4196:35;4263:2;4255:6;4251:15;4275:142;4291:6;4286:3;4283:15;4275:142;;;4357:17;;4345:30;;4395:12;;;;4308;;4275:142;;;-1:-1:-1;4435:5:1;3784:662;-1:-1:-1;;;;;;3784:662:1:o;4451:1215::-;4569:6;4577;4630:2;4618:9;4609:7;4605:23;4601:32;4598:52;;;4646:1;4643;4636:12;4598:52;4686:9;4673:23;4715:18;4756:2;4748:6;4745:14;4742:34;;;4772:1;4769;4762:12;4742:34;4810:6;4799:9;4795:22;4785:32;;4855:7;4848:4;4844:2;4840:13;4836:27;4826:55;;4877:1;4874;4867:12;4826:55;4913:2;4900:16;4935:4;4959:60;4975:43;5015:2;4975:43;:::i;4959:60::-;5053:15;;;5135:1;5131:10;;;;5123:19;;5119:28;;;5084:12;;;;5159:19;;;5156:39;;;5191:1;5188;5181:12;5156:39;5215:11;;;;5235:217;5251:6;5246:3;5243:15;5235:217;;;5331:3;5318:17;5348:31;5373:5;5348:31;:::i;:::-;5392:18;;5268:12;;;;5430;;;;5235:217;;;5471:5;-1:-1:-1;;5514:18:1;;5501:32;;-1:-1:-1;;5545:16:1;;;5542:36;;;5574:1;5571;5564:12;5542:36;;5597:63;5652:7;5641:8;5630:9;5626:24;5597:63;:::i;:::-;5587:73;;;4451:1215;;;;;:::o;5671:388::-;5739:6;5747;5800:2;5788:9;5779:7;5775:23;5771:32;5768:52;;;5816:1;5813;5806:12;5768:52;5855:9;5842:23;5874:31;5899:5;5874:31;:::i;:::-;5924:5;-1:-1:-1;5981:2:1;5966:18;;5953:32;5994:33;5953:32;5994:33;:::i;:::-;6046:7;6036:17;;;5671:388;;;;;:::o;6064:356::-;6266:2;6248:21;;;6285:18;;;6278:30;6344:34;6339:2;6324:18;;6317:62;6411:2;6396:18;;6064:356::o;6425:380::-;6504:1;6500:12;;;;6547;;;6568:61;;6622:4;6614:6;6610:17;6600:27;;6568:61;6675:2;6667:6;6664:14;6644:18;6641:38;6638:161;;6721:10;6716:3;6712:20;6709:1;6702:31;6756:4;6753:1;6746:15;6784:4;6781:1;6774:15;6638:161;;6425:380;;;:::o;6810:127::-;6871:10;6866:3;6862:20;6859:1;6852:31;6902:4;6899:1;6892:15;6926:4;6923:1;6916:15;6942:168;7015:9;;;7046;;7063:15;;;7057:22;;7043:37;7033:71;;7084:18;;:::i;7524:125::-;7589:9;;;7610:10;;;7607:36;;;7623:18;;:::i;8010:401::-;8212:2;8194:21;;;8251:2;8231:18;;;8224:30;8290:34;8285:2;8270:18;;8263:62;-1:-1:-1;;;8356:2:1;8341:18;;8334:35;8401:3;8386:19;;8010:401::o;8416:127::-;8477:10;8472:3;8468:20;8465:1;8458:31;8508:4;8505:1;8498:15;8532:4;8529:1;8522:15;8548:399;8750:2;8732:21;;;8789:2;8769:18;;;8762:30;8828:34;8823:2;8808:18;;8801:62;-1:-1:-1;;;8894:2:1;8879:18;;8872:33;8937:3;8922:19;;8548:399::o;8952:402::-;9154:2;9136:21;;;9193:2;9173:18;;;9166:30;9232:34;9227:2;9212:18;;9205:62;-1:-1:-1;;;9298:2:1;9283:18;;9276:36;9344:3;9329:19;;8952:402::o;9359:135::-;9398:3;9419:17;;;9416:43;;9439:18;;:::i;:::-;-1:-1:-1;9486:1:1;9475:13;;9359:135::o;11925:217::-;11965:1;11991;11981:132;;12035:10;12030:3;12026:20;12023:1;12016:31;12070:4;12067:1;12060:15;12098:4;12095:1;12088:15;11981:132;-1:-1:-1;12127:9:1;;11925:217::o;12147:128::-;12214:9;;;12235:11;;;12232:37;;;12249:18;;:::i;13115:251::-;13185:6;13238:2;13226:9;13217:7;13213:23;13209:32;13206:52;;;13254:1;13251;13244:12;13206:52;13286:9;13280:16;13305:31;13330:5;13305:31;:::i;13371:980::-;13633:4;13681:3;13670:9;13666:19;13712:6;13701:9;13694:25;13738:2;13776:6;13771:2;13760:9;13756:18;13749:34;13819:3;13814:2;13803:9;13799:18;13792:31;13843:6;13878;13872:13;13909:6;13901;13894:22;13947:3;13936:9;13932:19;13925:26;;13986:2;13978:6;13974:15;13960:29;;14007:1;14017:195;14031:6;14028:1;14025:13;14017:195;;;14096:13;;-1:-1:-1;;;;;14092:39:1;14080:52;;14187:15;;;;14152:12;;;;14128:1;14046:9;14017:195;;;-1:-1:-1;;;;;;;14268:32:1;;;;14263:2;14248:18;;14241:60;-1:-1:-1;;;14332:3:1;14317:19;14310:35;14229:3;13371:980;-1:-1:-1;;;13371:980:1:o

Swarm Source

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