ETH Price: $2,515.46 (+2.50%)

Token

CHIEF KEEF ($KEEF)
 

Overview

Max Total Supply

300,300,300 $KEEF

Holders

28

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
27,854,437.30931155 $KEEF

Value
$0.00
0xf5026aba65255b5553441ba3c9c371136143b2dc
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:
KEEF

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol


pragma solidity >=0.5.0;

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

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

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

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

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

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol


pragma solidity >=0.6.2;

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

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol


pragma solidity >=0.6.2;


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

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

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

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev 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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount) external returns (bool);
}

// File: contracts/keef.sol


pragma solidity 0.8.19;







contract KEEF is Context, IERC20, Ownable {
    using SafeMath for uint256;
    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private bots;
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = false;
    address payable private _taxWallet;

    uint256 private _initialBuyTax=20;
    uint256 private _initialSellTax=25;
    uint256 private _finalBuyTax=2;
    uint256 private _finalSellTax=3;
    uint256 private _reduceBuyTaxAt=10;
    uint256 private _reduceSellTaxAt=25;
    uint256 private _preventSwapBefore=10;
    uint256 private _buyCount=0;

    uint8 private constant _decimals = 8;
    uint256 private constant _tTotal = 300300300 * 10**uint256(_decimals);
    string private constant _name = unicode"CHIEF KEEF";
    string private constant _symbol = unicode"$KEEF";
    uint256 public _maxTxAmount = _tTotal / 100;
    uint256 public _maxWalletSize = _tTotal / 100;
    uint256 public _taxSwapThreshold= 0 * 10**uint256(_decimals);
    uint256 public _maxTaxSwap = _tTotal / 100;

    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = false;

    event MaxTxAmountUpdated(uint _maxTxAmount);
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor () {
        _taxWallet = payable(0xAd065306edc07906FEd63143040003347eCD6BDF); // TAX WALLET
        _balances[_msgSender()] = _tTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_taxWallet] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }

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

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        uint256 taxAmount=0;
        if (from != owner() && to != owner()) {
            require(!bots[from] && !bots[to]);

            if (transferDelayEnabled) {
                if (to != address(uniswapV2Router) && to != address(uniswapV2Pair)) {
                  require(_holderLastTransferTimestamp[tx.origin] < block.number,"Only one transfer per block allowed.");
                  _holderLastTransferTimestamp[tx.origin] = block.number;
                }
            }

            if (from == uniswapV2Pair && to != address(uniswapV2Router) && ! _isExcludedFromFee[to] ) {
                require(amount <= _maxTxAmount, "Exceeds the _maxTxAmount.");
                require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the maxWalletSize.");
                _buyCount++;
            }


            taxAmount = amount.mul((_buyCount>_reduceBuyTaxAt)?_finalBuyTax:_initialBuyTax).div(100);
            if(to == uniswapV2Pair && from!= address(this) ){
                taxAmount = amount.mul((_buyCount>_reduceSellTaxAt)?_finalSellTax:_initialSellTax).div(100);
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            if (!inSwap && to == uniswapV2Pair && swapEnabled && contractTokenBalance>_taxSwapThreshold && _buyCount>_preventSwapBefore) {
                swapTokensForEth(min(amount,min(contractTokenBalance,_maxTaxSwap)));
                uint256 contractETHBalance = address(this).balance;
                if(contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
        }

        if(taxAmount>0){
          _balances[address(this)]=_balances[address(this)].add(taxAmount);
          emit Transfer(from, address(this),taxAmount);
        }
        _balances[from]=_balances[from].sub(amount);
        _balances[to]=_balances[to].add(amount.sub(taxAmount));
        emit Transfer(from, to, amount.sub(taxAmount));
    }


    function min(uint256 a, uint256 b) private pure returns (uint256){
      return (a>b)?b:a;
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        if(tokenAmount==0){return;}
        if(!tradingOpen){return;}
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function removeLimits() external onlyOwner{
        _maxTxAmount = _tTotal;
        _maxWalletSize=_tTotal;
        transferDelayEnabled=false;
        emit MaxTxAmountUpdated(_tTotal);
    }

    function sendETHToFee(uint256 amount) private {
        _taxWallet.transfer(amount);
    }

    function isBot(address a) public view returns (bool){
      return bots[a];
    }

    function openTrading() external onlyOwner() {
        require(!tradingOpen,"trading is already open");
        uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        swapEnabled = true;
        tradingOpen = true;
    }

    receive() external payable {}

    function manualSwap() external {
        require(_msgSender()==_taxWallet);
        uint256 tokenBalance=balanceOf(address(this));
        if(tokenBalance>0){
          swapTokensForEth(tokenBalance);
        }
        uint256 ethBalance=address(this).balance;
        if(ethBalance>0){
          sendETHToFee(ethBalance);
        }
    }

    
    
}

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":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTaxSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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"},{"stateMutability":"payable","type":"receive"}]

60806040526000600660006101000a81548160ff0219169083151502179055506014600755601960085560026009556003600a55600a600b556019600c55600a600d556000600e556064600860ff16600a6200005c919062000694565b6311e6380c6200006d9190620006e5565b6200007991906200075f565b600f556064600860ff16600a62000091919062000694565b6311e6380c620000a29190620006e5565b620000ae91906200075f565b601055600860ff16600a620000c4919062000694565b6000620000d29190620006e5565b6011556064600860ff16600a620000ea919062000694565b6311e6380c620000fb9190620006e5565b6200010791906200075f565b6012556000601460156101000a81548160ff0219169083151502179055506000601460166101000a81548160ff0219169083151502179055503480156200014d57600080fd5b506200016e620001626200041260201b60201c565b6200041a60201b60201c565b73ad065306edc07906fed63143040003347ecd6bdf600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600860ff16600a620001d6919062000694565b6311e6380c620001e79190620006e5565b60016000620001fb6200041260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600360006200024f620004de60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160036000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620003826200041260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600860ff16600a620003e4919062000694565b6311e6380c620003f59190620006e5565b604051620004049190620007a8565b60405180910390a3620007c5565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000595578086048111156200056d576200056c62000507565b5b60018516156200057d5780820291505b80810290506200058d8562000536565b94506200054d565b94509492505050565b600082620005b0576001905062000683565b81620005c0576000905062000683565b8160018114620005d95760028114620005e4576200061a565b600191505062000683565b60ff841115620005f957620005f862000507565b5b8360020a91508482111562000613576200061262000507565b5b5062000683565b5060208310610133831016604e8410600b8410161715620006545782820a9050838111156200064e576200064d62000507565b5b62000683565b62000663848484600162000543565b925090508184048111156200067d576200067c62000507565b5b81810290505b9392505050565b6000819050919050565b6000620006a1826200068a565b9150620006ae836200068a565b9250620006dd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200059e565b905092915050565b6000620006f2826200068a565b9150620006ff836200068a565b92508282026200070f816200068a565b9150828204841483151762000729576200072862000507565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200076c826200068a565b915062000779836200068a565b9250826200078c576200078b62000730565b5b828204905092915050565b620007a2816200068a565b82525050565b6000602082019050620007bf600083018462000797565b92915050565b612f6280620007d56000396000f3fe60806040526004361061012e5760003560e01c8063751039fc116100ab578063a9059cbb1161006f578063a9059cbb146103cb578063bf474bed14610408578063c876d0b914610433578063c9567bf91461045e578063dd62ed3e14610475578063f2fde38b146104b257610135565b8063751039fc146103085780637d1db4a51461031f5780638da5cb5b1461034a5780638f9a55c01461037557806395d89b41146103a057610135565b8063313ce567116100f2578063313ce567146102355780633bbac5791461026057806351bc3c851461029d57806370a08231146102b4578063715018a6146102f157610135565b806306fdde031461013a578063095ea7b3146101655780630faee56f146101a257806318160ddd146101cd57806323b872dd146101f857610135565b3661013557005b600080fd5b34801561014657600080fd5b5061014f6104db565b60405161015c919061206a565b60405180910390f35b34801561017157600080fd5b5061018c60048036038101906101879190612125565b610518565b6040516101999190612180565b60405180910390f35b3480156101ae57600080fd5b506101b7610536565b6040516101c491906121aa565b60405180910390f35b3480156101d957600080fd5b506101e261053c565b6040516101ef91906121aa565b60405180910390f35b34801561020457600080fd5b5061021f600480360381019061021a91906121c5565b610563565b60405161022c9190612180565b60405180910390f35b34801561024157600080fd5b5061024a61063c565b6040516102579190612234565b60405180910390f35b34801561026c57600080fd5b506102876004803603810190610282919061224f565b610645565b6040516102949190612180565b60405180910390f35b3480156102a957600080fd5b506102b261069b565b005b3480156102c057600080fd5b506102db60048036038101906102d6919061224f565b610738565b6040516102e891906121aa565b60405180910390f35b3480156102fd57600080fd5b50610306610781565b005b34801561031457600080fd5b5061031d610795565b005b34801561032b57600080fd5b5061033461085c565b60405161034191906121aa565b60405180910390f35b34801561035657600080fd5b5061035f610862565b60405161036c919061228b565b60405180910390f35b34801561038157600080fd5b5061038a61088b565b60405161039791906121aa565b60405180910390f35b3480156103ac57600080fd5b506103b5610891565b6040516103c2919061206a565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190612125565b6108ce565b6040516103ff9190612180565b60405180910390f35b34801561041457600080fd5b5061041d6108ec565b60405161042a91906121aa565b60405180910390f35b34801561043f57600080fd5b506104486108f2565b6040516104559190612180565b60405180910390f35b34801561046a57600080fd5b50610473610905565b005b34801561048157600080fd5b5061049c600480360381019061049791906122a6565b610db0565b6040516104a991906121aa565b60405180910390f35b3480156104be57600080fd5b506104d960048036038101906104d4919061224f565b610e37565b005b60606040518060400160405280600a81526020017f4348494546204b45454600000000000000000000000000000000000000000000815250905090565b600061052c610525610eba565b8484610ec2565b6001905092915050565b60125481565b6000600860ff16600a61054f9190612448565b6311e6380c61055e9190612493565b905090565b600061057084848461108b565b6106318461057c610eba565b61062c85604051806060016040528060288152602001612f0560289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006105e2610eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ad09092919063ffffffff16565b610ec2565b600190509392505050565b60006008905090565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166106dc610eba565b73ffffffffffffffffffffffffffffffffffffffff16146106fc57600080fd5b600061070730610738565b9050600081111561071c5761071b81611b25565b5b600047905060008111156107345761073381611dbb565b5b5050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610789611e27565b6107936000611ea5565b565b61079d611e27565b600860ff16600a6107ae9190612448565b6311e6380c6107bd9190612493565b600f81905550600860ff16600a6107d49190612448565b6311e6380c6107e39190612493565b6010819055506000600660006101000a81548160ff0219169083151502179055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600860ff16600a6108369190612448565b6311e6380c6108459190612493565b60405161085291906121aa565b60405180910390a1565b600f5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b60606040518060400160405280600581526020017f244b454546000000000000000000000000000000000000000000000000000000815250905090565b60006108e26108db610eba565b848461108b565b6001905092915050565b60115481565b600660009054906101000a900460ff1681565b61090d611e27565b60148054906101000a900460ff161561095b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095290612521565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506109fc30601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600860ff16600a6109e89190612448565b6311e6380c6109f79190612493565b610ec2565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8d9190612556565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3a9190612556565b6040518363ffffffff1660e01b8152600401610b57929190612583565b6020604051808303816000875af1158015610b76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9a9190612556565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610c2330610738565b600080610c2e610862565b426040518863ffffffff1660e01b8152600401610c50969594939291906125f1565b60606040518083038185885af1158015610c6e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c939190612667565b505050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610d359291906126ba565b6020604051808303816000875af1158015610d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d78919061270f565b506001601460166101000a81548160ff02191690831515021790555060016014806101000a81548160ff021916908315150217905550565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e3f611e27565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea5906127ae565b60405180910390fd5b610eb781611ea5565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2890612840565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f97906128d2565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161107e91906121aa565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f190612964565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611169576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611160906129f6565b60405180910390fd5b600081116111ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a390612a88565b60405180910390fd5b60006111b6610862565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561122457506111f4610862565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561181357600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156112cd5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6112d657600080fd5b600660009054906101000a900460ff161561146357601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156113975750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156114625743600560003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061141d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141490612b1a565b60405180910390fd5b43600560003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561150e5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156115645750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561161f57600f548211156115ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a590612b86565b60405180910390fd5b601054826115bb85610738565b6115c59190612ba6565b1115611606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fd90612c26565b60405180910390fd5b600e600081548092919061161990612c46565b91905055505b61165b606461164d600b54600e541161163a5760075461163e565b6009545b85611f6990919063ffffffff16565b611f7f90919063ffffffff16565b9050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156116e657503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561172a576117276064611719600c54600e54116117065760085461170a565b600a545b85611f6990919063ffffffff16565b611f7f90919063ffffffff16565b90505b600061173530610738565b9050601460159054906101000a900460ff161580156117a15750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156117b95750601460169054906101000a900460ff165b80156117c6575060115481115b80156117d55750600d54600e54115b15611811576117f76117f2846117ed84601254611f95565b611f95565b611b25565b6000479050600081111561180f5761180e47611dbb565b5b505b505b60008111156119175761186e81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fae90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161190e91906121aa565b60405180910390a35b61196982600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fc490919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a106119c28284611fc490919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fae90919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611ab58486611fc490919063ffffffff16565b604051611ac291906121aa565b60405180910390a350505050565b6000838311158290611b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0f919061206a565b60405180910390fd5b5082840390509392505050565b6001601460156101000a81548160ff0219169083151502179055506000810315611d9d5760148054906101000a900460ff1615611d9d576000600267ffffffffffffffff811115611b7957611b78612c8e565b5b604051908082528060200260200182016040528015611ba75781602001602082028036833780820191505090505b5090503081600081518110611bbf57611bbe612cbd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8a9190612556565b81600181518110611c9e57611c9d612cbd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611d0530601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610ec2565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611d69959493929190612daa565b600060405180830381600087803b158015611d8357600080fd5b505af1158015611d97573d6000803e3d6000fd5b50505050505b6000601460156101000a81548160ff02191690831515021790555050565b600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611e23573d6000803e3d6000fd5b5050565b611e2f610eba565b73ffffffffffffffffffffffffffffffffffffffff16611e4d610862565b73ffffffffffffffffffffffffffffffffffffffff1614611ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9a90612e50565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183611f779190612493565b905092915050565b60008183611f8d9190612e9f565b905092915050565b6000818311611fa45782611fa6565b815b905092915050565b60008183611fbc9190612ba6565b905092915050565b60008183611fd29190612ed0565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612014578082015181840152602081019050611ff9565b60008484015250505050565b6000601f19601f8301169050919050565b600061203c82611fda565b6120468185611fe5565b9350612056818560208601611ff6565b61205f81612020565b840191505092915050565b600060208201905081810360008301526120848184612031565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006120bc82612091565b9050919050565b6120cc816120b1565b81146120d757600080fd5b50565b6000813590506120e9816120c3565b92915050565b6000819050919050565b612102816120ef565b811461210d57600080fd5b50565b60008135905061211f816120f9565b92915050565b6000806040838503121561213c5761213b61208c565b5b600061214a858286016120da565b925050602061215b85828601612110565b9150509250929050565b60008115159050919050565b61217a81612165565b82525050565b60006020820190506121956000830184612171565b92915050565b6121a4816120ef565b82525050565b60006020820190506121bf600083018461219b565b92915050565b6000806000606084860312156121de576121dd61208c565b5b60006121ec868287016120da565b93505060206121fd868287016120da565b925050604061220e86828701612110565b9150509250925092565b600060ff82169050919050565b61222e81612218565b82525050565b60006020820190506122496000830184612225565b92915050565b6000602082840312156122655761226461208c565b5b6000612273848285016120da565b91505092915050565b612285816120b1565b82525050565b60006020820190506122a0600083018461227c565b92915050565b600080604083850312156122bd576122bc61208c565b5b60006122cb858286016120da565b92505060206122dc858286016120da565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561236c57808604811115612348576123476122e6565b5b60018516156123575780820291505b808102905061236585612315565b945061232c565b94509492505050565b6000826123855760019050612441565b816123935760009050612441565b81600181146123a957600281146123b3576123e2565b6001915050612441565b60ff8411156123c5576123c46122e6565b5b8360020a9150848211156123dc576123db6122e6565b5b50612441565b5060208310610133831016604e8410600b84101617156124175782820a905083811115612412576124116122e6565b5b612441565b6124248484846001612322565b9250905081840481111561243b5761243a6122e6565b5b81810290505b9392505050565b6000612453826120ef565b915061245e836120ef565b925061248b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612375565b905092915050565b600061249e826120ef565b91506124a9836120ef565b92508282026124b7816120ef565b915082820484148315176124ce576124cd6122e6565b5b5092915050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b600061250b601783611fe5565b9150612516826124d5565b602082019050919050565b6000602082019050818103600083015261253a816124fe565b9050919050565b600081519050612550816120c3565b92915050565b60006020828403121561256c5761256b61208c565b5b600061257a84828501612541565b91505092915050565b6000604082019050612598600083018561227c565b6125a5602083018461227c565b9392505050565b6000819050919050565b6000819050919050565b60006125db6125d66125d1846125ac565b6125b6565b6120ef565b9050919050565b6125eb816125c0565b82525050565b600060c082019050612606600083018961227c565b612613602083018861219b565b61262060408301876125e2565b61262d60608301866125e2565b61263a608083018561227c565b61264760a083018461219b565b979650505050505050565b600081519050612661816120f9565b92915050565b6000806000606084860312156126805761267f61208c565b5b600061268e86828701612652565b935050602061269f86828701612652565b92505060406126b086828701612652565b9150509250925092565b60006040820190506126cf600083018561227c565b6126dc602083018461219b565b9392505050565b6126ec81612165565b81146126f757600080fd5b50565b600081519050612709816126e3565b92915050565b6000602082840312156127255761272461208c565b5b6000612733848285016126fa565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612798602683611fe5565b91506127a38261273c565b604082019050919050565b600060208201905081810360008301526127c78161278b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061282a602483611fe5565b9150612835826127ce565b604082019050919050565b600060208201905081810360008301526128598161281d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006128bc602283611fe5565b91506128c782612860565b604082019050919050565b600060208201905081810360008301526128eb816128af565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061294e602583611fe5565b9150612959826128f2565b604082019050919050565b6000602082019050818103600083015261297d81612941565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006129e0602383611fe5565b91506129eb82612984565b604082019050919050565b60006020820190508181036000830152612a0f816129d3565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000612a72602983611fe5565b9150612a7d82612a16565b604082019050919050565b60006020820190508181036000830152612aa181612a65565b9050919050565b7f4f6e6c79206f6e65207472616e736665722070657220626c6f636b20616c6c6f60008201527f7765642e00000000000000000000000000000000000000000000000000000000602082015250565b6000612b04602483611fe5565b9150612b0f82612aa8565b604082019050919050565b60006020820190508181036000830152612b3381612af7565b9050919050565b7f4578636565647320746865205f6d61785478416d6f756e742e00000000000000600082015250565b6000612b70601983611fe5565b9150612b7b82612b3a565b602082019050919050565b60006020820190508181036000830152612b9f81612b63565b9050919050565b6000612bb1826120ef565b9150612bbc836120ef565b9250828201905080821115612bd457612bd36122e6565b5b92915050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b6000612c10601a83611fe5565b9150612c1b82612bda565b602082019050919050565b60006020820190508181036000830152612c3f81612c03565b9050919050565b6000612c51826120ef565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612c8357612c826122e6565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612d21816120b1565b82525050565b6000612d338383612d18565b60208301905092915050565b6000602082019050919050565b6000612d5782612cec565b612d618185612cf7565b9350612d6c83612d08565b8060005b83811015612d9d578151612d848882612d27565b9750612d8f83612d3f565b925050600181019050612d70565b5085935050505092915050565b600060a082019050612dbf600083018861219b565b612dcc60208301876125e2565b8181036040830152612dde8186612d4c565b9050612ded606083018561227c565b612dfa608083018461219b565b9695505050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e3a602083611fe5565b9150612e4582612e04565b602082019050919050565b60006020820190508181036000830152612e6981612e2d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612eaa826120ef565b9150612eb5836120ef565b925082612ec557612ec4612e70565b5b828204905092915050565b6000612edb826120ef565b9150612ee6836120ef565b9250828203905081811115612efe57612efd6122e6565b5b9291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122052e969b2a1be9e8bc23f9821de90333e8cd088b5e965c61f8c951cb19e68d3d364736f6c63430008130033

Deployed Bytecode

0x60806040526004361061012e5760003560e01c8063751039fc116100ab578063a9059cbb1161006f578063a9059cbb146103cb578063bf474bed14610408578063c876d0b914610433578063c9567bf91461045e578063dd62ed3e14610475578063f2fde38b146104b257610135565b8063751039fc146103085780637d1db4a51461031f5780638da5cb5b1461034a5780638f9a55c01461037557806395d89b41146103a057610135565b8063313ce567116100f2578063313ce567146102355780633bbac5791461026057806351bc3c851461029d57806370a08231146102b4578063715018a6146102f157610135565b806306fdde031461013a578063095ea7b3146101655780630faee56f146101a257806318160ddd146101cd57806323b872dd146101f857610135565b3661013557005b600080fd5b34801561014657600080fd5b5061014f6104db565b60405161015c919061206a565b60405180910390f35b34801561017157600080fd5b5061018c60048036038101906101879190612125565b610518565b6040516101999190612180565b60405180910390f35b3480156101ae57600080fd5b506101b7610536565b6040516101c491906121aa565b60405180910390f35b3480156101d957600080fd5b506101e261053c565b6040516101ef91906121aa565b60405180910390f35b34801561020457600080fd5b5061021f600480360381019061021a91906121c5565b610563565b60405161022c9190612180565b60405180910390f35b34801561024157600080fd5b5061024a61063c565b6040516102579190612234565b60405180910390f35b34801561026c57600080fd5b506102876004803603810190610282919061224f565b610645565b6040516102949190612180565b60405180910390f35b3480156102a957600080fd5b506102b261069b565b005b3480156102c057600080fd5b506102db60048036038101906102d6919061224f565b610738565b6040516102e891906121aa565b60405180910390f35b3480156102fd57600080fd5b50610306610781565b005b34801561031457600080fd5b5061031d610795565b005b34801561032b57600080fd5b5061033461085c565b60405161034191906121aa565b60405180910390f35b34801561035657600080fd5b5061035f610862565b60405161036c919061228b565b60405180910390f35b34801561038157600080fd5b5061038a61088b565b60405161039791906121aa565b60405180910390f35b3480156103ac57600080fd5b506103b5610891565b6040516103c2919061206a565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190612125565b6108ce565b6040516103ff9190612180565b60405180910390f35b34801561041457600080fd5b5061041d6108ec565b60405161042a91906121aa565b60405180910390f35b34801561043f57600080fd5b506104486108f2565b6040516104559190612180565b60405180910390f35b34801561046a57600080fd5b50610473610905565b005b34801561048157600080fd5b5061049c600480360381019061049791906122a6565b610db0565b6040516104a991906121aa565b60405180910390f35b3480156104be57600080fd5b506104d960048036038101906104d4919061224f565b610e37565b005b60606040518060400160405280600a81526020017f4348494546204b45454600000000000000000000000000000000000000000000815250905090565b600061052c610525610eba565b8484610ec2565b6001905092915050565b60125481565b6000600860ff16600a61054f9190612448565b6311e6380c61055e9190612493565b905090565b600061057084848461108b565b6106318461057c610eba565b61062c85604051806060016040528060288152602001612f0560289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006105e2610eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ad09092919063ffffffff16565b610ec2565b600190509392505050565b60006008905090565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166106dc610eba565b73ffffffffffffffffffffffffffffffffffffffff16146106fc57600080fd5b600061070730610738565b9050600081111561071c5761071b81611b25565b5b600047905060008111156107345761073381611dbb565b5b5050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610789611e27565b6107936000611ea5565b565b61079d611e27565b600860ff16600a6107ae9190612448565b6311e6380c6107bd9190612493565b600f81905550600860ff16600a6107d49190612448565b6311e6380c6107e39190612493565b6010819055506000600660006101000a81548160ff0219169083151502179055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600860ff16600a6108369190612448565b6311e6380c6108459190612493565b60405161085291906121aa565b60405180910390a1565b600f5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b60606040518060400160405280600581526020017f244b454546000000000000000000000000000000000000000000000000000000815250905090565b60006108e26108db610eba565b848461108b565b6001905092915050565b60115481565b600660009054906101000a900460ff1681565b61090d611e27565b60148054906101000a900460ff161561095b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095290612521565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506109fc30601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600860ff16600a6109e89190612448565b6311e6380c6109f79190612493565b610ec2565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8d9190612556565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3a9190612556565b6040518363ffffffff1660e01b8152600401610b57929190612583565b6020604051808303816000875af1158015610b76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9a9190612556565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610c2330610738565b600080610c2e610862565b426040518863ffffffff1660e01b8152600401610c50969594939291906125f1565b60606040518083038185885af1158015610c6e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c939190612667565b505050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610d359291906126ba565b6020604051808303816000875af1158015610d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d78919061270f565b506001601460166101000a81548160ff02191690831515021790555060016014806101000a81548160ff021916908315150217905550565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e3f611e27565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea5906127ae565b60405180910390fd5b610eb781611ea5565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2890612840565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f97906128d2565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161107e91906121aa565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f190612964565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611169576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611160906129f6565b60405180910390fd5b600081116111ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a390612a88565b60405180910390fd5b60006111b6610862565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561122457506111f4610862565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561181357600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156112cd5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6112d657600080fd5b600660009054906101000a900460ff161561146357601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156113975750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156114625743600560003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061141d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141490612b1a565b60405180910390fd5b43600560003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561150e5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156115645750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561161f57600f548211156115ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a590612b86565b60405180910390fd5b601054826115bb85610738565b6115c59190612ba6565b1115611606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fd90612c26565b60405180910390fd5b600e600081548092919061161990612c46565b91905055505b61165b606461164d600b54600e541161163a5760075461163e565b6009545b85611f6990919063ffffffff16565b611f7f90919063ffffffff16565b9050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156116e657503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561172a576117276064611719600c54600e54116117065760085461170a565b600a545b85611f6990919063ffffffff16565b611f7f90919063ffffffff16565b90505b600061173530610738565b9050601460159054906101000a900460ff161580156117a15750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156117b95750601460169054906101000a900460ff165b80156117c6575060115481115b80156117d55750600d54600e54115b15611811576117f76117f2846117ed84601254611f95565b611f95565b611b25565b6000479050600081111561180f5761180e47611dbb565b5b505b505b60008111156119175761186e81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fae90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161190e91906121aa565b60405180910390a35b61196982600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fc490919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a106119c28284611fc490919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fae90919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611ab58486611fc490919063ffffffff16565b604051611ac291906121aa565b60405180910390a350505050565b6000838311158290611b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0f919061206a565b60405180910390fd5b5082840390509392505050565b6001601460156101000a81548160ff0219169083151502179055506000810315611d9d5760148054906101000a900460ff1615611d9d576000600267ffffffffffffffff811115611b7957611b78612c8e565b5b604051908082528060200260200182016040528015611ba75781602001602082028036833780820191505090505b5090503081600081518110611bbf57611bbe612cbd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8a9190612556565b81600181518110611c9e57611c9d612cbd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611d0530601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610ec2565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611d69959493929190612daa565b600060405180830381600087803b158015611d8357600080fd5b505af1158015611d97573d6000803e3d6000fd5b50505050505b6000601460156101000a81548160ff02191690831515021790555050565b600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611e23573d6000803e3d6000fd5b5050565b611e2f610eba565b73ffffffffffffffffffffffffffffffffffffffff16611e4d610862565b73ffffffffffffffffffffffffffffffffffffffff1614611ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9a90612e50565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183611f779190612493565b905092915050565b60008183611f8d9190612e9f565b905092915050565b6000818311611fa45782611fa6565b815b905092915050565b60008183611fbc9190612ba6565b905092915050565b60008183611fd29190612ed0565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612014578082015181840152602081019050611ff9565b60008484015250505050565b6000601f19601f8301169050919050565b600061203c82611fda565b6120468185611fe5565b9350612056818560208601611ff6565b61205f81612020565b840191505092915050565b600060208201905081810360008301526120848184612031565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006120bc82612091565b9050919050565b6120cc816120b1565b81146120d757600080fd5b50565b6000813590506120e9816120c3565b92915050565b6000819050919050565b612102816120ef565b811461210d57600080fd5b50565b60008135905061211f816120f9565b92915050565b6000806040838503121561213c5761213b61208c565b5b600061214a858286016120da565b925050602061215b85828601612110565b9150509250929050565b60008115159050919050565b61217a81612165565b82525050565b60006020820190506121956000830184612171565b92915050565b6121a4816120ef565b82525050565b60006020820190506121bf600083018461219b565b92915050565b6000806000606084860312156121de576121dd61208c565b5b60006121ec868287016120da565b93505060206121fd868287016120da565b925050604061220e86828701612110565b9150509250925092565b600060ff82169050919050565b61222e81612218565b82525050565b60006020820190506122496000830184612225565b92915050565b6000602082840312156122655761226461208c565b5b6000612273848285016120da565b91505092915050565b612285816120b1565b82525050565b60006020820190506122a0600083018461227c565b92915050565b600080604083850312156122bd576122bc61208c565b5b60006122cb858286016120da565b92505060206122dc858286016120da565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561236c57808604811115612348576123476122e6565b5b60018516156123575780820291505b808102905061236585612315565b945061232c565b94509492505050565b6000826123855760019050612441565b816123935760009050612441565b81600181146123a957600281146123b3576123e2565b6001915050612441565b60ff8411156123c5576123c46122e6565b5b8360020a9150848211156123dc576123db6122e6565b5b50612441565b5060208310610133831016604e8410600b84101617156124175782820a905083811115612412576124116122e6565b5b612441565b6124248484846001612322565b9250905081840481111561243b5761243a6122e6565b5b81810290505b9392505050565b6000612453826120ef565b915061245e836120ef565b925061248b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612375565b905092915050565b600061249e826120ef565b91506124a9836120ef565b92508282026124b7816120ef565b915082820484148315176124ce576124cd6122e6565b5b5092915050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b600061250b601783611fe5565b9150612516826124d5565b602082019050919050565b6000602082019050818103600083015261253a816124fe565b9050919050565b600081519050612550816120c3565b92915050565b60006020828403121561256c5761256b61208c565b5b600061257a84828501612541565b91505092915050565b6000604082019050612598600083018561227c565b6125a5602083018461227c565b9392505050565b6000819050919050565b6000819050919050565b60006125db6125d66125d1846125ac565b6125b6565b6120ef565b9050919050565b6125eb816125c0565b82525050565b600060c082019050612606600083018961227c565b612613602083018861219b565b61262060408301876125e2565b61262d60608301866125e2565b61263a608083018561227c565b61264760a083018461219b565b979650505050505050565b600081519050612661816120f9565b92915050565b6000806000606084860312156126805761267f61208c565b5b600061268e86828701612652565b935050602061269f86828701612652565b92505060406126b086828701612652565b9150509250925092565b60006040820190506126cf600083018561227c565b6126dc602083018461219b565b9392505050565b6126ec81612165565b81146126f757600080fd5b50565b600081519050612709816126e3565b92915050565b6000602082840312156127255761272461208c565b5b6000612733848285016126fa565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612798602683611fe5565b91506127a38261273c565b604082019050919050565b600060208201905081810360008301526127c78161278b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061282a602483611fe5565b9150612835826127ce565b604082019050919050565b600060208201905081810360008301526128598161281d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006128bc602283611fe5565b91506128c782612860565b604082019050919050565b600060208201905081810360008301526128eb816128af565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061294e602583611fe5565b9150612959826128f2565b604082019050919050565b6000602082019050818103600083015261297d81612941565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006129e0602383611fe5565b91506129eb82612984565b604082019050919050565b60006020820190508181036000830152612a0f816129d3565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000612a72602983611fe5565b9150612a7d82612a16565b604082019050919050565b60006020820190508181036000830152612aa181612a65565b9050919050565b7f4f6e6c79206f6e65207472616e736665722070657220626c6f636b20616c6c6f60008201527f7765642e00000000000000000000000000000000000000000000000000000000602082015250565b6000612b04602483611fe5565b9150612b0f82612aa8565b604082019050919050565b60006020820190508181036000830152612b3381612af7565b9050919050565b7f4578636565647320746865205f6d61785478416d6f756e742e00000000000000600082015250565b6000612b70601983611fe5565b9150612b7b82612b3a565b602082019050919050565b60006020820190508181036000830152612b9f81612b63565b9050919050565b6000612bb1826120ef565b9150612bbc836120ef565b9250828201905080821115612bd457612bd36122e6565b5b92915050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b6000612c10601a83611fe5565b9150612c1b82612bda565b602082019050919050565b60006020820190508181036000830152612c3f81612c03565b9050919050565b6000612c51826120ef565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612c8357612c826122e6565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612d21816120b1565b82525050565b6000612d338383612d18565b60208301905092915050565b6000602082019050919050565b6000612d5782612cec565b612d618185612cf7565b9350612d6c83612d08565b8060005b83811015612d9d578151612d848882612d27565b9750612d8f83612d3f565b925050600181019050612d70565b5085935050505092915050565b600060a082019050612dbf600083018861219b565b612dcc60208301876125e2565b8181036040830152612dde8186612d4c565b9050612ded606083018561227c565b612dfa608083018461219b565b9695505050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e3a602083611fe5565b9150612e4582612e04565b602082019050919050565b60006020820190508181036000830152612e6981612e2d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612eaa826120ef565b9150612eb5836120ef565b925082612ec557612ec4612e70565b5b828204905092915050565b6000612edb826120ef565b9150612ee6836120ef565b9250828203905081811115612efe57612efd6122e6565b5b9291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122052e969b2a1be9e8bc23f9821de90333e8cd088b5e965c61f8c951cb19e68d3d364736f6c63430008130033

Deployed Bytecode Sourcemap

22548:8060:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24503:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25336:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23744:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24780:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25505:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24689:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30243:348;;;;;;;;;;;;;:::i;:::-;;24883:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18814:103;;;;;;;;;;;;;:::i;:::-;;29132:196;;;;;;;;;;;;;:::i;:::-;;23575:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18173:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23625:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24594:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25010:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23677:60;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22934:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29527:671;;;;;;;;;;;;;:::i;:::-;;25185:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19072:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24503:83;24540:13;24573:5;;;;;;;;;;;;;;;;;24566:12;;24503:83;:::o;25336:161::-;25411:4;25428:39;25437:12;:10;:12::i;:::-;25451:7;25460:6;25428:8;:39::i;:::-;25485:4;25478:11;;25336:161;;;;:::o;23744:42::-;;;;:::o;24780:95::-;24833:7;23378:1;23437:18;;23433:2;:22;;;;:::i;:::-;23421:9;:34;;;;:::i;:::-;24853:14;;24780:95;:::o;25505:313::-;25603:4;25620:36;25630:6;25638:9;25649:6;25620:9;:36::i;:::-;25667:121;25676:6;25684:12;:10;:12::i;:::-;25698:89;25736:6;25698:89;;;;;;;;;;;;;;;;;:11;:19;25710:6;25698:19;;;;;;;;;;;;;;;:33;25718:12;:10;:12::i;:::-;25698:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;25667:8;:121::i;:::-;25806:4;25799:11;;25505:313;;;;;:::o;24689:83::-;24730:5;23378:1;24748:16;;24689:83;:::o;29436:::-;29483:4;29504;:7;29509:1;29504:7;;;;;;;;;;;;;;;;;;;;;;;;;29497:14;;29436:83;;;:::o;30243:348::-;30307:10;;;;;;;;;;;30293:24;;:12;:10;:12::i;:::-;:24;;;30285:33;;;;;;30329:20;30350:24;30368:4;30350:9;:24::i;:::-;30329:45;;30401:1;30388:12;:14;30385:73;;;30416:30;30433:12;30416:16;:30::i;:::-;30385:73;30468:18;30487:21;30468:40;;30533:1;30522:10;:12;30519:65;;;30548:24;30561:10;30548:12;:24::i;:::-;30519:65;30274:317;;30243:348::o;24883:119::-;24949:7;24976:9;:18;24986:7;24976:18;;;;;;;;;;;;;;;;24969:25;;24883:119;;;:::o;18814:103::-;18059:13;:11;:13::i;:::-;18879:30:::1;18906:1;18879:18;:30::i;:::-;18814:103::o:0;29132:196::-;18059:13;:11;:13::i;:::-;23378:1:::1;23437:18;;23433:2;:22;;;;:::i;:::-;23421:9;:34;;;;:::i;:::-;29185:12;:22;;;;23378:1;23437:18;;23433:2;:22;;;;:::i;:::-;23421:9;:34;;;;:::i;:::-;29218:14;:22;;;;29272:5;29251:20;;:26;;;;;;;;;;;;;;;;;;29293:27;23378:1;23437:18;;23433:2;:22;;;;:::i;:::-;23421:9;:34;;;;:::i;:::-;29293:27;;;;;;:::i;:::-;;;;;;;;29132:196::o:0;23575:43::-;;;;:::o;18173:87::-;18219:7;18246:6;;;;;;;;;;;18239:13;;18173:87;:::o;23625:45::-;;;;:::o;24594:87::-;24633:13;24666:7;;;;;;;;;;;;;;;;;24659:14;;24594:87;:::o;25010:167::-;25088:4;25105:42;25115:12;:10;:12::i;:::-;25129:9;25140:6;25105:9;:42::i;:::-;25165:4;25158:11;;25010:167;;;;:::o;23677:60::-;;;;:::o;22934:40::-;;;;;;;;;;;;;:::o;29527:671::-;18059:13;:11;:13::i;:::-;29591:11:::1;::::0;::::1;;;;;;;;29590:12;29582:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;29677:42;29640:15;;:80;;;;;;;;;;;;;;;;;;29731:58;29748:4;29763:15;;;;;;;;;;;23378:1;23437:18;;23433:2;:22;;;;:::i;:::-;23421:9;:34;;;;:::i;:::-;29731:8;:58::i;:::-;29834:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29816:55;;;29880:4;29887:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29816:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29800:13;;:110;;;;;;;;;;;;;;;;;;29921:15;;;;;;;;;;;:31;;;29960:21;29991:4;29997:24;30015:4;29997:9;:24::i;:::-;30022:1;30024::::0;30026:7:::1;:5;:7::i;:::-;30034:15;29921:129;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30068:13;;;;;;;;;;;30061:29;;;30099:15;;;;;;;;;;;30117:14;30061:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30157:4;30143:11;;:18;;;;;;;;;;;;;;;;;;30186:4;30172:11;::::0;:18:::1;;;;;;;;;;;;;;;;;;29527:671::o:0;25185:143::-;25266:7;25293:11;:18;25305:5;25293:18;;;;;;;;;;;;;;;:27;25312:7;25293:27;;;;;;;;;;;;;;;;25286:34;;25185:143;;;;:::o;19072:201::-;18059:13;:11;:13::i;:::-;19181:1:::1;19161:22;;:8;:22;;::::0;19153:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19237:28;19256:8;19237:18;:28::i;:::-;19072:201:::0;:::o;16724:98::-;16777:7;16804:10;16797:17;;16724:98;:::o;25826:335::-;25936:1;25919:19;;:5;:19;;;25911:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26017:1;25998:21;;:7;:21;;;25990:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26099:6;26069:11;:18;26081:5;26069:18;;;;;;;;;;;;;;;:27;26088:7;26069:27;;;;;;;;;;;;;;;:36;;;;26137:7;26121:32;;26130:5;26121:32;;;26146:6;26121:32;;;;;;:::i;:::-;;;;;;;;25826:335;;;:::o;26169:2284::-;26273:1;26257:18;;:4;:18;;;26249:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26350:1;26336:16;;:2;:16;;;26328:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26420:1;26411:6;:10;26403:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26478:17;26520:7;:5;:7::i;:::-;26512:15;;:4;:15;;;;:32;;;;;26537:7;:5;:7::i;:::-;26531:13;;:2;:13;;;;26512:32;26508:1589;;;26570:4;:10;26575:4;26570:10;;;;;;;;;;;;;;;;;;;;;;;;;26569:11;:24;;;;;26585:4;:8;26590:2;26585:8;;;;;;;;;;;;;;;;;;;;;;;;;26584:9;26569:24;26561:33;;;;;;26615:20;;;;;;;;;;;26611:346;;;26674:15;;;;;;;;;;;26660:30;;:2;:30;;;;:62;;;;;26708:13;;;;;;;;;;;26694:28;;:2;:28;;;;26660:62;26656:286;;;26795:12;26753:28;:39;26782:9;26753:39;;;;;;;;;;;;;;;;:54;26745:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;26910:12;26868:28;:39;26897:9;26868:39;;;;;;;;;;;;;;;:54;;;;26656:286;26611:346;26985:13;;;;;;;;;;;26977:21;;:4;:21;;;:55;;;;;27016:15;;;;;;;;;;;27002:30;;:2;:30;;;;26977:55;:83;;;;;27038:18;:22;27057:2;27038:22;;;;;;;;;;;;;;;;;;;;;;;;;27036:24;26977:83;26973:313;;;27100:12;;27090:6;:22;;27082:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;27195:14;;27185:6;27169:13;27179:2;27169:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;27161:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;27259:9;;:11;;;;;;;;;:::i;:::-;;;;;;26973:313;27316:76;27388:3;27316:67;27338:15;;27328:9;;:25;27327:55;;27368:14;;27327:55;;;27355:12;;27327:55;27316:6;:10;;:67;;;;:::i;:::-;:71;;:76;;;;:::i;:::-;27304:88;;27416:13;;;;;;;;;;;27410:19;;:2;:19;;;:43;;;;;27448:4;27433:20;;:4;:20;;;;27410:43;27407:174;;;27486:79;27561:3;27486:70;27508:16;;27498:9;;:26;27497:58;;27540:15;;27497:58;;;27526:13;;27497:58;27486:6;:10;;:70;;;;:::i;:::-;:74;;:79;;;;:::i;:::-;27474:91;;27407:174;27597:28;27628:24;27646:4;27628:9;:24::i;:::-;27597:55;;27672:6;;;;;;;;;;;27671:7;:30;;;;;27688:13;;;;;;;;;;;27682:19;;:2;:19;;;27671:30;:45;;;;;27705:11;;;;;;;;;;;27671:45;:87;;;;;27741:17;;27720:20;:38;27671:87;:119;;;;;27772:18;;27762:9;;:28;27671:119;27667:419;;;27811:67;27828:49;27832:6;27839:37;27843:20;27864:11;;27839:3;:37::i;:::-;27828:3;:49::i;:::-;27811:16;:67::i;:::-;27897:26;27926:21;27897:50;;27990:1;27969:18;:22;27966:105;;;28016:35;28029:21;28016:12;:35::i;:::-;27966:105;27792:294;27667:419;26546:1551;26508:1589;28122:1;28112:9;:11;28109:161;;;28162:39;28191:9;28162;:24;28180:4;28162:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;28137:9;:24;28155:4;28137:24;;;;;;;;;;;;;;;:64;;;;28242:4;28219:39;;28228:4;28219:39;;;28248:9;28219:39;;;;;;:::i;:::-;;;;;;;;28109:161;28296:27;28316:6;28296:9;:15;28306:4;28296:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;28280:9;:15;28290:4;28280:15;;;;;;;;;;;;;;;:43;;;;28348:40;28366:21;28377:9;28366:6;:10;;:21;;;;:::i;:::-;28348:9;:13;28358:2;28348:13;;;;;;;;;;;;;;;;:17;;:40;;;;:::i;:::-;28334:9;:13;28344:2;28334:13;;;;;;;;;;;;;;;:54;;;;28419:2;28404:41;;28413:4;28404:41;;;28423:21;28434:9;28423:6;:10;;:21;;;;:::i;:::-;28404:41;;;;;;:::i;:::-;;;;;;;;26238:2215;26169:2284;;;:::o;11021:206::-;11107:7;11165:1;11160;:6;;11168:12;11152:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11207:1;11203;:5;11196:12;;11021:206;;;;;:::o;28569:555::-;24077:4;24068:6;;:13;;;;;;;;;;;;;;;;;;28663:1:::1;28650:11;:14:::0;28647:27;28666:7:::1;28647:27;28688:11;::::0;::::1;;;;;;;;28684:25:::0;28701:7:::1;28684:25;28719:21;28757:1;28743:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28719:40;;28788:4;28770;28775:1;28770:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;28814:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28804:4;28809:1;28804:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;28847:62;28864:4;28879:15;;;;;;;;;;;28897:11;28847:8;:62::i;:::-;28920:15;;;;;;;;;;;:66;;;29001:11;29027:1;29043:4;29070;29090:15;28920:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28636:488;24092:1;24113:5:::0;24104:6;;:14;;;;;;;;;;;;;;;;;;28569:555;:::o;29336:92::-;29393:10;;;;;;;;;;;:19;;:27;29413:6;29393:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29336:92;:::o;18338:132::-;18413:12;:10;:12::i;:::-;18402:23;;:7;:5;:7::i;:::-;:23;;;18394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18338:132::o;19433:191::-;19507:16;19526:6;;;;;;;;;;;19507:25;;19552:8;19543:6;;:17;;;;;;;;;;;;;;;;;;19607:8;19576:40;;19597:8;19576:40;;;;;;;;;;;;19496:128;19433:191;:::o;9480:98::-;9538:7;9569:1;9565;:5;;;;:::i;:::-;9558:12;;9480:98;;;;:::o;9879:::-;9937:7;9968:1;9964;:5;;;;:::i;:::-;9957:12;;9879:98;;;;:::o;28463:::-;28520:7;28547:1;28545;:3;28544:9;;28552:1;28544:9;;;28550:1;28544:9;28537:16;;28463:98;;;;:::o;8742:::-;8800:7;8831:1;8827;:5;;;;:::i;:::-;8820:12;;8742:98;;;;:::o;9123:::-;9181:7;9212:1;9208;:5;;;;:::i;:::-;9201:12;;9123:98;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:329::-;4912:6;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;4853:329;;;;:::o;5188:118::-;5275:24;5293:5;5275:24;:::i;:::-;5270:3;5263:37;5188:118;;:::o;5312:222::-;5405:4;5443:2;5432:9;5428:18;5420:26;;5456:71;5524:1;5513:9;5509:17;5500:6;5456:71;:::i;:::-;5312:222;;;;:::o;5540:474::-;5608:6;5616;5665:2;5653:9;5644:7;5640:23;5636:32;5633:119;;;5671:79;;:::i;:::-;5633:119;5791:1;5816:53;5861:7;5852:6;5841:9;5837:22;5816:53;:::i;:::-;5806:63;;5762:117;5918:2;5944:53;5989:7;5980:6;5969:9;5965:22;5944:53;:::i;:::-;5934:63;;5889:118;5540:474;;;;;:::o;6020:180::-;6068:77;6065:1;6058:88;6165:4;6162:1;6155:15;6189:4;6186:1;6179:15;6206:102;6248:8;6295:5;6292:1;6288:13;6267:34;;6206:102;;;:::o;6314:848::-;6375:5;6382:4;6406:6;6397:15;;6430:5;6421:14;;6444:712;6465:1;6455:8;6452:15;6444:712;;;6560:4;6555:3;6551:14;6545:4;6542:24;6539:50;;;6569:18;;:::i;:::-;6539:50;6619:1;6609:8;6605:16;6602:451;;;7034:4;7027:5;7023:16;7014:25;;6602:451;7084:4;7078;7074:15;7066:23;;7114:32;7137:8;7114:32;:::i;:::-;7102:44;;6444:712;;;6314:848;;;;;;;:::o;7168:1073::-;7222:5;7413:8;7403:40;;7434:1;7425:10;;7436:5;;7403:40;7462:4;7452:36;;7479:1;7470:10;;7481:5;;7452:36;7548:4;7596:1;7591:27;;;;7632:1;7627:191;;;;7541:277;;7591:27;7609:1;7600:10;;7611:5;;;7627:191;7672:3;7662:8;7659:17;7656:43;;;7679:18;;:::i;:::-;7656:43;7728:8;7725:1;7721:16;7712:25;;7763:3;7756:5;7753:14;7750:40;;;7770:18;;:::i;:::-;7750:40;7803:5;;;7541:277;;7927:2;7917:8;7914:16;7908:3;7902:4;7899:13;7895:36;7877:2;7867:8;7864:16;7859:2;7853:4;7850:12;7846:35;7830:111;7827:246;;;7983:8;7977:4;7973:19;7964:28;;8018:3;8011:5;8008:14;8005:40;;;8025:18;;:::i;:::-;8005:40;8058:5;;7827:246;8098:42;8136:3;8126:8;8120:4;8117:1;8098:42;:::i;:::-;8083:57;;;;8172:4;8167:3;8163:14;8156:5;8153:25;8150:51;;;8181:18;;:::i;:::-;8150:51;8230:4;8223:5;8219:16;8210:25;;7168:1073;;;;;;:::o;8247:285::-;8307:5;8331:23;8349:4;8331:23;:::i;:::-;8323:31;;8375:27;8393:8;8375:27;:::i;:::-;8363:39;;8421:104;8458:66;8448:8;8442:4;8421:104;:::i;:::-;8412:113;;8247:285;;;;:::o;8538:410::-;8578:7;8601:20;8619:1;8601:20;:::i;:::-;8596:25;;8635:20;8653:1;8635:20;:::i;:::-;8630:25;;8690:1;8687;8683:9;8712:30;8730:11;8712:30;:::i;:::-;8701:41;;8891:1;8882:7;8878:15;8875:1;8872:22;8852:1;8845:9;8825:83;8802:139;;8921:18;;:::i;:::-;8802:139;8586:362;8538:410;;;;:::o;8954:173::-;9094:25;9090:1;9082:6;9078:14;9071:49;8954:173;:::o;9133:366::-;9275:3;9296:67;9360:2;9355:3;9296:67;:::i;:::-;9289:74;;9372:93;9461:3;9372:93;:::i;:::-;9490:2;9485:3;9481:12;9474:19;;9133:366;;;:::o;9505:419::-;9671:4;9709:2;9698:9;9694:18;9686:26;;9758:9;9752:4;9748:20;9744:1;9733:9;9729:17;9722:47;9786:131;9912:4;9786:131;:::i;:::-;9778:139;;9505:419;;;:::o;9930:143::-;9987:5;10018:6;10012:13;10003:22;;10034:33;10061:5;10034:33;:::i;:::-;9930:143;;;;:::o;10079:351::-;10149:6;10198:2;10186:9;10177:7;10173:23;10169:32;10166:119;;;10204:79;;:::i;:::-;10166:119;10324:1;10349:64;10405:7;10396:6;10385:9;10381:22;10349:64;:::i;:::-;10339:74;;10295:128;10079:351;;;;:::o;10436:332::-;10557:4;10595:2;10584:9;10580:18;10572:26;;10608:71;10676:1;10665:9;10661:17;10652:6;10608:71;:::i;:::-;10689:72;10757:2;10746:9;10742:18;10733:6;10689:72;:::i;:::-;10436:332;;;;;:::o;10774:85::-;10819:7;10848:5;10837:16;;10774:85;;;:::o;10865:60::-;10893:3;10914:5;10907:12;;10865:60;;;:::o;10931:158::-;10989:9;11022:61;11040:42;11049:32;11075:5;11049:32;:::i;:::-;11040:42;:::i;:::-;11022:61;:::i;:::-;11009:74;;10931:158;;;:::o;11095:147::-;11190:45;11229:5;11190:45;:::i;:::-;11185:3;11178:58;11095:147;;:::o;11248:807::-;11497:4;11535:3;11524:9;11520:19;11512:27;;11549:71;11617:1;11606:9;11602:17;11593:6;11549:71;:::i;:::-;11630:72;11698:2;11687:9;11683:18;11674:6;11630:72;:::i;:::-;11712:80;11788:2;11777:9;11773:18;11764:6;11712:80;:::i;:::-;11802;11878:2;11867:9;11863:18;11854:6;11802:80;:::i;:::-;11892:73;11960:3;11949:9;11945:19;11936:6;11892:73;:::i;:::-;11975;12043:3;12032:9;12028:19;12019:6;11975:73;:::i;:::-;11248:807;;;;;;;;;:::o;12061:143::-;12118:5;12149:6;12143:13;12134:22;;12165:33;12192:5;12165:33;:::i;:::-;12061:143;;;;:::o;12210:663::-;12298:6;12306;12314;12363:2;12351:9;12342:7;12338:23;12334:32;12331:119;;;12369:79;;:::i;:::-;12331:119;12489:1;12514:64;12570:7;12561:6;12550:9;12546:22;12514:64;:::i;:::-;12504:74;;12460:128;12627:2;12653:64;12709:7;12700:6;12689:9;12685:22;12653:64;:::i;:::-;12643:74;;12598:129;12766:2;12792:64;12848:7;12839:6;12828:9;12824:22;12792:64;:::i;:::-;12782:74;;12737:129;12210:663;;;;;:::o;12879:332::-;13000:4;13038:2;13027:9;13023:18;13015:26;;13051:71;13119:1;13108:9;13104:17;13095:6;13051:71;:::i;:::-;13132:72;13200:2;13189:9;13185:18;13176:6;13132:72;:::i;:::-;12879:332;;;;;:::o;13217:116::-;13287:21;13302:5;13287:21;:::i;:::-;13280:5;13277:32;13267:60;;13323:1;13320;13313:12;13267:60;13217:116;:::o;13339:137::-;13393:5;13424:6;13418:13;13409:22;;13440:30;13464:5;13440:30;:::i;:::-;13339:137;;;;:::o;13482:345::-;13549:6;13598:2;13586:9;13577:7;13573:23;13569:32;13566:119;;;13604:79;;:::i;:::-;13566:119;13724:1;13749:61;13802:7;13793:6;13782:9;13778:22;13749:61;:::i;:::-;13739:71;;13695:125;13482:345;;;;:::o;13833:225::-;13973:34;13969:1;13961:6;13957:14;13950:58;14042:8;14037:2;14029:6;14025:15;14018:33;13833:225;:::o;14064:366::-;14206:3;14227:67;14291:2;14286:3;14227:67;:::i;:::-;14220:74;;14303:93;14392:3;14303:93;:::i;:::-;14421:2;14416:3;14412:12;14405:19;;14064:366;;;:::o;14436:419::-;14602:4;14640:2;14629:9;14625:18;14617:26;;14689:9;14683:4;14679:20;14675:1;14664:9;14660:17;14653:47;14717:131;14843:4;14717:131;:::i;:::-;14709:139;;14436:419;;;:::o;14861:223::-;15001:34;14997:1;14989:6;14985:14;14978:58;15070:6;15065:2;15057:6;15053:15;15046:31;14861:223;:::o;15090:366::-;15232:3;15253:67;15317:2;15312:3;15253:67;:::i;:::-;15246:74;;15329:93;15418:3;15329:93;:::i;:::-;15447:2;15442:3;15438:12;15431:19;;15090:366;;;:::o;15462:419::-;15628:4;15666:2;15655:9;15651:18;15643:26;;15715:9;15709:4;15705:20;15701:1;15690:9;15686:17;15679:47;15743:131;15869:4;15743:131;:::i;:::-;15735:139;;15462:419;;;:::o;15887:221::-;16027:34;16023:1;16015:6;16011:14;16004:58;16096:4;16091:2;16083:6;16079:15;16072:29;15887:221;:::o;16114:366::-;16256:3;16277:67;16341:2;16336:3;16277:67;:::i;:::-;16270:74;;16353:93;16442:3;16353:93;:::i;:::-;16471:2;16466:3;16462:12;16455:19;;16114:366;;;:::o;16486:419::-;16652:4;16690:2;16679:9;16675:18;16667:26;;16739:9;16733:4;16729:20;16725:1;16714:9;16710:17;16703:47;16767:131;16893:4;16767:131;:::i;:::-;16759:139;;16486:419;;;:::o;16911:224::-;17051:34;17047:1;17039:6;17035:14;17028:58;17120:7;17115:2;17107:6;17103:15;17096:32;16911:224;:::o;17141:366::-;17283:3;17304:67;17368:2;17363:3;17304:67;:::i;:::-;17297:74;;17380:93;17469:3;17380:93;:::i;:::-;17498:2;17493:3;17489:12;17482:19;;17141:366;;;:::o;17513:419::-;17679:4;17717:2;17706:9;17702:18;17694:26;;17766:9;17760:4;17756:20;17752:1;17741:9;17737:17;17730:47;17794:131;17920:4;17794:131;:::i;:::-;17786:139;;17513:419;;;:::o;17938:222::-;18078:34;18074:1;18066:6;18062:14;18055:58;18147:5;18142:2;18134:6;18130:15;18123:30;17938:222;:::o;18166:366::-;18308:3;18329:67;18393:2;18388:3;18329:67;:::i;:::-;18322:74;;18405:93;18494:3;18405:93;:::i;:::-;18523:2;18518:3;18514:12;18507:19;;18166:366;;;:::o;18538:419::-;18704:4;18742:2;18731:9;18727:18;18719:26;;18791:9;18785:4;18781:20;18777:1;18766:9;18762:17;18755:47;18819:131;18945:4;18819:131;:::i;:::-;18811:139;;18538:419;;;:::o;18963:228::-;19103:34;19099:1;19091:6;19087:14;19080:58;19172:11;19167:2;19159:6;19155:15;19148:36;18963:228;:::o;19197:366::-;19339:3;19360:67;19424:2;19419:3;19360:67;:::i;:::-;19353:74;;19436:93;19525:3;19436:93;:::i;:::-;19554:2;19549:3;19545:12;19538:19;;19197:366;;;:::o;19569:419::-;19735:4;19773:2;19762:9;19758:18;19750:26;;19822:9;19816:4;19812:20;19808:1;19797:9;19793:17;19786:47;19850:131;19976:4;19850:131;:::i;:::-;19842:139;;19569:419;;;:::o;19994:223::-;20134:34;20130:1;20122:6;20118:14;20111:58;20203:6;20198:2;20190:6;20186:15;20179:31;19994:223;:::o;20223:366::-;20365:3;20386:67;20450:2;20445:3;20386:67;:::i;:::-;20379:74;;20462:93;20551:3;20462:93;:::i;:::-;20580:2;20575:3;20571:12;20564:19;;20223:366;;;:::o;20595:419::-;20761:4;20799:2;20788:9;20784:18;20776:26;;20848:9;20842:4;20838:20;20834:1;20823:9;20819:17;20812:47;20876:131;21002:4;20876:131;:::i;:::-;20868:139;;20595:419;;;:::o;21020:175::-;21160:27;21156:1;21148:6;21144:14;21137:51;21020:175;:::o;21201:366::-;21343:3;21364:67;21428:2;21423:3;21364:67;:::i;:::-;21357:74;;21440:93;21529:3;21440:93;:::i;:::-;21558:2;21553:3;21549:12;21542:19;;21201:366;;;:::o;21573:419::-;21739:4;21777:2;21766:9;21762:18;21754:26;;21826:9;21820:4;21816:20;21812:1;21801:9;21797:17;21790:47;21854:131;21980:4;21854:131;:::i;:::-;21846:139;;21573:419;;;:::o;21998:191::-;22038:3;22057:20;22075:1;22057:20;:::i;:::-;22052:25;;22091:20;22109:1;22091:20;:::i;:::-;22086:25;;22134:1;22131;22127:9;22120:16;;22155:3;22152:1;22149:10;22146:36;;;22162:18;;:::i;:::-;22146:36;21998:191;;;;:::o;22195:176::-;22335:28;22331:1;22323:6;22319:14;22312:52;22195:176;:::o;22377:366::-;22519:3;22540:67;22604:2;22599:3;22540:67;:::i;:::-;22533:74;;22616:93;22705:3;22616:93;:::i;:::-;22734:2;22729:3;22725:12;22718:19;;22377:366;;;:::o;22749:419::-;22915:4;22953:2;22942:9;22938:18;22930:26;;23002:9;22996:4;22992:20;22988:1;22977:9;22973:17;22966:47;23030:131;23156:4;23030:131;:::i;:::-;23022:139;;22749:419;;;:::o;23174:233::-;23213:3;23236:24;23254:5;23236:24;:::i;:::-;23227:33;;23282:66;23275:5;23272:77;23269:103;;23352:18;;:::i;:::-;23269:103;23399:1;23392:5;23388:13;23381:20;;23174:233;;;:::o;23413:180::-;23461:77;23458:1;23451:88;23558:4;23555:1;23548:15;23582:4;23579:1;23572:15;23599:180;23647:77;23644:1;23637:88;23744:4;23741:1;23734:15;23768:4;23765:1;23758:15;23785:114;23852:6;23886:5;23880:12;23870:22;;23785:114;;;:::o;23905:184::-;24004:11;24038:6;24033:3;24026:19;24078:4;24073:3;24069:14;24054:29;;23905:184;;;;:::o;24095:132::-;24162:4;24185:3;24177:11;;24215:4;24210:3;24206:14;24198:22;;24095:132;;;:::o;24233:108::-;24310:24;24328:5;24310:24;:::i;:::-;24305:3;24298:37;24233:108;;:::o;24347:179::-;24416:10;24437:46;24479:3;24471:6;24437:46;:::i;:::-;24515:4;24510:3;24506:14;24492:28;;24347:179;;;;:::o;24532:113::-;24602:4;24634;24629:3;24625:14;24617:22;;24532:113;;;:::o;24681:732::-;24800:3;24829:54;24877:5;24829:54;:::i;:::-;24899:86;24978:6;24973:3;24899:86;:::i;:::-;24892:93;;25009:56;25059:5;25009:56;:::i;:::-;25088:7;25119:1;25104:284;25129:6;25126:1;25123:13;25104:284;;;25205:6;25199:13;25232:63;25291:3;25276:13;25232:63;:::i;:::-;25225:70;;25318:60;25371:6;25318:60;:::i;:::-;25308:70;;25164:224;25151:1;25148;25144:9;25139:14;;25104:284;;;25108:14;25404:3;25397:10;;24805:608;;;24681:732;;;;:::o;25419:831::-;25682:4;25720:3;25709:9;25705:19;25697:27;;25734:71;25802:1;25791:9;25787:17;25778:6;25734:71;:::i;:::-;25815:80;25891:2;25880:9;25876:18;25867:6;25815:80;:::i;:::-;25942:9;25936:4;25932:20;25927:2;25916:9;25912:18;25905:48;25970:108;26073:4;26064:6;25970:108;:::i;:::-;25962:116;;26088:72;26156:2;26145:9;26141:18;26132:6;26088:72;:::i;:::-;26170:73;26238:3;26227:9;26223:19;26214:6;26170:73;:::i;:::-;25419:831;;;;;;;;:::o;26256:182::-;26396:34;26392:1;26384:6;26380:14;26373:58;26256:182;:::o;26444:366::-;26586:3;26607:67;26671:2;26666:3;26607:67;:::i;:::-;26600:74;;26683:93;26772:3;26683:93;:::i;:::-;26801:2;26796:3;26792:12;26785:19;;26444:366;;;:::o;26816:419::-;26982:4;27020:2;27009:9;27005:18;26997:26;;27069:9;27063:4;27059:20;27055:1;27044:9;27040:17;27033:47;27097:131;27223:4;27097:131;:::i;:::-;27089:139;;26816:419;;;:::o;27241:180::-;27289:77;27286:1;27279:88;27386:4;27383:1;27376:15;27410:4;27407:1;27400:15;27427:185;27467:1;27484:20;27502:1;27484:20;:::i;:::-;27479:25;;27518:20;27536:1;27518:20;:::i;:::-;27513:25;;27557:1;27547:35;;27562:18;;:::i;:::-;27547:35;27604:1;27601;27597:9;27592:14;;27427:185;;;;:::o;27618:194::-;27658:4;27678:20;27696:1;27678:20;:::i;:::-;27673:25;;27712:20;27730:1;27712:20;:::i;:::-;27707:25;;27756:1;27753;27749:9;27741:17;;27780:1;27774:4;27771:11;27768:37;;;27785:18;;:::i;:::-;27768:37;27618:194;;;;:::o

Swarm Source

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