ETH Price: $2,328.28 (-0.86%)
Gas: 10.8 Gwei

Token

BabelFish (BABEL)
 

Overview

Max Total Supply

42,000,000,000,000 BABEL

Holders

631

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,453,111,892 BABEL

Value
$0.00
0x4fd37ceb688a36114c8c9a8249992cc5c3f0435b
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:
BabelFish

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

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

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

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 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 ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @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(string memory name_, string memory symbol_, uint8 decimals_) {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;
    }

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

    /**
     * @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");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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

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

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

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

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

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

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

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

    /**
     * @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 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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

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

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

contract BabelFish is ERC20, Ownable {

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public liquidityWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
    bool private gasLimitActive = true;
    uint256 private gasPriceLimit = 563 * 1 gwei; // do not allow over x gwei for launch
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    
    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
    
    event liquidityWalletUpdated(address indexed newWallet, address indexed oldWallet);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event BuyBackTriggered(uint256 amount);
    
    event OwnerForcedSwapBack(uint256 timestamp);

    constructor() ERC20("BabelFish", "BABEL", 9) {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
               
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 _buyMarketingFee = 4;
        uint256 _buyLiquidityFee = 6;

        uint256 _sellMarketingFee = 4;
        uint256 _sellLiquidityFee = 6;
        
        uint256 totalSupply = 42 * 1e12 * 1e9;
        
        maxTransactionAmount = totalSupply * 2 / 1000; // 0.2% maxTransactionAmountTxn
        maxWallet = totalSupply * 4 / 1000; // 0.4% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
        
    	marketingWallet = address(0xF763DB155B3DC7EcdA9A28f193e0D96fea23B9C7); // set as marketing wallet
    	liquidityWallet = address(0xF763DB155B3DC7EcdA9A28f193e0D96fea23B9C7); // set as liquidity wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(liquidityWallet), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

  	}

    // once enabled, can never be turned off
    function enableTrading() public onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        gasLimitActive = false;
        transferDelayEnabled = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
    
    function airdropToWallets(address[] memory airdropWallets, uint256[] memory amounts) external onlyOwner returns (bool){
        require(airdropWallets.length == amounts.length, "arrays must be the same length");
        require(airdropWallets.length < 200, "Can only airdrop 200 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < airdropWallets.length; i++){
            address wallet = airdropWallets[i];
            uint256 amount = amounts[i];
            _transfer(msg.sender, wallet, amount);
        }
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 2 / 1000)/1e9, "Cannot set maxTransactionAmount lower than 0.2%");
        maxTransactionAmount = newNum * (10**9);
    }
    
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 4 / 1000)/1e9, "Cannot set maxWallet lower than 0.4%");
        maxWallet = newNum * (10**9);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
        require(sellTotalFees <= 20, "Must keep fees at 20% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
    
    function updateLiquidityWallet(address newWallet) external onlyOwner {
        emit liquidityWalletUpdated(newWallet, liquidityWallet);
        liquidityWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    event BoughtEarly(address indexed sniper);

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
                
                // only use to prevent sniper buys in the first blocks.
                if (gasLimitActive && automatedMarketMakerPairs[from]) {
                    require(tx.gasprice <= gasPriceLimit, "Gas price exceeds limit.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[from]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            
            swapBack();

            swapping = false;
        }
        
        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / 100; 
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / 100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance - liquidityTokens;
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance - initialETHBalance;
        
        uint256 ethForMarketing = ethBalance * tokensForMarketing / totalTokensToSwap;  
        uint256 ethForLiquidity = ethBalance - ethForMarketing;
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;

        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }
    
    // force Swap back if slippage above 49% for launch.
    function forceSwapBack() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        require(contractBalance >= totalSupply() / 100, "Can only swap back if more than 1% of tokens stuck on contract");
        swapBack();
        emit OwnerForcedSwapBack(block.timestamp);
    }
}

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":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropToWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","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":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600b805463ffffffff191663010000011790556483156a3e00600c55600e805460ff191660011790553480156200003a57600080fd5b50604080518082018252600980825268084c2c4cad88cd2e6d60bb1b602080840191825284518086019095526005855264109050915360da1b9085015282519293926200008a91600391620006de565b508151620000a0906004906020850190620006de565b506005805460ff191660ff929092169190911790555060009050620000c23390565b60058054610100600160a81b0319166101006001600160a01b03841690810291909117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d6200013a81600162000475565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200018057600080fd5b505afa15801562000195573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001bb919062000784565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200020457600080fd5b505afa15801562000219573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023f919062000784565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200028857600080fd5b505af11580156200029d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c3919062000784565b6001600160a01b031660a0819052620002de90600162000475565b60a051620002ee906001620004f5565b6004600681816908e4d3168276864000006103e86200030f826002620007cc565b6200031b9190620007ee565b6008556103e86200032e826004620007cc565b6200033a9190620007ee565b600a556127106200034d826005620007cc565b620003599190620007ee565b6009556010859055601184905562000372848662000811565b600f55601383905560148290556200038b828462000811565b6012556006805473f763db155b3dc7ecda9a28f193e0d96fea23b9c76001600160a01b03199182168117909255600780549091169091179055620003e8620003e060055461010090046001600160a01b031690565b600162000549565b620003f530600162000549565b6200040461dead600162000549565b6007546200041d906001600160a01b0316600162000549565b620004416200043960055461010090046001600160a01b031690565b600162000475565b6200044e30600162000475565b6200045d61dead600162000475565b620004693382620005f9565b50505050505062000869565b6005546001600160a01b03610100909104163314620004ca5760405162461bcd60e51b81526020600482018190526024820152600080516020620036af83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260196020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b036101009091041633146200059a5760405162461bcd60e51b81526020600482018190526024820152600080516020620036af8339815191526044820152606401620004c1565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006515760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004c1565b806002600082825462000665919062000811565b90915550506001600160a01b038216600090815260208190526040812080548392906200069490849062000811565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620006ec906200082c565b90600052602060002090601f0160209004810192826200071057600085556200075b565b82601f106200072b57805160ff19168380011785556200075b565b828001600101855582156200075b579182015b828111156200075b5782518255916020019190600101906200073e565b50620007699291506200076d565b5090565b5b808211156200076957600081556001016200076e565b6000602082840312156200079757600080fd5b81516001600160a01b0381168114620007af57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620007e957620007e9620007b6565b500290565b6000826200080c57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620008275762000827620007b6565b500190565b600181811c908216806200084157607f821691505b602082108114156200086357634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051612de8620008c760003960008181610538015281816111e40152611bd501526000818161040901528181611b97015281816125700152818161263801528181612674015281816126ee01526127560152612de86000f3fe60806040526004361061031e5760003560e01c80637bce5a04116101ab578063c18bc195116100f7578063e2f4560511610095578063f11a24d31161006f578063f11a24d314610977578063f2fde38b1461098d578063f6374342146109ad578063f8b45b05146109c357600080fd5b8063e2f456051461092c578063e37ba8f914610942578063e884f2601461096257600080fd5b8063d257b34f116100d1578063d257b34f14610890578063d4698016146108b0578063d85ba063146108d0578063dd62ed3e146108e657600080fd5b8063c18bc19514610840578063c876d0b914610860578063c8c8ebe41461087a57600080fd5b80639a7a23d611610164578063aacebbe31161013e578063aacebbe3146107b1578063b62496f5146107d1578063bbc0c74214610801578063c02466681461082057600080fd5b80639a7a23d614610751578063a457c2d714610771578063a9059cbb1461079157600080fd5b80637bce5a04146106b85780638a8c523c146106ce5780638da5cb5b146106e35780639213691314610706578063924de9b71461071c57806395d89b411461073c57600080fd5b8063395093511161026a5780636a486a8e11610223578063715018a6116101fd578063715018a61461064e578063751039fc146106635780637571336a1461067857806375f0a8741461069857600080fd5b80636a486a8e146105e25780636ddd1713146105f857806370a082311461061857600080fd5b8063395093511461050657806349bd5a5e146105265780634a62bb651461055a5780634fbee1931461057457806351f205e4146105ad57806366ca9b83146105c257600080fd5b806318160ddd116102d75780632307b441116102b15780632307b4411461048e57806323b872dd146104ae57806327c8f835146104ce578063313ce567146104e457600080fd5b806318160ddd146104435780631a8145bb146104625780631f3fed8f1461047857600080fd5b806302dbd8f81461032a57806306fdde031461034c578063095ea7b314610377578063106b5da1146103a757806310d5de53146103c75780631694505e146103f757600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5061034a6103453660046127dd565b6109d9565b005b34801561035857600080fd5b50610361610a7f565b60405161036e91906127ff565b60405180910390f35b34801561038357600080fd5b5061039761039236600461286c565b610b11565b604051901515815260200161036e565b3480156103b357600080fd5b5061034a6103c2366004612898565b610b27565b3480156103d357600080fd5b506103976103e23660046128b1565b60186020526000908152604090205460ff1681565b34801561040357600080fd5b5061042b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161036e565b34801561044f57600080fd5b506002545b60405190815260200161036e565b34801561046e57600080fd5b5061045460165481565b34801561048457600080fd5b5061045460155481565b34801561049a57600080fd5b506103976104a93660046129ab565b610c02565b3480156104ba57600080fd5b506103976104c9366004612a6d565b610d68565b3480156104da57600080fd5b5061042b61dead81565b3480156104f057600080fd5b5060055460405160ff909116815260200161036e565b34801561051257600080fd5b5061039761052136600461286c565b610e12565b34801561053257600080fd5b5061042b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561056657600080fd5b50600b546103979060ff1681565b34801561058057600080fd5b5061039761058f3660046128b1565b6001600160a01b031660009081526017602052604090205460ff1690565b3480156105b957600080fd5b5061034a610e4e565b3480156105ce57600080fd5b5061034a6105dd3660046127dd565b610f50565b3480156105ee57600080fd5b5061045460125481565b34801561060457600080fd5b50600b546103979062010000900460ff1681565b34801561062457600080fd5b506104546106333660046128b1565b6001600160a01b031660009081526020819052604090205490565b34801561065a57600080fd5b5061034a610fe9565b34801561066f57600080fd5b50610397611069565b34801561068457600080fd5b5061034a610693366004612abe565b6110b9565b3480156106a457600080fd5b5060065461042b906001600160a01b031681565b3480156106c457600080fd5b5061045460105481565b3480156106da57600080fd5b5061034a611114565b3480156106ef57600080fd5b5060055461010090046001600160a01b031661042b565b34801561071257600080fd5b5061045460135481565b34801561072857600080fd5b5061034a610737366004612af3565b611157565b34801561074857600080fd5b506103616111a3565b34801561075d57600080fd5b5061034a61076c366004612abe565b6111b2565b34801561077d57600080fd5b5061039761078c36600461286c565b611294565b34801561079d57600080fd5b506103976107ac36600461286c565b611323565b3480156107bd57600080fd5b5061034a6107cc3660046128b1565b611330565b3480156107dd57600080fd5b506103976107ec3660046128b1565b60196020526000908152604090205460ff1681565b34801561080d57600080fd5b50600b5461039790610100900460ff1681565b34801561082c57600080fd5b5061034a61083b366004612abe565b6113bd565b34801561084c57600080fd5b5061034a61085b366004612898565b61144c565b34801561086c57600080fd5b50600e546103979060ff1681565b34801561088657600080fd5b5061045460085481565b34801561089c57600080fd5b506103976108ab366004612898565b61151b565b3480156108bc57600080fd5b5060075461042b906001600160a01b031681565b3480156108dc57600080fd5b50610454600f5481565b3480156108f257600080fd5b50610454610901366004612b0e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561093857600080fd5b5061045460095481565b34801561094e57600080fd5b5061034a61095d3660046128b1565b611678565b34801561096e57600080fd5b50610397611705565b34801561098357600080fd5b5061045460115481565b34801561099957600080fd5b5061034a6109a83660046128b1565b611748565b3480156109b957600080fd5b5061045460145481565b3480156109cf57600080fd5b50610454600a5481565b6005546001600160a01b03610100909104163314610a125760405162461bcd60e51b8152600401610a0990612b47565b60405180910390fd5b60138290556014819055610a268183612b92565b601281905560141015610a7b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610a09565b5050565b606060038054610a8e90612baa565b80601f0160208091040260200160405190810160405280929190818152602001828054610aba90612baa565b8015610b075780601f10610adc57610100808354040283529160200191610b07565b820191906000526020600020905b815481529060010190602001808311610aea57829003601f168201915b5050505050905090565b6000610b1e338484611844565b50600192915050565b6005546001600160a01b03610100909104163314610b575760405162461bcd60e51b8152600401610a0990612b47565b633b9aca006103e8610b6860025490565b610b73906002612be5565b610b7d9190612c04565b610b879190612c04565b811015610bee5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e322560881b6064820152608401610a09565b610bfc81633b9aca00612be5565b60085550565b6005546000906001600160a01b03610100909104163314610c355760405162461bcd60e51b8152600401610a0990612b47565b8151835114610c865760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610a09565b60c8835110610cf65760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610a09565b60005b8351811015610d5e576000848281518110610d1657610d16612c26565b602002602001015190506000848381518110610d3457610d34612c26565b60200260200101519050610d49338383611968565b50508080610d5690612c3c565b915050610cf9565b5060019392505050565b6000610d75848484611968565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610dfa5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a09565b610e078533858403611844565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b1e918590610e49908690612b92565b611844565b6005546001600160a01b03610100909104163314610e7e5760405162461bcd60e51b8152600401610a0990612b47565b30600090815260208190526040902054600254610e9d90606490612c04565b811015610f125760405162461bcd60e51b815260206004820152603e60248201527f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e2060448201527f3125206f6620746f6b656e7320737475636b206f6e20636f6e747261637400006064820152608401610a09565b610f1a6121ed565b6040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a150565b6005546001600160a01b03610100909104163314610f805760405162461bcd60e51b8152600401610a0990612b47565b60108290556011819055610f948183612b92565b600f81905560141015610a7b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610a09565b6005546001600160a01b036101009091041633146110195760405162461bcd60e51b8152600401610a0990612b47565b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b6005546000906001600160a01b0361010090910416331461109c5760405162461bcd60e51b8152600401610a0990612b47565b50600b805463ff0000ff19169055600e805460ff19169055600190565b6005546001600160a01b036101009091041633146110e95760405162461bcd60e51b8152600401610a0990612b47565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6005546001600160a01b036101009091041633146111445760405162461bcd60e51b8152600401610a0990612b47565b600b805462ffff00191662010100179055565b6005546001600160a01b036101009091041633146111875760405162461bcd60e51b8152600401610a0990612b47565b600b8054911515620100000262ff000019909216919091179055565b606060048054610a8e90612baa565b6005546001600160a01b036101009091041633146111e25760405162461bcd60e51b8152600401610a0990612b47565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561128a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a09565b610a7b8282612370565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156113165760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a09565b610d5e3385858403611844565b6000610b1e338484611968565b6005546001600160a01b036101009091041633146113605760405162461bcd60e51b8152600401610a0990612b47565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b036101009091041633146113ed5760405162461bcd60e51b8152600401610a0990612b47565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0361010090910416331461147c5760405162461bcd60e51b8152600401610a0990612b47565b633b9aca006103e861148d60025490565b611498906004612be5565b6114a29190612c04565b6114ac9190612c04565b8110156115075760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e342560e01b6064820152608401610a09565b61151581633b9aca00612be5565b600a5550565b6005546000906001600160a01b0361010090910416331461154e5760405162461bcd60e51b8152600401610a0990612b47565b620186a061155b60025490565b611566906001612be5565b6115709190612c04565b8210156115dd5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a09565b6103e86115e960025490565b6115f4906005612be5565b6115fe9190612c04565b82111561166a5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610a09565b50600981905560015b919050565b6005546001600160a01b036101009091041633146116a85760405162461bcd60e51b8152600401610a0990612b47565b6007546040516001600160a01b03918216918316907f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b036101009091041633146117385760405162461bcd60e51b8152600401610a0990612b47565b50600e805460ff19169055600190565b6005546001600160a01b036101009091041633146117785760405162461bcd60e51b8152600401610a0990612b47565b6001600160a01b0381166117dd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a09565b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6001600160a01b0383166118a65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a09565b6001600160a01b0382166119075760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a09565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661198e5760405162461bcd60e51b8152600401610a0990612c57565b6001600160a01b0382166119b45760405162461bcd60e51b8152600401610a0990612c9c565b806119ca576119c5838360006123c4565b505050565b600b5460ff1615611f1e576005546001600160a01b038481166101009092041614801590611a0b57506005546001600160a01b038381166101009092041614155b8015611a1f57506001600160a01b03821615155b8015611a3657506001600160a01b03821661dead14155b8015611a4c5750600554600160a81b900460ff16155b15611f1e57600b54610100900460ff16611ae4576001600160a01b03831660009081526017602052604090205460ff1680611a9f57506001600160a01b03821660009081526017602052604090205460ff165b611ae45760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a09565b600b546301000000900460ff168015611b1557506001600160a01b03831660009081526019602052604090205460ff165b15611b6c57600c543a1115611b6c5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610a09565b600e5460ff1615611cb8576005546001600160a01b038381166101009092041614801590611bcc57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611c0a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15611cb857326000908152600d60205260409020544311611ca55760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610a09565b326000908152600d602052604090204390555b6001600160a01b03831660009081526019602052604090205460ff168015611cf957506001600160a01b03821660009081526018602052604090205460ff16155b15611ddd57600854811115611d6e5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610a09565b600a546001600160a01b038316600090815260208190526040902054611d949083612b92565b1115611dd85760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a09565b611f1e565b6001600160a01b03821660009081526019602052604090205460ff168015611e1e57506001600160a01b03831660009081526018602052604090205460ff16155b15611e9457600854811115611dd85760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610a09565b6001600160a01b03831660009081526018602052604090205460ff16611f1e57600a546001600160a01b038316600090815260208190526040902054611eda9083612b92565b1115611f1e5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a09565b3060009081526020819052604090205460095481108015908190611f4a5750600b5462010000900460ff165b8015611f605750600554600160a81b900460ff16155b8015611f8557506001600160a01b03851660009081526019602052604090205460ff16155b8015611faa57506001600160a01b03851660009081526017602052604090205460ff16155b8015611fcf57506001600160a01b03841660009081526017602052604090205460ff16155b15611ffd576005805460ff60a81b1916600160a81b179055611fef6121ed565b6005805460ff60a81b191690555b6005546001600160a01b03861660009081526017602052604090205460ff600160a81b90920482161591168061204b57506001600160a01b03851660009081526017602052604090205460ff165b15612054575060005b600081156121d9576001600160a01b03861660009081526019602052604090205460ff16801561208657506000601254115b1561210e5760646012548661209b9190612be5565b6120a59190612c04565b9050601254601454826120b89190612be5565b6120c29190612c04565b601660008282546120d39190612b92565b90915550506012546013546120e89083612be5565b6120f29190612c04565b601560008282546121039190612b92565b909155506121bb9050565b6001600160a01b03871660009081526019602052604090205460ff16801561213857506000600f54115b156121bb576064600f548661214d9190612be5565b6121579190612c04565b9050600f546011548261216a9190612be5565b6121749190612c04565b601660008282546121859190612b92565b9091555050600f5460105461219a9083612be5565b6121a49190612c04565b601560008282546121b59190612b92565b90915550505b80156121cc576121cc8730836123c4565b6121d68186612cdf565b94505b6121e48787876123c4565b50505050505050565b30600090815260208190526040812054905060006015546016546122119190612b92565b90506000821580612220575081155b1561222a57505050565b60006002836016548661223d9190612be5565b6122479190612c04565b6122519190612c04565b9050600061225f8286612cdf565b90504761226b82612519565b60006122778247612cdf565b90506000866015548361228a9190612be5565b6122949190612c04565b905060006122a28284612cdf565b60006016819055601555905085158015906122bd5750600081115b15612310576122cc86826126e8565b601654604080518781526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d806000811461235d576040519150601f19603f3d011682016040523d82523d6000602084013e612362565b606091505b505050505050505050505050565b6001600160a01b038216600081815260196020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166123ea5760405162461bcd60e51b8152600401610a0990612c57565b6001600160a01b0382166124105760405162461bcd60e51b8152600401610a0990612c9c565b6001600160a01b038316600090815260208190526040902054818110156124885760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a09565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906124bf908490612b92565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161250b91815260200190565b60405180910390a350505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061254e5761254e612c26565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156125c757600080fd5b505afa1580156125db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ff9190612cf6565b8160018151811061261257612612612c26565b60200260200101906001600160a01b031690816001600160a01b03168152505061265d307f000000000000000000000000000000000000000000000000000000000000000084611844565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906126b2908590600090869030904290600401612d13565b600060405180830381600087803b1580156126cc57600080fd5b505af11580156126e0573d6000803e3d6000fd5b505050505050565b612713307f000000000000000000000000000000000000000000000000000000000000000084611844565b60075460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c4016060604051808303818588803b15801561279d57600080fd5b505af11580156127b1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127d69190612d84565b5050505050565b600080604083850312156127f057600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561282c57858101830151858201604001528201612810565b8181111561283e576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461286957600080fd5b50565b6000806040838503121561287f57600080fd5b823561288a81612854565b946020939093013593505050565b6000602082840312156128aa57600080fd5b5035919050565b6000602082840312156128c357600080fd5b81356128ce81612854565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612914576129146128d5565b604052919050565b600067ffffffffffffffff821115612936576129366128d5565b5060051b60200190565b600082601f83011261295157600080fd5b813560206129666129618361291c565b6128eb565b82815260059290921b8401810191818101908684111561298557600080fd5b8286015b848110156129a05780358352918301918301612989565b509695505050505050565b600080604083850312156129be57600080fd5b823567ffffffffffffffff808211156129d657600080fd5b818501915085601f8301126129ea57600080fd5b813560206129fa6129618361291c565b82815260059290921b84018101918181019089841115612a1957600080fd5b948201945b83861015612a40578535612a3181612854565b82529482019490820190612a1e565b96505086013592505080821115612a5657600080fd5b50612a6385828601612940565b9150509250929050565b600080600060608486031215612a8257600080fd5b8335612a8d81612854565b92506020840135612a9d81612854565b929592945050506040919091013590565b8035801515811461167357600080fd5b60008060408385031215612ad157600080fd5b8235612adc81612854565b9150612aea60208401612aae565b90509250929050565b600060208284031215612b0557600080fd5b6128ce82612aae565b60008060408385031215612b2157600080fd5b8235612b2c81612854565b91506020830135612b3c81612854565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115612ba557612ba5612b7c565b500190565b600181811c90821680612bbe57607f821691505b60208210811415612bdf57634e487b7160e01b600052602260045260246000fd5b50919050565b6000816000190483118215151615612bff57612bff612b7c565b500290565b600082612c2157634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000600019821415612c5057612c50612b7c565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015612cf157612cf1612b7c565b500390565b600060208284031215612d0857600080fd5b81516128ce81612854565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612d635784516001600160a01b031683529383019391830191600101612d3e565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612d9957600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220f3160dcec9c7bdc0bce967ceb3afd99313fe175045323b8aa542a511dab34fd364736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x60806040526004361061031e5760003560e01c80637bce5a04116101ab578063c18bc195116100f7578063e2f4560511610095578063f11a24d31161006f578063f11a24d314610977578063f2fde38b1461098d578063f6374342146109ad578063f8b45b05146109c357600080fd5b8063e2f456051461092c578063e37ba8f914610942578063e884f2601461096257600080fd5b8063d257b34f116100d1578063d257b34f14610890578063d4698016146108b0578063d85ba063146108d0578063dd62ed3e146108e657600080fd5b8063c18bc19514610840578063c876d0b914610860578063c8c8ebe41461087a57600080fd5b80639a7a23d611610164578063aacebbe31161013e578063aacebbe3146107b1578063b62496f5146107d1578063bbc0c74214610801578063c02466681461082057600080fd5b80639a7a23d614610751578063a457c2d714610771578063a9059cbb1461079157600080fd5b80637bce5a04146106b85780638a8c523c146106ce5780638da5cb5b146106e35780639213691314610706578063924de9b71461071c57806395d89b411461073c57600080fd5b8063395093511161026a5780636a486a8e11610223578063715018a6116101fd578063715018a61461064e578063751039fc146106635780637571336a1461067857806375f0a8741461069857600080fd5b80636a486a8e146105e25780636ddd1713146105f857806370a082311461061857600080fd5b8063395093511461050657806349bd5a5e146105265780634a62bb651461055a5780634fbee1931461057457806351f205e4146105ad57806366ca9b83146105c257600080fd5b806318160ddd116102d75780632307b441116102b15780632307b4411461048e57806323b872dd146104ae57806327c8f835146104ce578063313ce567146104e457600080fd5b806318160ddd146104435780631a8145bb146104625780631f3fed8f1461047857600080fd5b806302dbd8f81461032a57806306fdde031461034c578063095ea7b314610377578063106b5da1146103a757806310d5de53146103c75780631694505e146103f757600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5061034a6103453660046127dd565b6109d9565b005b34801561035857600080fd5b50610361610a7f565b60405161036e91906127ff565b60405180910390f35b34801561038357600080fd5b5061039761039236600461286c565b610b11565b604051901515815260200161036e565b3480156103b357600080fd5b5061034a6103c2366004612898565b610b27565b3480156103d357600080fd5b506103976103e23660046128b1565b60186020526000908152604090205460ff1681565b34801561040357600080fd5b5061042b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b03909116815260200161036e565b34801561044f57600080fd5b506002545b60405190815260200161036e565b34801561046e57600080fd5b5061045460165481565b34801561048457600080fd5b5061045460155481565b34801561049a57600080fd5b506103976104a93660046129ab565b610c02565b3480156104ba57600080fd5b506103976104c9366004612a6d565b610d68565b3480156104da57600080fd5b5061042b61dead81565b3480156104f057600080fd5b5060055460405160ff909116815260200161036e565b34801561051257600080fd5b5061039761052136600461286c565b610e12565b34801561053257600080fd5b5061042b7f000000000000000000000000de4c1b7b210811d0edf4dfbb18a8814913a62ddb81565b34801561056657600080fd5b50600b546103979060ff1681565b34801561058057600080fd5b5061039761058f3660046128b1565b6001600160a01b031660009081526017602052604090205460ff1690565b3480156105b957600080fd5b5061034a610e4e565b3480156105ce57600080fd5b5061034a6105dd3660046127dd565b610f50565b3480156105ee57600080fd5b5061045460125481565b34801561060457600080fd5b50600b546103979062010000900460ff1681565b34801561062457600080fd5b506104546106333660046128b1565b6001600160a01b031660009081526020819052604090205490565b34801561065a57600080fd5b5061034a610fe9565b34801561066f57600080fd5b50610397611069565b34801561068457600080fd5b5061034a610693366004612abe565b6110b9565b3480156106a457600080fd5b5060065461042b906001600160a01b031681565b3480156106c457600080fd5b5061045460105481565b3480156106da57600080fd5b5061034a611114565b3480156106ef57600080fd5b5060055461010090046001600160a01b031661042b565b34801561071257600080fd5b5061045460135481565b34801561072857600080fd5b5061034a610737366004612af3565b611157565b34801561074857600080fd5b506103616111a3565b34801561075d57600080fd5b5061034a61076c366004612abe565b6111b2565b34801561077d57600080fd5b5061039761078c36600461286c565b611294565b34801561079d57600080fd5b506103976107ac36600461286c565b611323565b3480156107bd57600080fd5b5061034a6107cc3660046128b1565b611330565b3480156107dd57600080fd5b506103976107ec3660046128b1565b60196020526000908152604090205460ff1681565b34801561080d57600080fd5b50600b5461039790610100900460ff1681565b34801561082c57600080fd5b5061034a61083b366004612abe565b6113bd565b34801561084c57600080fd5b5061034a61085b366004612898565b61144c565b34801561086c57600080fd5b50600e546103979060ff1681565b34801561088657600080fd5b5061045460085481565b34801561089c57600080fd5b506103976108ab366004612898565b61151b565b3480156108bc57600080fd5b5060075461042b906001600160a01b031681565b3480156108dc57600080fd5b50610454600f5481565b3480156108f257600080fd5b50610454610901366004612b0e565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561093857600080fd5b5061045460095481565b34801561094e57600080fd5b5061034a61095d3660046128b1565b611678565b34801561096e57600080fd5b50610397611705565b34801561098357600080fd5b5061045460115481565b34801561099957600080fd5b5061034a6109a83660046128b1565b611748565b3480156109b957600080fd5b5061045460145481565b3480156109cf57600080fd5b50610454600a5481565b6005546001600160a01b03610100909104163314610a125760405162461bcd60e51b8152600401610a0990612b47565b60405180910390fd5b60138290556014819055610a268183612b92565b601281905560141015610a7b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610a09565b5050565b606060038054610a8e90612baa565b80601f0160208091040260200160405190810160405280929190818152602001828054610aba90612baa565b8015610b075780601f10610adc57610100808354040283529160200191610b07565b820191906000526020600020905b815481529060010190602001808311610aea57829003601f168201915b5050505050905090565b6000610b1e338484611844565b50600192915050565b6005546001600160a01b03610100909104163314610b575760405162461bcd60e51b8152600401610a0990612b47565b633b9aca006103e8610b6860025490565b610b73906002612be5565b610b7d9190612c04565b610b879190612c04565b811015610bee5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e322560881b6064820152608401610a09565b610bfc81633b9aca00612be5565b60085550565b6005546000906001600160a01b03610100909104163314610c355760405162461bcd60e51b8152600401610a0990612b47565b8151835114610c865760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610a09565b60c8835110610cf65760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610a09565b60005b8351811015610d5e576000848281518110610d1657610d16612c26565b602002602001015190506000848381518110610d3457610d34612c26565b60200260200101519050610d49338383611968565b50508080610d5690612c3c565b915050610cf9565b5060019392505050565b6000610d75848484611968565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610dfa5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a09565b610e078533858403611844565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b1e918590610e49908690612b92565b611844565b6005546001600160a01b03610100909104163314610e7e5760405162461bcd60e51b8152600401610a0990612b47565b30600090815260208190526040902054600254610e9d90606490612c04565b811015610f125760405162461bcd60e51b815260206004820152603e60248201527f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e2060448201527f3125206f6620746f6b656e7320737475636b206f6e20636f6e747261637400006064820152608401610a09565b610f1a6121ed565b6040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a150565b6005546001600160a01b03610100909104163314610f805760405162461bcd60e51b8152600401610a0990612b47565b60108290556011819055610f948183612b92565b600f81905560141015610a7b5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610a09565b6005546001600160a01b036101009091041633146110195760405162461bcd60e51b8152600401610a0990612b47565b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b6005546000906001600160a01b0361010090910416331461109c5760405162461bcd60e51b8152600401610a0990612b47565b50600b805463ff0000ff19169055600e805460ff19169055600190565b6005546001600160a01b036101009091041633146110e95760405162461bcd60e51b8152600401610a0990612b47565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b6005546001600160a01b036101009091041633146111445760405162461bcd60e51b8152600401610a0990612b47565b600b805462ffff00191662010100179055565b6005546001600160a01b036101009091041633146111875760405162461bcd60e51b8152600401610a0990612b47565b600b8054911515620100000262ff000019909216919091179055565b606060048054610a8e90612baa565b6005546001600160a01b036101009091041633146111e25760405162461bcd60e51b8152600401610a0990612b47565b7f000000000000000000000000de4c1b7b210811d0edf4dfbb18a8814913a62ddb6001600160a01b0316826001600160a01b0316141561128a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a09565b610a7b8282612370565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156113165760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a09565b610d5e3385858403611844565b6000610b1e338484611968565b6005546001600160a01b036101009091041633146113605760405162461bcd60e51b8152600401610a0990612b47565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b036101009091041633146113ed5760405162461bcd60e51b8152600401610a0990612b47565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0361010090910416331461147c5760405162461bcd60e51b8152600401610a0990612b47565b633b9aca006103e861148d60025490565b611498906004612be5565b6114a29190612c04565b6114ac9190612c04565b8110156115075760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e342560e01b6064820152608401610a09565b61151581633b9aca00612be5565b600a5550565b6005546000906001600160a01b0361010090910416331461154e5760405162461bcd60e51b8152600401610a0990612b47565b620186a061155b60025490565b611566906001612be5565b6115709190612c04565b8210156115dd5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a09565b6103e86115e960025490565b6115f4906005612be5565b6115fe9190612c04565b82111561166a5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610a09565b50600981905560015b919050565b6005546001600160a01b036101009091041633146116a85760405162461bcd60e51b8152600401610a0990612b47565b6007546040516001600160a01b03918216918316907f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b036101009091041633146117385760405162461bcd60e51b8152600401610a0990612b47565b50600e805460ff19169055600190565b6005546001600160a01b036101009091041633146117785760405162461bcd60e51b8152600401610a0990612b47565b6001600160a01b0381166117dd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a09565b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6001600160a01b0383166118a65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a09565b6001600160a01b0382166119075760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a09565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661198e5760405162461bcd60e51b8152600401610a0990612c57565b6001600160a01b0382166119b45760405162461bcd60e51b8152600401610a0990612c9c565b806119ca576119c5838360006123c4565b505050565b600b5460ff1615611f1e576005546001600160a01b038481166101009092041614801590611a0b57506005546001600160a01b038381166101009092041614155b8015611a1f57506001600160a01b03821615155b8015611a3657506001600160a01b03821661dead14155b8015611a4c5750600554600160a81b900460ff16155b15611f1e57600b54610100900460ff16611ae4576001600160a01b03831660009081526017602052604090205460ff1680611a9f57506001600160a01b03821660009081526017602052604090205460ff165b611ae45760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a09565b600b546301000000900460ff168015611b1557506001600160a01b03831660009081526019602052604090205460ff165b15611b6c57600c543a1115611b6c5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610a09565b600e5460ff1615611cb8576005546001600160a01b038381166101009092041614801590611bcc57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b8015611c0a57507f000000000000000000000000de4c1b7b210811d0edf4dfbb18a8814913a62ddb6001600160a01b0316826001600160a01b031614155b15611cb857326000908152600d60205260409020544311611ca55760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610a09565b326000908152600d602052604090204390555b6001600160a01b03831660009081526019602052604090205460ff168015611cf957506001600160a01b03821660009081526018602052604090205460ff16155b15611ddd57600854811115611d6e5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610a09565b600a546001600160a01b038316600090815260208190526040902054611d949083612b92565b1115611dd85760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a09565b611f1e565b6001600160a01b03821660009081526019602052604090205460ff168015611e1e57506001600160a01b03831660009081526018602052604090205460ff16155b15611e9457600854811115611dd85760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610a09565b6001600160a01b03831660009081526018602052604090205460ff16611f1e57600a546001600160a01b038316600090815260208190526040902054611eda9083612b92565b1115611f1e5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a09565b3060009081526020819052604090205460095481108015908190611f4a5750600b5462010000900460ff165b8015611f605750600554600160a81b900460ff16155b8015611f8557506001600160a01b03851660009081526019602052604090205460ff16155b8015611faa57506001600160a01b03851660009081526017602052604090205460ff16155b8015611fcf57506001600160a01b03841660009081526017602052604090205460ff16155b15611ffd576005805460ff60a81b1916600160a81b179055611fef6121ed565b6005805460ff60a81b191690555b6005546001600160a01b03861660009081526017602052604090205460ff600160a81b90920482161591168061204b57506001600160a01b03851660009081526017602052604090205460ff165b15612054575060005b600081156121d9576001600160a01b03861660009081526019602052604090205460ff16801561208657506000601254115b1561210e5760646012548661209b9190612be5565b6120a59190612c04565b9050601254601454826120b89190612be5565b6120c29190612c04565b601660008282546120d39190612b92565b90915550506012546013546120e89083612be5565b6120f29190612c04565b601560008282546121039190612b92565b909155506121bb9050565b6001600160a01b03871660009081526019602052604090205460ff16801561213857506000600f54115b156121bb576064600f548661214d9190612be5565b6121579190612c04565b9050600f546011548261216a9190612be5565b6121749190612c04565b601660008282546121859190612b92565b9091555050600f5460105461219a9083612be5565b6121a49190612c04565b601560008282546121b59190612b92565b90915550505b80156121cc576121cc8730836123c4565b6121d68186612cdf565b94505b6121e48787876123c4565b50505050505050565b30600090815260208190526040812054905060006015546016546122119190612b92565b90506000821580612220575081155b1561222a57505050565b60006002836016548661223d9190612be5565b6122479190612c04565b6122519190612c04565b9050600061225f8286612cdf565b90504761226b82612519565b60006122778247612cdf565b90506000866015548361228a9190612be5565b6122949190612c04565b905060006122a28284612cdf565b60006016819055601555905085158015906122bd5750600081115b15612310576122cc86826126e8565b601654604080518781526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d806000811461235d576040519150601f19603f3d011682016040523d82523d6000602084013e612362565b606091505b505050505050505050505050565b6001600160a01b038216600081815260196020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166123ea5760405162461bcd60e51b8152600401610a0990612c57565b6001600160a01b0382166124105760405162461bcd60e51b8152600401610a0990612c9c565b6001600160a01b038316600090815260208190526040902054818110156124885760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a09565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906124bf908490612b92565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161250b91815260200190565b60405180910390a350505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061254e5761254e612c26565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156125c757600080fd5b505afa1580156125db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ff9190612cf6565b8160018151811061261257612612612c26565b60200260200101906001600160a01b031690816001600160a01b03168152505061265d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611844565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906126b2908590600090869030904290600401612d13565b600060405180830381600087803b1580156126cc57600080fd5b505af11580156126e0573d6000803e3d6000fd5b505050505050565b612713307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611844565b60075460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c4016060604051808303818588803b15801561279d57600080fd5b505af11580156127b1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127d69190612d84565b5050505050565b600080604083850312156127f057600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561282c57858101830151858201604001528201612810565b8181111561283e576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461286957600080fd5b50565b6000806040838503121561287f57600080fd5b823561288a81612854565b946020939093013593505050565b6000602082840312156128aa57600080fd5b5035919050565b6000602082840312156128c357600080fd5b81356128ce81612854565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612914576129146128d5565b604052919050565b600067ffffffffffffffff821115612936576129366128d5565b5060051b60200190565b600082601f83011261295157600080fd5b813560206129666129618361291c565b6128eb565b82815260059290921b8401810191818101908684111561298557600080fd5b8286015b848110156129a05780358352918301918301612989565b509695505050505050565b600080604083850312156129be57600080fd5b823567ffffffffffffffff808211156129d657600080fd5b818501915085601f8301126129ea57600080fd5b813560206129fa6129618361291c565b82815260059290921b84018101918181019089841115612a1957600080fd5b948201945b83861015612a40578535612a3181612854565b82529482019490820190612a1e565b96505086013592505080821115612a5657600080fd5b50612a6385828601612940565b9150509250929050565b600080600060608486031215612a8257600080fd5b8335612a8d81612854565b92506020840135612a9d81612854565b929592945050506040919091013590565b8035801515811461167357600080fd5b60008060408385031215612ad157600080fd5b8235612adc81612854565b9150612aea60208401612aae565b90509250929050565b600060208284031215612b0557600080fd5b6128ce82612aae565b60008060408385031215612b2157600080fd5b8235612b2c81612854565b91506020830135612b3c81612854565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115612ba557612ba5612b7c565b500190565b600181811c90821680612bbe57607f821691505b60208210811415612bdf57634e487b7160e01b600052602260045260246000fd5b50919050565b6000816000190483118215151615612bff57612bff612b7c565b500290565b600082612c2157634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000600019821415612c5057612c50612b7c565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015612cf157612cf1612b7c565b500390565b600060208284031215612d0857600080fd5b81516128ce81612854565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612d635784516001600160a01b031683529383019391830191600101612d3e565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612d9957600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220f3160dcec9c7bdc0bce967ceb3afd99313fe175045323b8aa542a511dab34fd364736f6c63430008090033

Deployed Bytecode Sourcemap

25352:16116:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32855:317;;;;;;;;;;-1:-1:-1;32855:317:0;;;;;:::i;:::-;;:::i;:::-;;8831:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11005:169;;;;;;;;;;-1:-1:-1;11005:169:0;;;;;:::i;:::-;;:::i;:::-;;;1490:14:1;;1483:22;1465:41;;1453:2;1438:18;11005:169:0;1325:187:1;31710:229:0;;;;;;;;;;-1:-1:-1;31710:229:0;;;;;:::i;:::-;;:::i;26734:64::-;;;;;;;;;;-1:-1:-1;26734:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25398:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2145:32:1;;;2127:51;;2115:2;2100:18;25398:51:0;1954:230:1;9958:108:0;;;;;;;;;;-1:-1:-1;10046:12:0;;9958:108;;;2335:25:1;;;2323:2;2308:18;9958:108:0;2189:177:1;26547:33:0;;;;;;;;;;;;;;;;26507;;;;;;;;;;;;;;;;30583:659;;;;;;;;;;-1:-1:-1;30583:659:0;;;;;:::i;:::-;;:::i;11656:492::-;;;;;;;;;;-1:-1:-1;11656:492:0;;;;;:::i;:::-;;:::i;25501:53::-;;;;;;;;;;;;25547:6;25501:53;;9793:100;;;;;;;;;;-1:-1:-1;9876:9:0;;9793:100;;9876:9;;;;5669:36:1;;5657:2;5642:18;9793:100:0;5527:184:1;12557:215:0;;;;;;;;;;-1:-1:-1;12557:215:0;;;;;:::i;:::-;;:::i;25456:38::-;;;;;;;;;;;;;;;25788:33;;;;;;;;;;-1:-1:-1;25788:33:0;;;;;;;;34227:125;;;;;;;;;;-1:-1:-1;34227:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;34316:28:0;34292:4;34316:28;;;:19;:28;;;;;;;;;34227:125;41155:310;;;;;;;;;;;;;:::i;32533:::-;;;;;;;;;;-1:-1:-1;32533:310:0;;;;;:::i;:::-;;:::i;26390:28::-;;;;;;;;;;;;;;;;25868:31;;;;;;;;;;-1:-1:-1;25868:31:0;;;;;;;;;;;10129:127;;;;;;;;;;-1:-1:-1;10129:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;10230:18:0;10203:7;10230:18;;;;;;;;;;;;10129:127;19937:148;;;;;;;;;;;;;:::i;30180:192::-;;;;;;;;;;;;;:::i;32176:144::-;;;;;;;;;;-1:-1:-1;32176:144:0;;;;;:::i;:::-;;:::i;25593:30::-;;;;;;;;;;-1:-1:-1;25593:30:0;;;;-1:-1:-1;;;;;25593:30:0;;;26310;;;;;;;;;;;;;;;;30014:110;;;;;;;;;;;;;:::i;19295:79::-;;;;;;;;;;-1:-1:-1;19360:6:0;;;;;-1:-1:-1;;;;;19360:6:0;19295:79;;26425:31;;;;;;;;;;;;;;;;32420:101;;;;;;;;;;-1:-1:-1;32420:101:0;;;;;:::i;:::-;;:::i;9050:104::-;;;;;;;;;;;;;:::i;33370:244::-;;;;;;;;;;-1:-1:-1;33370:244:0;;;;;:::i;:::-;;:::i;13275:413::-;;;;;;;;;;-1:-1:-1;13275:413:0;;;;;:::i;:::-;;:::i;10469:175::-;;;;;;;;;;-1:-1:-1;10469:175:0;;;;;:::i;:::-;;:::i;33818:208::-;;;;;;;;;;-1:-1:-1;33818:208:0;;;;;:::i;:::-;;:::i;26956:58::-;;;;;;;;;;-1:-1:-1;26956:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25828:33;;;;;;;;;;-1:-1:-1;25828:33:0;;;;;;;;;;;33180:182;;;;;;;;;;-1:-1:-1;33180:182:0;;;;;:::i;:::-;;:::i;31951:213::-;;;;;;;;;;-1:-1:-1;31951:213:0;;;;;:::i;:::-;;:::i;26228:39::-;;;;;;;;;;-1:-1:-1;26228:39:0;;;;;;;;25673:35;;;;;;;;;;;;;;;;31317:381;;;;;;;;;;-1:-1:-1;31317:381:0;;;;;:::i;:::-;;:::i;25630:30::-;;;;;;;;;;-1:-1:-1;25630:30:0;;;;-1:-1:-1;;;;;25630:30:0;;;26276:27;;;;;;;;;;;;;;;;10707:151;;;;;;;;;;-1:-1:-1;10707:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;10823:18:0;;;10796:7;10823:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10707:151;25715:33;;;;;;;;;;;;;;;;34038:181;;;;;;;;;;-1:-1:-1;34038:181:0;;;;;:::i;:::-;;:::i;30437:134::-;;;;;;;;;;;;;:::i;26347:30::-;;;;;;;;;;;;;;;;20240:244;;;;;;;;;;-1:-1:-1;20240:244:0;;;;;:::i;:::-;;:::i;26463:31::-;;;;;;;;;;;;;;;;25755:24;;;;;;;;;;;;;;;;32855:317;19507:6;;-1:-1:-1;;;;;19507:6:0;;;;;305:10;19507:22;19499:67;;;;-1:-1:-1;;;19499:67:0;;;;;;;:::i;:::-;;;;;;;;;32955:16:::1;:32:::0;;;32998:16:::1;:32:::0;;;33057:35:::1;33017:13:::0;32974;33057:35:::1;:::i;:::-;33041:13;:51:::0;;;33128:2:::1;-1:-1:-1::0;33111:19:0::1;33103:61;;;::::0;-1:-1:-1;;;33103:61:0;;7607:2:1;33103:61:0::1;::::0;::::1;7589:21:1::0;7646:2;7626:18;;;7619:30;7685:31;7665:18;;;7658:59;7734:18;;33103:61:0::1;7405:353:1::0;33103:61:0::1;32855:317:::0;;:::o;8831:100::-;8885:13;8918:5;8911:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8831:100;:::o;11005:169::-;11088:4;11105:39;305:10;11128:7;11137:6;11105:8;:39::i;:::-;-1:-1:-1;11162:4:0;11005:169;;;;:::o;31710:229::-;19507:6;;-1:-1:-1;;;;;19507:6:0;;;;;305:10;19507:22;19499:67;;;;-1:-1:-1;;;19499:67:0;;;;;;;:::i;:::-;31826:3:::1;31820:4;31800:13;10046:12:::0;;;9958:108;31800:13:::1;:17;::::0;31816:1:::1;31800:17;:::i;:::-;:24;;;;:::i;:::-;31799:30;;;;:::i;:::-;31789:6;:40;;31781:100;;;::::0;-1:-1:-1;;;31781:100:0;;8745:2:1;31781:100:0::1;::::0;::::1;8727:21:1::0;8784:2;8764:18;;;8757:30;8823:34;8803:18;;;8796:62;-1:-1:-1;;;8874:18:1;;;8867:45;8929:19;;31781:100:0::1;8543:411:1::0;31781:100:0::1;31915:16;:6:::0;31925:5:::1;31915:16;:::i;:::-;31892:20;:39:::0;-1:-1:-1;31710:229:0:o;30583:659::-;19507:6;;30696:4;;-1:-1:-1;;;;;19507:6:0;;;;;305:10;19507:22;19499:67;;;;-1:-1:-1;;;19499:67:0;;;;;;;:::i;:::-;30745:7:::1;:14;30720;:21;:39;30712:82;;;::::0;-1:-1:-1;;;30712:82:0;;9161:2:1;30712:82:0::1;::::0;::::1;9143:21:1::0;9200:2;9180:18;;;9173:30;9239:32;9219:18;;;9212:60;9289:18;;30712:82:0::1;8959:354:1::0;30712:82:0::1;30837:3;30813:14;:21;:27;30805:94;;;::::0;-1:-1:-1;;;30805:94:0;;9520:2:1;30805:94:0::1;::::0;::::1;9502:21:1::0;9559:2;9539:18;;;9532:30;9598:34;9578:18;;;9571:62;-1:-1:-1;;;9649:18:1;;;9642:52;9711:19;;30805:94:0::1;9318:418:1::0;30805:94:0::1;31012:9;31008:205;31031:14;:21;31027:1;:25;31008:205;;;31073:14;31090;31105:1;31090:17;;;;;;;;:::i;:::-;;;;;;;31073:34;;31122:14;31139:7;31147:1;31139:10;;;;;;;;:::i;:::-;;;;;;;31122:27;;31164:37;31174:10;31186:6;31194;31164:9;:37::i;:::-;31058:155;;31054:3;;;;;:::i;:::-;;;;31008:205;;;-1:-1:-1::0;31230:4:0::1;::::0;30583:659;-1:-1:-1;;;30583:659:0:o;11656:492::-;11796:4;11813:36;11823:6;11831:9;11842:6;11813:9;:36::i;:::-;-1:-1:-1;;;;;11889:19:0;;11862:24;11889:19;;;:11;:19;;;;;;;;305:10;11889:33;;;;;;;;11941:26;;;;11933:79;;;;-1:-1:-1;;;11933:79:0;;10215:2:1;11933:79:0;;;10197:21:1;10254:2;10234:18;;;10227:30;10293:34;10273:18;;;10266:62;-1:-1:-1;;;10344:18:1;;;10337:38;10392:19;;11933:79:0;10013:404:1;11933:79:0;12048:57;12057:6;305:10;12098:6;12079:16;:25;12048:8;:57::i;:::-;-1:-1:-1;12136:4:0;;11656:492;-1:-1:-1;;;;11656:492:0:o;12557:215::-;305:10;12645:4;12694:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12694:34:0;;;;;;;;;;12645:4;;12662:80;;12685:7;;12694:47;;12731:10;;12694:47;:::i;:::-;12662:8;:80::i;41155:310::-;19507:6;;-1:-1:-1;;;;;19507:6:0;;;;;305:10;19507:22;19499:67;;;;-1:-1:-1;;;19499:67:0;;;;;;;:::i;:::-;41254:4:::1;41210:23;10230:18:::0;;;;;;;;;;;10046:12;;41298:19:::1;::::0;41314:3:::1;::::0;41298:19:::1;:::i;:::-;41279:15;:38;;41271:113;;;::::0;-1:-1:-1;;;41271:113:0;;10624:2:1;41271:113:0::1;::::0;::::1;10606:21:1::0;10663:2;10643:18;;;10636:30;10702:34;10682:18;;;10675:62;10773:32;10753:18;;;10746:60;10823:19;;41271:113:0::1;10422:426:1::0;41271:113:0::1;41395:10;:8;:10::i;:::-;41421:36;::::0;41441:15:::1;2335:25:1::0;;41421:36:0::1;::::0;2323:2:1;2308:18;41421:36:0::1;;;;;;;41199:266;41155:310::o:0;32533:::-;19507:6;;-1:-1:-1;;;;;19507:6:0;;;;;305:10;19507:22;19499:67;;;;-1:-1:-1;;;19499:67:0;;;;;;;:::i;:::-;32632:15:::1;:31:::0;;;32674:15:::1;:31:::0;;;32731:33:::1;32692:13:::0;32650;32731:33:::1;:::i;:::-;32716:12;:48:::0;;;32799:2:::1;-1:-1:-1::0;32783:18:0::1;32775:60;;;::::0;-1:-1:-1;;;32775:60:0;;7607:2:1;32775:60:0::1;::::0;::::1;7589:21:1::0;7646:2;7626:18;;;7619:30;7685:31;7665:18;;;7658:59;7734:18;;32775:60:0::1;7405:353:1::0;19937:148:0;19507:6;;-1:-1:-1;;;;;19507:6:0;;;;;305:10;19507:22;19499:67;;;;-1:-1:-1;;;19499:67:0;;;;;;;:::i;:::-;20028:6:::1;::::0;20007:40:::1;::::0;20044:1:::1;::::0;20028:6:::1;::::0;::::1;-1:-1:-1::0;;;;;20028:6:0::1;::::0;20007:40:::1;::::0;20044:1;;20007:40:::1;20058:6;:19:::0;;-1:-1:-1;;;;;;20058:19:0::1;::::0;;19937:148::o;30180:192::-;19507:6;;30232:4;;-1:-1:-1;;;;;19507:6:0;;;;;305:10;19507:22;19499:67;;;;-1:-1:-1;;;19499:67:0;;;;;;;:::i;:::-;-1:-1:-1;30248:14:0::1;:22:::0;;-1:-1:-1;;30281:22:0;;;30314:20:::1;:28:::0;;-1:-1:-1;;30314:28:0::1;::::0;;30248:22;30180:192;:::o;32176:144::-;19507:6;;-1:-1:-1;;;;;19507:6:0;;;;;305:10;19507:22;19499:67;;;;-1:-1:-1;;;19499:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32266:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;32266:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32176:144::o;30014:110::-;19507:6;;-1:-1:-1;;;;;19507:6:0;;;;;305:10;19507:22;19499:67;;;;-1:-1:-1;;;19499:67:0;;;;;;;:::i;:::-;30067:13:::1;:20:::0;;-1:-1:-1;;30098:18:0;;;;;30014:110::o;32420:101::-;19507:6;;-1:-1:-1;;;;;19507:6:0;;;;;305:10;19507:22;19499:67;;;;-1:-1:-1;;;19499:67:0;;;;;;;:::i;:::-;32492:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;32492:21:0;;::::1;::::0;;;::::1;::::0;;32420:101::o;9050:104::-;9106:13;9139:7;9132:14;;;;;:::i;33370:244::-;19507:6;;-1:-1:-1;;;;;19507:6:0;;;;;305:10;19507:22;19499:67;;;;-1:-1:-1;;;19499:67:0;;;;;;;:::i;:::-;33477:13:::1;-1:-1:-1::0;;;;;33469:21:0::1;:4;-1:-1:-1::0;;;;;33469:21:0::1;;;33461:91;;;::::0;-1:-1:-1;;;33461:91:0;;11055:2:1;33461:91:0::1;::::0;::::1;11037:21:1::0;11094:2;11074:18;;;11067:30;11133:34;11113:18;;;11106:62;11204:27;11184:18;;;11177:55;11249:19;;33461:91:0::1;10853:421:1::0;33461:91:0::1;33565:41;33594:4;33600:5;33565:28;:41::i;13275:413::-:0;305:10;13368:4;13412:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13412:34:0;;;;;;;;;;13465:35;;;;13457:85;;;;-1:-1:-1;;;13457:85:0;;11481:2:1;13457:85:0;;;11463:21:1;11520:2;11500:18;;;11493:30;11559:34;11539:18;;;11532:62;-1:-1:-1;;;11610:18:1;;;11603:35;11655:19;;13457:85:0;11279:401:1;13457:85:0;13578:67;305:10;13601:7;13629:15;13610:16;:34;13578:8;:67::i;10469:175::-;10555:4;10572:42;305:10;10596:9;10607:6;10572:9;:42::i;33818:208::-;19507:6;;-1:-1:-1;;;;;19507:6:0;;;;;305:10;19507:22;19499:67;;;;-1:-1:-1;;;19499:67:0;;;;;;;:::i;:::-;33955:15:::1;::::0;33912:59:::1;::::0;-1:-1:-1;;;;;33955:15:0;;::::1;::::0;33912:59;::::1;::::0;::::1;::::0;33955:15:::1;::::0;33912:59:::1;33982:15;:36:::0;;-1:-1:-1;;;;;;33982:36:0::1;-1:-1:-1::0;;;;;33982:36:0;;;::::1;::::0;;;::::1;::::0;;33818:208::o;33180:182::-;19507:6;;-1:-1:-1;;;;;19507:6:0;;;;;305:10;19507:22;19499:67;;;;-1:-1:-1;;;19499:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33265:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;33265:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33320:34;;1465:41:1;;;33320:34:0::1;::::0;1438:18:1;33320:34:0::1;;;;;;;33180:182:::0;;:::o;31951:213::-;19507:6;;-1:-1:-1;;;;;19507:6:0;;;;;305:10;19507:22;19499:67;;;;-1:-1:-1;;;19499:67:0;;;;;;;:::i;:::-;32073:3:::1;32067:4;32047:13;10046:12:::0;;;9958:108;32047:13:::1;:17;::::0;32063:1:::1;32047:17;:::i;:::-;:24;;;;:::i;:::-;32046:30;;;;:::i;:::-;32036:6;:40;;32028:89;;;::::0;-1:-1:-1;;;32028:89:0;;11887:2:1;32028:89:0::1;::::0;::::1;11869:21:1::0;11926:2;11906:18;;;11899:30;11965:34;11945:18;;;11938:62;-1:-1:-1;;;12016:18:1;;;12009:34;12060:19;;32028:89:0::1;11685:400:1::0;32028:89:0::1;32140:16;:6:::0;32150:5:::1;32140:16;:::i;:::-;32128:9;:28:::0;-1:-1:-1;31951:213:0:o;31317:381::-;19507:6;;31398:4;;-1:-1:-1;;;;;19507:6:0;;;;;305:10;19507:22;19499:67;;;;-1:-1:-1;;;19499:67:0;;;;;;;:::i;:::-;31454:6:::1;31434:13;10046:12:::0;;;9958:108;31434:13:::1;:17;::::0;31450:1:::1;31434:17;:::i;:::-;:26;;;;:::i;:::-;31421:9;:39;;31413:105;;;::::0;-1:-1:-1;;;31413:105:0;;12292:2:1;31413:105:0::1;::::0;::::1;12274:21:1::0;12331:2;12311:18;;;12304:30;12370:34;12350:18;;;12343:62;-1:-1:-1;;;12421:18:1;;;12414:51;12482:19;;31413:105:0::1;12090:417:1::0;31413:105:0::1;31569:4;31549:13;10046:12:::0;;;9958:108;31549:13:::1;:17;::::0;31565:1:::1;31549:17;:::i;:::-;:24;;;;:::i;:::-;31536:9;:37;;31528:102;;;::::0;-1:-1:-1;;;31528:102:0;;12714:2:1;31528:102:0::1;::::0;::::1;12696:21:1::0;12753:2;12733:18;;;12726:30;12792:34;12772:18;;;12765:62;-1:-1:-1;;;12843:18:1;;;12836:50;12903:19;;31528:102:0::1;12512:416:1::0;31528:102:0::1;-1:-1:-1::0;31640:18:0::1;:30:::0;;;31687:4:::1;19577:1;31317:381:::0;;;:::o;34038:181::-;19507:6;;-1:-1:-1;;;;;19507:6:0;;;;;305:10;19507:22;19499:67;;;;-1:-1:-1;;;19499:67:0;;;;;;;:::i;:::-;34157:15:::1;::::0;34123:50:::1;::::0;-1:-1:-1;;;;;34157:15:0;;::::1;::::0;34123:50;::::1;::::0;::::1;::::0;34157:15:::1;::::0;34123:50:::1;34184:15;:27:::0;;-1:-1:-1;;;;;;34184:27:0::1;-1:-1:-1::0;;;;;34184:27:0;;;::::1;::::0;;;::::1;::::0;;34038:181::o;30437:134::-;19507:6;;30497:4;;-1:-1:-1;;;;;19507:6:0;;;;;305:10;19507:22;19499:67;;;;-1:-1:-1;;;19499:67:0;;;;;;;:::i;:::-;-1:-1:-1;30513:20:0::1;:28:::0;;-1:-1:-1;;30513:28:0::1;::::0;;;30437:134;:::o;20240:244::-;19507:6;;-1:-1:-1;;;;;19507:6:0;;;;;305:10;19507:22;19499:67;;;;-1:-1:-1;;;19499:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20329:22:0;::::1;20321:73;;;::::0;-1:-1:-1;;;20321:73:0;;13135:2:1;20321:73:0::1;::::0;::::1;13117:21:1::0;13174:2;13154:18;;;13147:30;13213:34;13193:18;;;13186:62;-1:-1:-1;;;13264:18:1;;;13257:36;13310:19;;20321:73:0::1;12933:402:1::0;20321:73:0::1;20431:6;::::0;20410:38:::1;::::0;-1:-1:-1;;;;;20410:38:0;;::::1;::::0;20431:6:::1;::::0;::::1;;::::0;20410:38:::1;::::0;;;::::1;20459:6;:17:::0;;-1:-1:-1;;;;;20459:17:0;;::::1;;;-1:-1:-1::0;;;;;;20459:17:0;;::::1;::::0;;;::::1;::::0;;20240:244::o;16959:380::-;-1:-1:-1;;;;;17095:19:0;;17087:68;;;;-1:-1:-1;;;17087:68:0;;13542:2:1;17087:68:0;;;13524:21:1;13581:2;13561:18;;;13554:30;13620:34;13600:18;;;13593:62;-1:-1:-1;;;13671:18:1;;;13664:34;13715:19;;17087:68:0;13340:400:1;17087:68:0;-1:-1:-1;;;;;17174:21:0;;17166:68;;;;-1:-1:-1;;;17166:68:0;;13947:2:1;17166:68:0;;;13929:21:1;13986:2;13966:18;;;13959:30;14025:34;14005:18;;;13998:62;-1:-1:-1;;;14076:18:1;;;14069:32;14118:19;;17166:68:0;13745:398:1;17166:68:0;-1:-1:-1;;;;;17247:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17299:32;;2335:25:1;;;17299:32:0;;2308:18:1;17299:32:0;;;;;;;16959:380;;;:::o;34414:4251::-;-1:-1:-1;;;;;34546:18:0;;34538:68;;;;-1:-1:-1;;;34538:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34625:16:0;;34617:64;;;;-1:-1:-1;;;34617:64:0;;;;;;;:::i;:::-;34706:11;34703:92;;34734:28;34750:4;34756:2;34760:1;34734:15;:28::i;:::-;34414:4251;;;:::o;34703:92::-;34818:14;;;;34815:2115;;;19360:6;;-1:-1:-1;;;;;34870:15:0;;;19360:6;;;;;34870:15;;;;:49;;-1:-1:-1;19360:6:0;;-1:-1:-1;;;;;34906:13:0;;;19360:6;;;;;34906:13;;34870:49;:86;;;;-1:-1:-1;;;;;;34940:16:0;;;;34870:86;:128;;;;-1:-1:-1;;;;;;34977:21:0;;34991:6;34977:21;;34870:128;:158;;;;-1:-1:-1;35020:8:0;;-1:-1:-1;;;35020:8:0;;;;35019:9;34870:158;34848:2071;;;35066:13;;;;;;;35062:148;;-1:-1:-1;;;;;35111:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;35140:23:0;;;;;;:19;:23;;;;;;;;35111:52;35103:87;;;;-1:-1:-1;;;35103:87:0;;15160:2:1;35103:87:0;;;15142:21:1;15199:2;15179:18;;;15172:30;-1:-1:-1;;;15218:18:1;;;15211:52;15280:18;;35103:87:0;14958:346:1;35103:87:0;35323:14;;;;;;;:49;;;;-1:-1:-1;;;;;;35341:31:0;;;;;;:25;:31;;;;;;;;35323:49;35319:163;;;35420:13;;35405:11;:28;;35397:65;;;;-1:-1:-1;;;35397:65:0;;15511:2:1;35397:65:0;;;15493:21:1;15550:2;15530:18;;;15523:30;15589:26;15569:18;;;15562:54;15633:18;;35397:65:0;15309:348:1;35397:65:0;35640:20;;;;35636:423;;;19360:6;;-1:-1:-1;;;;;35688:13:0;;;19360:6;;;;;35688:13;;;;:47;;;35719:15;-1:-1:-1;;;;;35705:30:0;:2;-1:-1:-1;;;;;35705:30:0;;;35688:47;:79;;;;;35753:13;-1:-1:-1;;;;;35739:28:0;:2;-1:-1:-1;;;;;35739:28:0;;;35688:79;35684:356;;;35832:9;35803:39;;;;:28;:39;;;;;;35845:12;-1:-1:-1;35795:140:0;;;;-1:-1:-1;;;35795:140:0;;15864:2:1;35795:140:0;;;15846:21:1;15903:2;15883:18;;;15876:30;15942:34;15922:18;;;15915:62;16013:34;15993:18;;;15986:62;-1:-1:-1;;;16064:19:1;;;16057:40;16114:19;;35795:140:0;15662:477:1;35795:140:0;35991:9;35962:39;;;;:28;:39;;;;;36004:12;35962:54;;35684:356;-1:-1:-1;;;;;36128:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;36164:35:0;;;;;;:31;:35;;;;;;;;36163:36;36128:71;36124:780;;;36246:20;;36236:6;:30;;36228:96;;;;-1:-1:-1;;;36228:96:0;;16346:2:1;36228:96:0;;;16328:21:1;16385:2;16365:18;;;16358:30;16424:34;16404:18;;;16397:62;-1:-1:-1;;;16475:18:1;;;16468:51;16536:19;;36228:96:0;16144:417:1;36228:96:0;36385:9;;-1:-1:-1;;;;;10230:18:0;;10203:7;10230:18;;;;;;;;;;;36359:22;;:6;:22;:::i;:::-;:35;;36351:67;;;;-1:-1:-1;;;36351:67:0;;16768:2:1;36351:67:0;;;16750:21:1;16807:2;16787:18;;;16780:30;-1:-1:-1;;;16826:18:1;;;16819:49;16885:18;;36351:67:0;16566:343:1;36351:67:0;36124:780;;;-1:-1:-1;;;;;36512:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;36546:37:0;;;;;;:31;:37;;;;;;;;36545:38;36512:71;36508:396;;;36630:20;;36620:6;:30;;36612:97;;;;-1:-1:-1;;;36612:97:0;;17116:2:1;36612:97:0;;;17098:21:1;17155:2;17135:18;;;17128:30;17194:34;17174:18;;;17167:62;-1:-1:-1;;;17245:18:1;;;17238:52;17307:19;;36612:97:0;16914:418:1;36508:396:0;-1:-1:-1;;;;;36756:37:0;;;;;;:31;:37;;;;;;;;36752:152;;36851:9;;-1:-1:-1;;;;;10230:18:0;;10203:7;10230:18;;;;;;;;;;;36825:22;;:6;:22;:::i;:::-;:35;;36817:67;;;;-1:-1:-1;;;36817:67:0;;16768:2:1;36817:67:0;;;16750:21:1;16807:2;16787:18;;;16780:30;-1:-1:-1;;;16826:18:1;;;16819:49;16885:18;;36817:67:0;16566:343:1;36817:67:0;36993:4;36944:28;10230:18;;;;;;;;;;;37059;;37035:42;;;;;;;37108:35;;-1:-1:-1;37132:11:0;;;;;;;37108:35;:61;;;;-1:-1:-1;37161:8:0;;-1:-1:-1;;;37161:8:0;;;;37160:9;37108:61;:110;;;;-1:-1:-1;;;;;;37187:31:0;;;;;;:25;:31;;;;;;;;37186:32;37108:110;:153;;;;-1:-1:-1;;;;;;37236:25:0;;;;;;:19;:25;;;;;;;;37235:26;37108:153;:194;;;;-1:-1:-1;;;;;;37279:23:0;;;;;;:19;:23;;;;;;;;37278:24;37108:194;37090:338;;;37329:8;:15;;-1:-1:-1;;;;37329:15:0;-1:-1:-1;;;37329:15:0;;;37373:10;:8;:10::i;:::-;37400:8;:16;;-1:-1:-1;;;;37400:16:0;;;37090:338;37464:8;;-1:-1:-1;;;;;37573:25:0;;37448:12;37573:25;;;:19;:25;;;;;;37464:8;-1:-1:-1;;;37464:8:0;;;;;37463:9;;37573:25;;:52;;-1:-1:-1;;;;;;37602:23:0;;;;;;:19;:23;;;;;;;;37573:52;37570:99;;;-1:-1:-1;37652:5:0;37570:99;37689:12;37793:7;37790:822;;;-1:-1:-1;;;;;37844:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;37893:1;37877:13;;:17;37844:50;37840:603;;;37946:3;37930:13;;37921:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;37914:35;;38017:13;;37998:16;;37991:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;37969:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;38097:13:0;;38078:16;;38071:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;38049:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;37840:603:0;;-1:-1:-1;37840:603:0;;-1:-1:-1;;;;;38171:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;38221:1;38206:12;;:16;38171:51;38168:275;;;38271:3;38256:12;;38247:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;38240:34;;38337:12;;38319:15;;38312:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;38290:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;38415:12:0;;38397:15;;38390:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;38368:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;38168:275:0;38474:8;;38471:93;;38506:42;38522:4;38536;38543;38506:15;:42::i;:::-;38586:14;38596:4;38586:14;;:::i;:::-;;;37790:822;38624:33;38640:4;38646:2;38650:6;38624:15;:33::i;:::-;34527:4138;;;;34414:4251;;;:::o;39815:1270::-;39898:4;39854:23;10230:18;;;;;;;;;;;39854:50;;39915:25;39964:18;;39943;;:39;;;;:::i;:::-;39915:67;-1:-1:-1;39993:12:0;40029:20;;;:46;;-1:-1:-1;40053:22:0;;40029:46;40026:60;;;40078:7;;;39815:1270::o;40026:60::-;40155:23;40240:1;40220:17;40199:18;;40181:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;40155:86;-1:-1:-1;40252:26:0;40281:33;40155:86;40281:15;:33;:::i;:::-;40252:62;-1:-1:-1;40363:21:0;40397:36;40252:62;40397:16;:36::i;:::-;40455:18;40476:41;40500:17;40476:21;:41;:::i;:::-;40455:62;;40538:23;40598:17;40577:18;;40564:10;:31;;;;:::i;:::-;:51;;;;:::i;:::-;40538:77;-1:-1:-1;40628:23:0;40654:28;40538:77;40654:10;:28;:::i;:::-;40724:1;40703:18;:22;;;40736:18;:22;40628:54;-1:-1:-1;40774:19:0;;;;;:42;;;40815:1;40797:15;:19;40774:42;40771:210;;;40832:46;40845:15;40862;40832:12;:46::i;:::-;40950:18;;40898:71;;;17669:25:1;;;17725:2;17710:18;;17703:34;;;17753:18;;;17746:34;;;;40898:71:0;;;;;;17657:2:1;40898:71:0;;;40771:210;41022:15;;41014:63;;-1:-1:-1;;;;;41022:15:0;;;;41051:21;;41014:63;;;;41051:21;41022:15;41014:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;39815:1270:0:o;33622:188::-;-1:-1:-1;;;;;33705:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;33705:39:0;;;;;;;;;;33762:40;;33705:39;;:31;33762:40;;;33622:188;;:::o;14178:733::-;-1:-1:-1;;;;;14318:20:0;;14310:70;;;;-1:-1:-1;;;14310:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14399:23:0;;14391:71;;;;-1:-1:-1;;;14391:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14559:17:0;;14535:21;14559:17;;;;;;;;;;;14595:23;;;;14587:74;;;;-1:-1:-1;;;14587:74:0;;18203:2:1;14587:74:0;;;18185:21:1;18242:2;18222:18;;;18215:30;18281:34;18261:18;;;18254:62;-1:-1:-1;;;18332:18:1;;;18325:36;18378:19;;14587:74:0;18001:402:1;14587:74:0;-1:-1:-1;;;;;14697:17:0;;;:9;:17;;;;;;;;;;;14717:22;;;14697:42;;14761:20;;;;;;;;:30;;14733:6;;14697:9;14761:30;;14733:6;;14761:30;:::i;:::-;;;;;;;;14826:9;-1:-1:-1;;;;;14809:35:0;14818:6;-1:-1:-1;;;;;14809:35:0;;14837:6;14809:35;;;;2335:25:1;;2323:2;2308:18;;2189:177;14809:35:0;;;;;;;;14299:612;14178:733;;;:::o;38673:601::-;38825:16;;;38839:1;38825:16;;;;;;;;38801:21;;38825:16;;;;;;;;;;-1:-1:-1;38825:16:0;38801:40;;38870:4;38852;38857:1;38852:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;38852:23:0;;;-1:-1:-1;;;;;38852:23:0;;;;;38896:15;-1:-1:-1;;;;;38896:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38886:4;38891:1;38886:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;38886:32:0;;;-1:-1:-1;;;;;38886:32:0;;;;;38931:62;38948:4;38963:15;38981:11;38931:8;:62::i;:::-;39032:224;;-1:-1:-1;;;39032:224:0;;-1:-1:-1;;;;;39032:15:0;:66;;;;:224;;39113:11;;39139:1;;39183:4;;39210;;39230:15;;39032:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38728:546;38673:601;:::o;39286:521::-;39434:62;39451:4;39466:15;39484:11;39434:8;:62::i;:::-;39743:15;;39539:260;;-1:-1:-1;;;39539:260:0;;39611:4;39539:260;;;19990:34:1;20040:18;;;20033:34;;;39657:1:0;20083:18:1;;;20076:34;;;20126:18;;;20119:34;-1:-1:-1;;;;;39743:15:0;;;20169:19:1;;;20162:44;39773:15:0;20222:19:1;;;20215:35;39539:15:0;:31;;;;;;39578:9;;19924:19:1;;39539:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;39286:521;;:::o;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:597::-;379:4;408:2;437;426:9;419:21;469:6;463:13;512:6;507:2;496:9;492:18;485:34;537:1;547:140;561:6;558:1;555:13;547:140;;;656:14;;;652:23;;646:30;622:17;;;641:2;618:26;611:66;576:10;;547:140;;;705:6;702:1;699:13;696:91;;;775:1;770:2;761:6;750:9;746:22;742:31;735:42;696:91;-1:-1:-1;848:2:1;827:15;-1:-1:-1;;823:29:1;808:45;;;;855:2;804:54;;267:597;-1:-1:-1;;;267:597:1:o;869:131::-;-1:-1:-1;;;;;944:31:1;;934:42;;924:70;;990:1;987;980:12;924:70;869:131;:::o;1005:315::-;1073:6;1081;1134:2;1122:9;1113:7;1109:23;1105:32;1102:52;;;1150:1;1147;1140:12;1102:52;1189:9;1176:23;1208:31;1233:5;1208:31;:::i;:::-;1258:5;1310:2;1295:18;;;;1282:32;;-1:-1:-1;;;1005:315:1:o;1517:180::-;1576:6;1629:2;1617:9;1608:7;1604:23;1600:32;1597:52;;;1645:1;1642;1635:12;1597:52;-1:-1:-1;1668:23:1;;1517:180;-1:-1:-1;1517:180:1:o;1702:247::-;1761:6;1814:2;1802:9;1793:7;1789:23;1785:32;1782:52;;;1830:1;1827;1820:12;1782:52;1869:9;1856:23;1888:31;1913:5;1888:31;:::i;:::-;1938:5;1702:247;-1:-1:-1;;;1702:247:1:o;2371:127::-;2432:10;2427:3;2423:20;2420:1;2413:31;2463:4;2460:1;2453:15;2487:4;2484:1;2477:15;2503:275;2574:2;2568:9;2639:2;2620:13;;-1:-1:-1;;2616:27:1;2604:40;;2674:18;2659:34;;2695:22;;;2656:62;2653:88;;;2721:18;;:::i;:::-;2757:2;2750:22;2503:275;;-1:-1:-1;2503:275:1:o;2783:183::-;2843:4;2876:18;2868:6;2865:30;2862:56;;;2898:18;;:::i;:::-;-1:-1:-1;2943:1:1;2939:14;2955:4;2935:25;;2783:183::o;2971:662::-;3025:5;3078:3;3071:4;3063:6;3059:17;3055:27;3045:55;;3096:1;3093;3086:12;3045:55;3132:6;3119:20;3158:4;3182:60;3198:43;3238:2;3198:43;:::i;:::-;3182:60;:::i;:::-;3276:15;;;3362:1;3358:10;;;;3346:23;;3342:32;;;3307:12;;;;3386:15;;;3383:35;;;3414:1;3411;3404:12;3383:35;3450:2;3442:6;3438:15;3462:142;3478:6;3473:3;3470:15;3462:142;;;3544:17;;3532:30;;3582:12;;;;3495;;3462:142;;;-1:-1:-1;3622:5:1;2971:662;-1:-1:-1;;;;;;2971:662:1:o;3638:1215::-;3756:6;3764;3817:2;3805:9;3796:7;3792:23;3788:32;3785:52;;;3833:1;3830;3823:12;3785:52;3873:9;3860:23;3902:18;3943:2;3935:6;3932:14;3929:34;;;3959:1;3956;3949:12;3929:34;3997:6;3986:9;3982:22;3972:32;;4042:7;4035:4;4031:2;4027:13;4023:27;4013:55;;4064:1;4061;4054:12;4013:55;4100:2;4087:16;4122:4;4146:60;4162:43;4202:2;4162:43;:::i;4146:60::-;4240:15;;;4322:1;4318:10;;;;4310:19;;4306:28;;;4271:12;;;;4346:19;;;4343:39;;;4378:1;4375;4368:12;4343:39;4402:11;;;;4422:217;4438:6;4433:3;4430:15;4422:217;;;4518:3;4505:17;4535:31;4560:5;4535:31;:::i;:::-;4579:18;;4455:12;;;;4617;;;;4422:217;;;4658:5;-1:-1:-1;;4701:18:1;;4688:32;;-1:-1:-1;;4732:16:1;;;4729:36;;;4761:1;4758;4751:12;4729:36;;4784:63;4839:7;4828:8;4817:9;4813:24;4784:63;:::i;:::-;4774:73;;;3638:1215;;;;;:::o;4858:456::-;4935:6;4943;4951;5004:2;4992:9;4983:7;4979:23;4975:32;4972:52;;;5020:1;5017;5010:12;4972:52;5059:9;5046:23;5078:31;5103:5;5078:31;:::i;:::-;5128:5;-1:-1:-1;5185:2:1;5170:18;;5157:32;5198:33;5157:32;5198:33;:::i;:::-;4858:456;;5250:7;;-1:-1:-1;;;5304:2:1;5289:18;;;;5276:32;;4858:456::o;5716:160::-;5781:20;;5837:13;;5830:21;5820:32;;5810:60;;5866:1;5863;5856:12;5881:315;5946:6;5954;6007:2;5995:9;5986:7;5982:23;5978:32;5975:52;;;6023:1;6020;6013:12;5975:52;6062:9;6049:23;6081:31;6106:5;6081:31;:::i;:::-;6131:5;-1:-1:-1;6155:35:1;6186:2;6171:18;;6155:35;:::i;:::-;6145:45;;5881:315;;;;;:::o;6201:180::-;6257:6;6310:2;6298:9;6289:7;6285:23;6281:32;6278:52;;;6326:1;6323;6316:12;6278:52;6349:26;6365:9;6349:26;:::i;6386:388::-;6454:6;6462;6515:2;6503:9;6494:7;6490:23;6486:32;6483:52;;;6531:1;6528;6521:12;6483:52;6570:9;6557:23;6589:31;6614:5;6589:31;:::i;:::-;6639:5;-1:-1:-1;6696:2:1;6681:18;;6668:32;6709:33;6668:32;6709:33;:::i;:::-;6761:7;6751:17;;;6386:388;;;;;:::o;6779:356::-;6981:2;6963:21;;;7000:18;;;6993:30;7059:34;7054:2;7039:18;;7032:62;7126:2;7111:18;;6779:356::o;7140:127::-;7201:10;7196:3;7192:20;7189:1;7182:31;7232:4;7229:1;7222:15;7256:4;7253:1;7246:15;7272:128;7312:3;7343:1;7339:6;7336:1;7333:13;7330:39;;;7349:18;;:::i;:::-;-1:-1:-1;7385:9:1;;7272:128::o;7763:380::-;7842:1;7838:12;;;;7885;;;7906:61;;7960:4;7952:6;7948:17;7938:27;;7906:61;8013:2;8005:6;8002:14;7982:18;7979:38;7976:161;;;8059:10;8054:3;8050:20;8047:1;8040:31;8094:4;8091:1;8084:15;8122:4;8119:1;8112:15;7976:161;;7763:380;;;:::o;8148:168::-;8188:7;8254:1;8250;8246:6;8242:14;8239:1;8236:21;8231:1;8224:9;8217:17;8213:45;8210:71;;;8261:18;;:::i;:::-;-1:-1:-1;8301:9:1;;8148:168::o;8321:217::-;8361:1;8387;8377:132;;8431:10;8426:3;8422:20;8419:1;8412:31;8466:4;8463:1;8456:15;8494:4;8491:1;8484:15;8377:132;-1:-1:-1;8523:9:1;;8321:217::o;9741:127::-;9802:10;9797:3;9793:20;9790:1;9783:31;9833:4;9830:1;9823:15;9857:4;9854:1;9847:15;9873:135;9912:3;-1:-1:-1;;9933:17:1;;9930:43;;;9953:18;;:::i;:::-;-1:-1:-1;10000:1:1;9989:13;;9873:135::o;14148:401::-;14350:2;14332:21;;;14389:2;14369:18;;;14362:30;14428:34;14423:2;14408:18;;14401:62;-1:-1:-1;;;14494:2:1;14479:18;;14472:35;14539:3;14524:19;;14148:401::o;14554:399::-;14756:2;14738:21;;;14795:2;14775:18;;;14768:30;14834:34;14829:2;14814:18;;14807:62;-1:-1:-1;;;14900:2:1;14885:18;;14878:33;14943:3;14928:19;;14554:399::o;17337:125::-;17377:4;17405:1;17402;17399:8;17396:34;;;17410:18;;:::i;:::-;-1:-1:-1;17447:9:1;;17337:125::o;18408:251::-;18478:6;18531:2;18519:9;18510:7;18506:23;18502:32;18499:52;;;18547:1;18544;18537:12;18499:52;18579:9;18573:16;18598:31;18623:5;18598:31;:::i;18664:980::-;18926:4;18974:3;18963:9;18959:19;19005:6;18994:9;18987:25;19031:2;19069:6;19064:2;19053:9;19049:18;19042:34;19112:3;19107:2;19096:9;19092:18;19085:31;19136:6;19171;19165:13;19202:6;19194;19187:22;19240:3;19229:9;19225:19;19218:26;;19279:2;19271:6;19267:15;19253:29;;19300:1;19310:195;19324:6;19321:1;19318:13;19310:195;;;19389:13;;-1:-1:-1;;;;;19385:39:1;19373:52;;19480:15;;;;19445:12;;;;19421:1;19339:9;19310:195;;;-1:-1:-1;;;;;;;19561:32:1;;;;19556:2;19541:18;;19534:60;-1:-1:-1;;;19625:3:1;19610:19;19603:35;19522:3;18664:980;-1:-1:-1;;;18664:980:1:o;20261:306::-;20349:6;20357;20365;20418:2;20406:9;20397:7;20393:23;20389:32;20386:52;;;20434:1;20431;20424:12;20386:52;20463:9;20457:16;20447:26;;20513:2;20502:9;20498:18;20492:25;20482:35;;20557:2;20546:9;20542:18;20536:25;20526:35;;20261:306;;;;;:::o

Swarm Source

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