ETH Price: $2,527.39 (-0.03%)

Token

HELLMO (HELLMO)
 

Overview

Max Total Supply

1,000,000,000 HELLMO

Holders

92

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
184,770.67137722 HELLMO

Value
$0.00
0xEC62C98D554920E0f12d921cA7fb59435caF8A1A
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:
Hellmo

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

/**

⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⡏⠠⢉⠒⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡊⠉⠒⠲⠤⣄⠀⠀⠀⠀⠀⠀⠀⠀⠉⣹⢸⢳⡈⢢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢦⠈⣏⠲⡀⢷⡀⠀⠀⠀⠀⠀⣀⠜⢁⡾⠀⢹⡌⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⢀⡀⠀⠀⠀⠀⠀⢷⠸⡆⠹⣄⢳⡀⢀⠤⠒⣋⡤⠖⠋⠀⠀⡼⢃⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⡁⠈⠑⢄⡀⠀⢀⠼⢁⡗⠀⢸⡄⣷⠉⡴⠋⠁⠀⠀⠀⢠⠞⣠⡞⠙⢆⠀⠀⠀⠀⢀⣤⢤⡀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠙⣆⢰⣄⢳⡼⢁⡴⠋⠀⠀⢸⡇⠛⣸⠁⠀⠀⠀⠀⠀⡏⣴⣿⠇⣰⡄⢳⡀⠀⢀⠾⢠⢀⡧⠀⠀⠀⠀⠀⠀⠀
⠀⠀⢀⣤⠤⣄⡀⠀⣠⠏⡸⢹⡎⠁⡾⠀⠀⠀⠀⠸⢬⠷⠽⠀⣠⠀⠀⠀⠀⠻⡀⡤⣰⠃⠹⢤⣉⡟⢁⡴⣿⠉⣍⠳⡀⠀⠀⠀⠀⠀
⠀⠀⠈⢷⡀⢀⠸⠾⢁⡼⠁⠸⡇⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠰⠋⠀⠀⠀⠀⠀⠈⠉⠁⠀⠀⢸⠃⢠⡏⠀⢿⣀⣿⢦⠘⡆⠀⠀⠀⠀
⠀⠀⠀⠀⣳⠄⣷⢠⡎⠀⠀⠀⠙⢦⣷⠀⢸⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢧⣀⣷⠀⠀⠈⠁⢨⡇⣽⠀⠀⠀⠀
⠀⠀⠀⢠⠇⣼⢹⣸⡇⠀⠀⠀⠀⠀⠀⢠⡇⠀⠀⠀⠀⠀⠀⣀⣠⣤⣀⠀⢀⣀⣀⣀⠀⠀⠀⠀⠀⠀⠸⠀⠀⣠⣶⣉⣴⣿⣷⣀⣀⣤
⠀⢿⣷⣾⣶⣷⣿⣏⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⢠⡾⠉⣷⣆⡬⢷⡋⣿⠧⠉⢳⡄⠀⠀⠀⠀⠀⠀⠀⢻⣿⣿⣿⣿⣿⣿⣿⣍
⢶⣿⣿⣿⣿⣿⣿⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣾⣇⠀⠈⣾⠀⠀⢹⡆⠀⠀⢀⣿⣤⡀⠀⠀⠀⠀⠀⣠⣿⣿⣿⣿⣿⣿⠛⠛
⠀⣿⣿⣿⣿⣿⣿⣿⣦⡀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⡀⢀⣼⣿⣷⣾⣿⣿⣿⣿⣷⣀⡀⢀⣼⣿⣿⣿⣿⣿⡏⠈⠲⠀
⠈⠛⢻⡙⣿⣿⣿⣿⣿⣿⣄⠀⠀⠀⢴⣶⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣏⣾⣿⣿⣿⣿⣿⡿⠃⠀⢀⠀
⠀⠀⡼⠧⡈⠻⣿⣿⣿⣿⣿⣷⣄⠀⠀⢹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠛⠒⠀⢀⡼⠃
⢀⣠⡇⢠⣌⣡⠼⠻⣿⣿⣿⣿⣿⣧⡀⠿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠀⠀⠀⠀⢩⠄⡏
⠸⡄⢧⣄⡙⢦⡀⠀⠘⠻⣿⣿⣿⣿⣿⣷⣦⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠋⠀⠀⠀⢀⣀⡤⠞⣰⠏
⠀⠳⡈⠳⣌⠉⠀⠀⠀⠀⠀⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⠀⠀⠀⠀⣼⠀⠶⡾⠁⠀
⠀⠀⠈⠢⣌⣳⡄⠀⠀⢢⡀⠀⠈⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠀⠀⠀⠀⠀⠙⢲⡆⡇⠀⠀
⠀⠀⠀⠀⠊⡹⠃⠀⠀⠀⠃⠀⠀⠀⣹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⣠⠤⠚⢉⡤⠃⠀⠀

Welcome to the inferno of crypto! 
Are you ready to ignite your crypto portfolio? 
Say hello to $HELLMO, the hottest meme coin on the blockchain!

    Telegram:    https://t.me/HellmoToken
    X:           https://x.com/HellmoToken
    Website:     https://www.hellmo-token.com/
            
**/

pragma solidity ^0.8.4;

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

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

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

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

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

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

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

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

pragma solidity ^0.8.4;
/**
 * @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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

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

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

pragma solidity ^0.8.4;

library SafeMath {
    /**
     * @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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

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

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

pragma solidity ^0.8.4;

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

pragma solidity ^0.8.4;

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

pragma solidity ^0.8.4;

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

pragma solidity ^0.8.4;

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

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

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

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

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

pragma solidity ^0.8.4;

contract Hellmo is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    mapping (address => uint256) public _rOwned;

    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public _isExcludedFromFee;
    mapping(address => bool) public _isBlacklisted;

    address public _PresaleAddress = 0x000000000000000000000000000000000000dEaD;
    bool public liquidityLaunched = false;
    bool public isFirstLaunch = true;
    uint256 public lastSnipeTaxBlock;
    uint8 public snipeBlocks = 0;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1000000000000000000;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    uint256 public _maxWalletSize = (_tTotal * 2) / 100;
    uint256 public _maxTaxSwap= 10000000000000000;

    uint256 private _redisFeeOnBuy = 6;
    uint256 private _taxFeeOnBuy = 14;
    
    uint256 private _redisFeeOnSell = 6;
    uint256 private _taxFeeOnSell = 14;
    
    uint256 private _redisFee;
    uint256 private _taxFee;
    
    string private constant _name = "HELLMO";
    string private constant _symbol = "HELLMO";
    uint8 private constant _decimals = 9;
    
    address payable private _appAddress = payable(0xaE969B0a7841E9039059e09F3e566b1238d46b19);
    address payable private _marketingAddress = payable(0xaE969B0a7841E9039059e09F3e566b1238d46b19);
    address payable private _buybackAddress = payable(0xaE969B0a7841E9039059e09F3e566b1238d46b19);
    address payable private _burnAddress = payable(0xaE969B0a7841E9039059e09F3e566b1238d46b19);

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool private inSwap = false;
    bool private swapEnabled = true;
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
    constructor () public {
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

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

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

    function setSnipeBlocks(uint8 _blocks) external onlyOwner {
        require(!liquidityLaunched);
        snipeBlocks = _blocks;
    }

    function setPresaleContract(address payable wallet) external onlyOwner{
        _PresaleAddress = wallet;
        excludeFromFees(_PresaleAddress, true);
    }

    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 tokenFromReflection(_rOwned[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 tokenFromReflection(uint256 rAmount) private view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    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");
        require(!_isBlacklisted[from], 'Blacklisted address');

        _redisFee = 0;
        _taxFee = 0;

        // No adding liquidity before launched
        if (!liquidityLaunched) {
            if (to == uniswapV2Pair) {
                liquidityLaunched = true;
                // high tax ends in x blocks
                lastSnipeTaxBlock = block.number + snipeBlocks;
            }
        }

        //antibot block
        if (from != address(_PresaleAddress)) {
            if(liquidityLaunched && block.number <= lastSnipeTaxBlock && !isFirstLaunch){
                _redisFee = _redisFeeOnBuy;
                _taxFee = _taxFeeOnBuy;
                _tokenTransfer(from,to,amount);
                if (to != address(uniswapV2Pair)) {
                    _isBlacklisted[to]=true;
                }
                return;
            }
        }

        if (liquidityLaunched && isFirstLaunch){
            isFirstLaunch = false;
        }
        
        if (from != owner() && to != owner()) {
            
            uint256 contractTokenBalance = balanceOf(address(this));
            if (!inSwap && from != uniswapV2Pair && swapEnabled && contractTokenBalance > 0) {
                swapTokensForEth(min(amount, min(contractTokenBalance, _maxTaxSwap)));
                uint256 contractETHBalance = address(this).balance;
                if(contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
            
            if(from == uniswapV2Pair && to != address(uniswapV2Router)) {
                require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the maxWalletSize.");
                _redisFee = _redisFeeOnBuy;
                _taxFee = _taxFeeOnBuy;
            }
    
            if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnSell;
                _taxFee = _taxFeeOnSell;
            }
            
            if ((_isExcludedFromFee[from] || _isExcludedFromFee[to]) || (from != uniswapV2Pair && to != uniswapV2Pair)) {
                _redisFee = 0;
                _taxFee = 0;
            }
            
        }

        _tokenTransfer(from,to,amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        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 sendETHToFee(uint256 amount) private {
        uint256 devAmount = amount.mul(2).div(8);
        uint256 mktAmount = amount.mul(2).div(8);
        uint256 buybackAmount = amount.mul(2).div(8);
        uint256 burnAmount = amount.sub(devAmount).sub(mktAmount).sub(buybackAmount);
        _appAddress.transfer(devAmount);
        _marketingAddress.transfer(mktAmount);
        _buybackAddress.transfer(buybackAmount);
        _burnAddress.transfer(burnAmount);
    }

    function min(uint256 a, uint256 b) private pure returns (uint256){
        return (a > b) ? b : a;
    }
    
    function _tokenTransfer(address sender, address recipient, uint256 amount) private {
        _transferStandard(sender, recipient, amount);
    }

    event tokensRescued(address indexed token, address indexed to, uint amount);
    function rescueForeignTokens(address _tokenAddr, address _to, uint _amount) public onlyOwner {
        emit tokensRescued(_tokenAddr, _to, _amount);	
        IERC20(_tokenAddr).transfer(_to, _amount);
    }
    
    event appAddressUpdated(address indexed previous, address indexed adr);
    function setNewAppAddress(address payable appaddr) public onlyOwner {
        emit appAddressUpdated(_appAddress, appaddr);	
        _appAddress = appaddr;
        _isExcludedFromFee[_appAddress] = true;
    }
    
    event marketingAddressUpdated(address indexed previous, address indexed adr);
    function setNewMarketingAddress(address payable markt) public onlyOwner {
        emit marketingAddressUpdated(_marketingAddress, markt);	
        _marketingAddress = markt;
        _isExcludedFromFee[_marketingAddress] = true;
    }

    event burnAddressUpdated(address indexed previous, address indexed adr);
    function setNewBurnAddress(address payable burnaddr) public onlyOwner {
        emit burnAddressUpdated(_burnAddress, burnaddr);	
        _burnAddress = burnaddr;
        _isExcludedFromFee[_burnAddress] = true;
    }

    event buybackAddressUpdated(address indexed previous, address indexed adr);
    function setNewBuybackAddress(address payable buybackaddr) public onlyOwner {
        emit buybackAddressUpdated(_buybackAddress, buybackaddr);	
        _buybackAddress = buybackaddr;
        _isExcludedFromFee[_buybackAddress] = true;
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        uint256 tTransferAmount = tAmount.sub(tAmount.mul(_redisFee).div(100)).sub(tAmount.mul(_taxFee).div(100));
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tAmount.mul(_redisFee).div(100).mul(currentRate);
        uint256 rTeam = tAmount.mul(_taxFee).div(100).mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeam);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _rOwned[address(this)] = _rOwned[address(this)].add(rTeam);
        _reflectFee(rFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    /**
     * only thing to change _rTotal
     */
    function _reflectFee(uint256 rFee) private {
        _rTotal = _rTotal.sub(rFee);
    }

    receive() external payable {}

	function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function manualswap() external {
        require(_msgSender() == owner());
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualsend() external {
        require(_msgSender() == owner());
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }
    
    function setFee(uint256 redisFeeOnBuy, uint256 redisFeeOnSell, uint256 taxFeeOnBuy, uint256 taxFeeOnSell) public onlyOwner {
	    require(redisFeeOnBuy < 5, "Redis cannot be more than 5.");
	    require(redisFeeOnSell < 5, "Redis cannot be more than 5.");
	    require(taxFeeOnBuy < 25, "Tax cannot be more than 25.");
	    require(taxFeeOnSell < 25, "Tax cannot be more than 25.");
        _redisFeeOnBuy = redisFeeOnBuy;
        _redisFeeOnSell = redisFeeOnSell;
        _taxFeeOnBuy = taxFeeOnBuy;
        _taxFeeOnSell = taxFeeOnSell;
    }
    
    function toggleSwap(bool _swapEnabled) public onlyOwner {
        swapEnabled = _swapEnabled;
    }

    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);
    function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFee[accounts[i]] = excluded;
        }
        emit ExcludeMultipleAccountsFromFees(accounts, excluded);
    }

    event ExcludeFromFees(address indexed account, bool isExcluded);
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFee[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    event BlacklistAddress(address indexed account, bool value);
    function blacklistAddress(address account, bool value) public onlyOwner{
        _isBlacklisted[account] = value;
        emit BlacklistAddress(account, value);
    }

    event BlacklistMultiAddresses(address[] accounts, bool value);
    function blacklistMultiAddresses(address[] calldata accounts, bool value) public onlyOwner{
        for(uint256 i = 0; i < accounts.length; i++) {
            _isBlacklisted[accounts[i]] = value;
        }
        emit BlacklistMultiAddresses(accounts, value);
    }

    function clearStuckBalance(address addr) external onlyOwner{
        (bool sent,) =payable(addr).call{value: (address(this).balance)}("");
        require(sent);
    }

    function removeLimits() external onlyOwner{
        _maxWalletSize = _tTotal;
    }    

    function withdrawToken(address _tokenContract, uint256 _amount) external onlyOwner {
    IERC20 tokenContract = IERC20(_tokenContract);

    // needs to execute `approve()` on the token contract to allow itself the transfer
    tokenContract.approve(address(this), _amount);

    tokenContract.transferFrom(address(this), owner(), _amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"BlacklistAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"BlacklistMultiAddresses","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"adr","type":"address"}],"name":"appAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"adr","type":"address"}],"name":"burnAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"adr","type":"address"}],"name":"buybackAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"adr","type":"address"}],"name":"marketingAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"tokensRescued","type":"event"},{"inputs":[],"name":"_PresaleAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTaxSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_rOwned","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistMultiAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isFirstLaunch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSnipeTaxBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityLaunched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","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":"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":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueForeignTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"redisFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"redisFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnSell","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"appaddr","type":"address"}],"name":"setNewAppAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"burnaddr","type":"address"}],"name":"setNewBurnAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"buybackaddr","type":"address"}],"name":"setNewBuybackAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"markt","type":"address"}],"name":"setNewMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"}],"name":"setPresaleContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_blocks","type":"uint8"}],"name":"setSnipeBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipeBlocks","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapEnabled","type":"bool"}],"name":"toggleSwap","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600580546001600160b01b031916750100000000000000000000000000000000000000dead1790556007805460ff191690556200004b670de0b6b3a76400005f19620003d4565b62000058905f19620003fe565b600855606462000072670de0b6b3a764000060026200041a565b6200007e919062000434565b600955662386f26fc10000600a556006600b819055600e600c819055600d919091558055601180546001600160a01b031990811673ae969b0a7841e9039059e09f3e566b1238d46b1990811790925560128054821683179055601380548216831790556014805490911690911790556016805461ffff60a01b1916600160a81b1790553480156200010d575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600854335f9081526001602090815260409182902092909255601580546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155815163c45a015560e01b815291519092839263c45a015592600480830193928290030181865afa158015620001c7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001ed91906200044a565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000239573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200025f91906200044a565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015620002aa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002d091906200044a565b601680546001600160a01b0319166001600160a01b039283161790555f80548216815260036020526040808220805460ff1990811660019081179092553084528284208054821683179055601154851684528284208054821683179055601254851684528284208054821683179055601354851684528284208054821683179055601454909416835291208054909216179055336001600160a01b03165f6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef670de0b6b3a7640000604051620003b191815260200190565b60405180910390a35062000479565b634e487b7160e01b5f52601260045260245ffd5b5f82620003e557620003e5620003c0565b500690565b634e487b7160e01b5f52601160045260245ffd5b81810381811115620004145762000414620003ea565b92915050565b8082028115828204841417620004145762000414620003ea565b5f82620004455762000445620003c0565b500490565b5f602082840312156200045b575f80fd5b81516001600160a01b038116811462000472575f80fd5b9392505050565b61259a80620004875f395ff3fe60806040526004361061024c575f3560e01c8063758dbe0311610134578063a9059cbb116100b3578063c3c8cd8011610078578063c3c8cd80146106cb578063c492f046146106df578063dd62ed3e146106fe578063e293d31614610742578063f2fde38b14610761578063fca419ae14610780575f80fd5b8063a9059cbb14610630578063a9bbd1141461064f578063a9f615181461066e578063aa77ed671461068d578063c0246668146106ac575f80fd5b806395d89b41116100f957806395d89b41146102935780639e281a98146105b45780639f3d1360146105d3578063a2a957bb146105f2578063a2fff11414610611575f80fd5b8063758dbe0314610517578063764d72bf14610536578063768dc710146105555780638da5cb5b146105835780638f9a55c01461059f575f80fd5b806323b872dd116101cb5780636a1961c4116101905780636a1961c4146104885780636d8aa8f81461049d5780636fc3eaec146104bc57806370a08231146104d0578063715018a6146104ef578063751039fc14610503575f80fd5b806323b872dd146103eb5780632be29fa81461040a578063313ce56714610435578063455a43961461044857806349bd5a5e14610469575f80fd5b80631694505e116102115780631694505e14610344578063181281291461036357806318160ddd146103835780631cdd3be31461039d5780631eb147d5146103cb575f80fd5b8063032bba6a1461025757806306fdde0314610293578063095ea7b3146102c75780630cfc15f9146102f65780630faee56f1461032f575f80fd5b3661025357005b5f80fd5b348015610262575f80fd5b50600554610276906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561029e575f80fd5b50604080518082018252600681526548454c4c4d4f60d01b6020820152905161028a9190612133565b3480156102d2575f80fd5b506102e66102e1366004612192565b61079f565b604051901515815260200161028a565b348015610301575f80fd5b506103216103103660046121bc565b60016020525f908152604090205481565b60405190815260200161028a565b34801561033a575f80fd5b50610321600a5481565b34801561034f575f80fd5b50601554610276906001600160a01b031681565b34801561036e575f80fd5b506005546102e690600160a81b900460ff1681565b34801561038e575f80fd5b50670de0b6b3a7640000610321565b3480156103a8575f80fd5b506102e66103b73660046121bc565b60046020525f908152604090205460ff1681565b3480156103d6575f80fd5b506005546102e690600160a01b900460ff1681565b3480156103f6575f80fd5b506102e66104053660046121d7565b6107b5565b348015610415575f80fd5b506007546104239060ff1681565b60405160ff909116815260200161028a565b348015610440575f80fd5b506009610423565b348015610453575f80fd5b50610467610462366004612222565b61081c565b005b348015610474575f80fd5b50601654610276906001600160a01b031681565b348015610493575f80fd5b5061032160065481565b3480156104a8575f80fd5b506104676104b7366004612259565b6108ad565b3480156104c7575f80fd5b506104676108f4565b3480156104db575f80fd5b506103216104ea3660046121bc565b610916565b3480156104fa575f80fd5b50610467610937565b34801561050e575f80fd5b506104676109a8565b348015610522575f80fd5b506104676105313660046121bc565b6109df565b348015610541575f80fd5b506104676105503660046121bc565b610a7a565b348015610560575f80fd5b506102e661056f3660046121bc565b60036020525f908152604090205460ff1681565b34801561058e575f80fd5b505f546001600160a01b0316610276565b3480156105aa575f80fd5b5061032160095481565b3480156105bf575f80fd5b506104676105ce366004612192565b610b02565b3480156105de575f80fd5b506104676105ed3660046121bc565b610c39565b3480156105fd575f80fd5b5061046761060c366004612274565b610cd4565b34801561061c575f80fd5b5061046761062b3660046121bc565b610e51565b34801561063b575f80fd5b506102e661064a366004612192565b610eec565b34801561065a575f80fd5b506104676106693660046121bc565b610ef8565b348015610679575f80fd5b506104676106883660046122a3565b610f4a565b348015610698575f80fd5b506104676106a73660046121bc565b610f9f565b3480156106b7575f80fd5b506104676106c6366004612222565b61103a565b3480156106d6575f80fd5b506104676110ba565b3480156106ea575f80fd5b506104676106f93660046122c3565b6110e4565b348015610709575f80fd5b50610321610718366004612342565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b34801561074d575f80fd5b5061046761075c3660046121d7565b6111bc565b34801561076c575f80fd5b5061046761077b3660046121bc565b611267565b34801561078b575f80fd5b5061046761079a3660046122c3565b61134e565b5f6107ab338484611419565b5060015b92915050565b5f6107c184848461153c565b610812843361080d8560405180606001604052806028815260200161253d602891396001600160a01b038a165f9081526002602090815260408083203384529091529020549190611a0e565b611419565b5060019392505050565b5f546001600160a01b0316331461084e5760405162461bcd60e51b81526004016108459061236e565b60405180910390fd5b6001600160a01b0382165f81815260046020908152604091829020805460ff191685151590811790915591519182527f09fb98d4f02479ce251faed0f992a3c326d006e19ffa4f7269239763a644f72591015b60405180910390a25050565b5f546001600160a01b031633146108d65760405162461bcd60e51b81526004016108459061236e565b60168054911515600160a81b0260ff60a81b19909216919091179055565b5f546001600160a01b03163314610909575f80fd5b4761091381611a46565b50565b6001600160a01b0381165f908152600160205260408120546107af90611b84565b5f546001600160a01b031633146109605760405162461bcd60e51b81526004016108459061236e565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146109d15760405162461bcd60e51b81526004016108459061236e565b670de0b6b3a7640000600955565b5f546001600160a01b03163314610a085760405162461bcd60e51b81526004016108459061236e565b6012546040516001600160a01b038084169216907fa64373a629bc0c09eacf8a9cc2c7b070fa0a8b7e2e9b8aaee408a3c02eb1676b905f90a3601280546001600160a01b039092166001600160a01b0319909216821790555f908152600360205260409020805460ff19166001179055565b5f546001600160a01b03163314610aa35760405162461bcd60e51b81526004016108459061236e565b5f816001600160a01b0316476040515f6040518083038185875af1925050503d805f8114610aec576040519150601f19603f3d011682016040523d82523d5f602084013e610af1565b606091505b5050905080610afe575f80fd5b5050565b5f546001600160a01b03163314610b2b5760405162461bcd60e51b81526004016108459061236e565b60405163095ea7b360e01b81523060048201526024810182905282906001600160a01b0382169063095ea7b3906044016020604051808303815f875af1158015610b77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b9b91906123a3565b50806001600160a01b03166323b872dd30610bbd5f546001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604481018590526064015b6020604051808303815f875af1158015610c0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3391906123a3565b50505050565b5f546001600160a01b03163314610c625760405162461bcd60e51b81526004016108459061236e565b6011546040516001600160a01b038084169216907f898685b0c7235e80e6620a105663fe2b66911194a7fa848f2a7541afc2dc5c39905f90a3601180546001600160a01b039092166001600160a01b0319909216821790555f908152600360205260409020805460ff19166001179055565b5f546001600160a01b03163314610cfd5760405162461bcd60e51b81526004016108459061236e565b60058410610d4d5760405162461bcd60e51b815260206004820152601c60248201527f52656469732063616e6e6f74206265206d6f7265207468616e20352e000000006044820152606401610845565b60058310610d9d5760405162461bcd60e51b815260206004820152601c60248201527f52656469732063616e6e6f74206265206d6f7265207468616e20352e000000006044820152606401610845565b60198210610ded5760405162461bcd60e51b815260206004820152601b60248201527f5461782063616e6e6f74206265206d6f7265207468616e2032352e00000000006044820152606401610845565b60198110610e3d5760405162461bcd60e51b815260206004820152601b60248201527f5461782063616e6e6f74206265206d6f7265207468616e2032352e00000000006044820152606401610845565b600b93909355600d91909155600c55600e55565b5f546001600160a01b03163314610e7a5760405162461bcd60e51b81526004016108459061236e565b6013546040516001600160a01b038084169216907fe8e67054d01d5f7e0f5ffeb6db0b1fb4a40329cd5b38ddbc92060382ec2358fc905f90a3601380546001600160a01b039092166001600160a01b0319909216821790555f908152600360205260409020805460ff19166001179055565b5f6107ab33848461153c565b5f546001600160a01b03163314610f215760405162461bcd60e51b81526004016108459061236e565b600580546001600160a01b0319166001600160a01b03831690811790915561091390600161103a565b5f546001600160a01b03163314610f735760405162461bcd60e51b81526004016108459061236e565b600554600160a01b900460ff1615610f89575f80fd5b6007805460ff191660ff92909216919091179055565b5f546001600160a01b03163314610fc85760405162461bcd60e51b81526004016108459061236e565b6014546040516001600160a01b038084169216907f78c7c060c9bc33c6b42b3e972a9f710e466fa2c77b4f7083869b041492f00f40905f90a3601480546001600160a01b039092166001600160a01b0319909216821790555f908152600360205260409020805460ff19166001179055565b5f546001600160a01b031633146110635760405162461bcd60e51b81526004016108459061236e565b6001600160a01b0382165f81815260036020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016108a1565b5f546001600160a01b031633146110cf575f80fd5b5f6110d930610916565b905061091381611c06565b5f546001600160a01b0316331461110d5760405162461bcd60e51b81526004016108459061236e565b5f5b8281101561117b578160035f86868581811061112d5761112d6123be565b905060200201602081019061114291906121bc565b6001600160a01b0316815260208101919091526040015f20805460ff191691151591909117905580611173816123e6565b91505061110f565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358383836040516111af939291906123fe565b60405180910390a1505050565b5f546001600160a01b031633146111e55760405162461bcd60e51b81526004016108459061236e565b816001600160a01b0316836001600160a01b03167f47c33aa230eb5fd181505aa7befeaddd9b8a6f983989cea73a7868448c3a9ed98360405161122a91815260200190565b60405180910390a360405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401610bf3565b5f546001600160a01b031633146112905760405162461bcd60e51b81526004016108459061236e565b6001600160a01b0381166112f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610845565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146113775760405162461bcd60e51b81526004016108459061236e565b5f5b828110156113e5578160045f868685818110611397576113976123be565b90506020020160208101906113ac91906121bc565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055806113dd816123e6565b915050611379565b507fd09d39390fc688d281adc0e04befeb10838d7a58109b6eb8c29db9b251ebccf68383836040516111af939291906123fe565b6001600160a01b03831661147b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610845565b6001600160a01b0382166114dc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610845565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166115a05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610845565b6001600160a01b0382166116025760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610845565b5f81116116635760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610845565b6001600160a01b0383165f9081526004602052604090205460ff16156116c15760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401610845565b5f600f819055601055600554600160a01b900460ff16611718576016546001600160a01b0390811690831603611718576005805460ff60a01b1916600160a01b1790556007546117149060ff1643612456565b6006555b6005546001600160a01b038481169116146117b757600554600160a01b900460ff16801561174857506006544311155b801561175e5750600554600160a81b900460ff16155b156117b757600b54600f55600c5460105561177a838383611d76565b6016546001600160a01b038381169116146117b2576001600160a01b0382165f908152600460205260409020805460ff191660011790555b505050565b600554600160a01b900460ff1680156117d95750600554600160a81b900460ff165b156117ec576005805460ff60a81b191690555b5f546001600160a01b0384811691161480159061181657505f546001600160a01b03838116911614155b15611a03575f61182530610916565b601654909150600160a01b900460ff1615801561185057506016546001600160a01b03858116911614155b80156118655750601654600160a81b900460ff165b801561187057505f81115b156118a45761189261188d8361188884600a54611d81565b611d81565b611c06565b4780156118a2576118a247611a46565b505b6016546001600160a01b0385811691161480156118cf57506015546001600160a01b03848116911614155b1561194657600954826118e185610916565b6118eb9190612456565b11156119395760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610845565b600b54600f55600c546010555b6016546001600160a01b03848116911614801561197157506015546001600160a01b03858116911614155b1561198357600d54600f55600e546010555b6001600160a01b0384165f9081526003602052604090205460ff16806119c057506001600160a01b0383165f9081526003602052604090205460ff165b806119f257506016546001600160a01b038581169116148015906119f257506016546001600160a01b03848116911614155b15611a01575f600f8190556010555b505b6117b2838383611d76565b5f8184841115611a315760405162461bcd60e51b81526004016108459190612133565b505f611a3d8486612469565b95945050505050565b5f611a5d6008611a57846002611d95565b90611e13565b90505f611a706008611a57856002611d95565b90505f611a836008611a57866002611d95565b90505f611a9c82611a9685818989611e54565b90611e54565b6011546040519192506001600160a01b03169085156108fc029086905f818181858888f19350505050158015611ad4573d5f803e3d5ffd5b506012546040516001600160a01b039091169084156108fc029085905f818181858888f19350505050158015611b0c573d5f803e3d5ffd5b506013546040516001600160a01b039091169083156108fc029084905f818181858888f19350505050158015611b44573d5f803e3d5ffd5b506014546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015611b7c573d5f803e3d5ffd5b505050505050565b5f600854821115611bea5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610845565b5f611bf3611e95565b9050611bff8382611e13565b9392505050565b6016805460ff60a01b1916600160a01b1790556040805160028082526060820183525f9260208301908036833701905050905030815f81518110611c4c57611c4c6123be565b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611ca3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cc7919061247c565b81600181518110611cda57611cda6123be565b6001600160a01b039283166020918202929092010152601554611d009130911684611419565b60155460405163791ac94760e01b81526001600160a01b039091169063791ac94790611d389085905f90869030904290600401612497565b5f604051808303815f87803b158015611d4f575f80fd5b505af1158015611d61573d5f803e3d5ffd5b50506016805460ff60a01b1916905550505050565b6117b2838383611eb6565b5f818311611d8f5782611bff565b50919050565b5f825f03611da457505f6107af565b5f611daf8385612506565b905082611dbc858361251d565b14611bff5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610845565b5f611bff83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612057565b5f611bff83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a0e565b5f805f611ea0612083565b9092509050611eaf8282611e13565b9250505090565b5f611ebf611e95565b90505f611f03611edf6064611a5760105487611d9590919063ffffffff16565b611a96611efc6064611a57600f5489611d9590919063ffffffff16565b8690611e54565b90505f611f108484611d95565b90505f611f3784611f316064611a57600f548a611d9590919063ffffffff16565b90611d95565b90505f611f5885611f316064611a576010548b611d9590919063ffffffff16565b90505f611f6982611a968686611e54565b6001600160a01b038a165f90815260016020526040902054909150611f8e9085611e54565b6001600160a01b03808b165f9081526001602052604080822093909355908a1681522054611fbc90826120c2565b6001600160a01b0389165f90815260016020526040808220929092553081522054611fe790836120c2565b305f90815260016020526040902055611fff83612120565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161204491815260200190565b60405180910390a3505050505050505050565b5f81836120775760405162461bcd60e51b81526004016108459190612133565b505f611a3d848661251d565b6008545f908190670de0b6b3a764000061209d8282611e13565b8210156120b957505060085492670de0b6b3a764000092509050565b90939092509050565b5f806120ce8385612456565b905083811015611bff5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610845565b60085461212d9082611e54565b60085550565b5f6020808352835180828501525f5b8181101561215e57858101830151858201604001528201612142565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610913575f80fd5b5f80604083850312156121a3575f80fd5b82356121ae8161217e565b946020939093013593505050565b5f602082840312156121cc575f80fd5b8135611bff8161217e565b5f805f606084860312156121e9575f80fd5b83356121f48161217e565b925060208401356122048161217e565b929592945050506040919091013590565b8015158114610913575f80fd5b5f8060408385031215612233575f80fd5b823561223e8161217e565b9150602083013561224e81612215565b809150509250929050565b5f60208284031215612269575f80fd5b8135611bff81612215565b5f805f8060808587031215612287575f80fd5b5050823594602084013594506040840135936060013592509050565b5f602082840312156122b3575f80fd5b813560ff81168114611bff575f80fd5b5f805f604084860312156122d5575f80fd5b833567ffffffffffffffff808211156122ec575f80fd5b818601915086601f8301126122ff575f80fd5b81358181111561230d575f80fd5b8760208260051b8501011115612321575f80fd5b6020928301955093505084013561233781612215565b809150509250925092565b5f8060408385031215612353575f80fd5b823561235e8161217e565b9150602083013561224e8161217e565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f602082840312156123b3575f80fd5b8151611bff81612215565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f600182016123f7576123f76123d2565b5060010190565b604080825281018390525f8460608301825b868110156124405782356124238161217e565b6001600160a01b0316825260209283019290910190600101612410565b5080925050508215156020830152949350505050565b808201808211156107af576107af6123d2565b818103818111156107af576107af6123d2565b5f6020828403121561248c575f80fd5b8151611bff8161217e565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156124e55784516001600160a01b0316835293830193918301916001016124c0565b50506001600160a01b03969096166060850152505050608001529392505050565b80820281158282048414176107af576107af6123d2565b5f8261253757634e487b7160e01b5f52601260045260245ffd5b50049056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212205b136a57d1e48210e6960fea68afff7068d233801658b492e20af023a94882be64736f6c63430008140033

Deployed Bytecode

0x60806040526004361061024c575f3560e01c8063758dbe0311610134578063a9059cbb116100b3578063c3c8cd8011610078578063c3c8cd80146106cb578063c492f046146106df578063dd62ed3e146106fe578063e293d31614610742578063f2fde38b14610761578063fca419ae14610780575f80fd5b8063a9059cbb14610630578063a9bbd1141461064f578063a9f615181461066e578063aa77ed671461068d578063c0246668146106ac575f80fd5b806395d89b41116100f957806395d89b41146102935780639e281a98146105b45780639f3d1360146105d3578063a2a957bb146105f2578063a2fff11414610611575f80fd5b8063758dbe0314610517578063764d72bf14610536578063768dc710146105555780638da5cb5b146105835780638f9a55c01461059f575f80fd5b806323b872dd116101cb5780636a1961c4116101905780636a1961c4146104885780636d8aa8f81461049d5780636fc3eaec146104bc57806370a08231146104d0578063715018a6146104ef578063751039fc14610503575f80fd5b806323b872dd146103eb5780632be29fa81461040a578063313ce56714610435578063455a43961461044857806349bd5a5e14610469575f80fd5b80631694505e116102115780631694505e14610344578063181281291461036357806318160ddd146103835780631cdd3be31461039d5780631eb147d5146103cb575f80fd5b8063032bba6a1461025757806306fdde0314610293578063095ea7b3146102c75780630cfc15f9146102f65780630faee56f1461032f575f80fd5b3661025357005b5f80fd5b348015610262575f80fd5b50600554610276906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561029e575f80fd5b50604080518082018252600681526548454c4c4d4f60d01b6020820152905161028a9190612133565b3480156102d2575f80fd5b506102e66102e1366004612192565b61079f565b604051901515815260200161028a565b348015610301575f80fd5b506103216103103660046121bc565b60016020525f908152604090205481565b60405190815260200161028a565b34801561033a575f80fd5b50610321600a5481565b34801561034f575f80fd5b50601554610276906001600160a01b031681565b34801561036e575f80fd5b506005546102e690600160a81b900460ff1681565b34801561038e575f80fd5b50670de0b6b3a7640000610321565b3480156103a8575f80fd5b506102e66103b73660046121bc565b60046020525f908152604090205460ff1681565b3480156103d6575f80fd5b506005546102e690600160a01b900460ff1681565b3480156103f6575f80fd5b506102e66104053660046121d7565b6107b5565b348015610415575f80fd5b506007546104239060ff1681565b60405160ff909116815260200161028a565b348015610440575f80fd5b506009610423565b348015610453575f80fd5b50610467610462366004612222565b61081c565b005b348015610474575f80fd5b50601654610276906001600160a01b031681565b348015610493575f80fd5b5061032160065481565b3480156104a8575f80fd5b506104676104b7366004612259565b6108ad565b3480156104c7575f80fd5b506104676108f4565b3480156104db575f80fd5b506103216104ea3660046121bc565b610916565b3480156104fa575f80fd5b50610467610937565b34801561050e575f80fd5b506104676109a8565b348015610522575f80fd5b506104676105313660046121bc565b6109df565b348015610541575f80fd5b506104676105503660046121bc565b610a7a565b348015610560575f80fd5b506102e661056f3660046121bc565b60036020525f908152604090205460ff1681565b34801561058e575f80fd5b505f546001600160a01b0316610276565b3480156105aa575f80fd5b5061032160095481565b3480156105bf575f80fd5b506104676105ce366004612192565b610b02565b3480156105de575f80fd5b506104676105ed3660046121bc565b610c39565b3480156105fd575f80fd5b5061046761060c366004612274565b610cd4565b34801561061c575f80fd5b5061046761062b3660046121bc565b610e51565b34801561063b575f80fd5b506102e661064a366004612192565b610eec565b34801561065a575f80fd5b506104676106693660046121bc565b610ef8565b348015610679575f80fd5b506104676106883660046122a3565b610f4a565b348015610698575f80fd5b506104676106a73660046121bc565b610f9f565b3480156106b7575f80fd5b506104676106c6366004612222565b61103a565b3480156106d6575f80fd5b506104676110ba565b3480156106ea575f80fd5b506104676106f93660046122c3565b6110e4565b348015610709575f80fd5b50610321610718366004612342565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b34801561074d575f80fd5b5061046761075c3660046121d7565b6111bc565b34801561076c575f80fd5b5061046761077b3660046121bc565b611267565b34801561078b575f80fd5b5061046761079a3660046122c3565b61134e565b5f6107ab338484611419565b5060015b92915050565b5f6107c184848461153c565b610812843361080d8560405180606001604052806028815260200161253d602891396001600160a01b038a165f9081526002602090815260408083203384529091529020549190611a0e565b611419565b5060019392505050565b5f546001600160a01b0316331461084e5760405162461bcd60e51b81526004016108459061236e565b60405180910390fd5b6001600160a01b0382165f81815260046020908152604091829020805460ff191685151590811790915591519182527f09fb98d4f02479ce251faed0f992a3c326d006e19ffa4f7269239763a644f72591015b60405180910390a25050565b5f546001600160a01b031633146108d65760405162461bcd60e51b81526004016108459061236e565b60168054911515600160a81b0260ff60a81b19909216919091179055565b5f546001600160a01b03163314610909575f80fd5b4761091381611a46565b50565b6001600160a01b0381165f908152600160205260408120546107af90611b84565b5f546001600160a01b031633146109605760405162461bcd60e51b81526004016108459061236e565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146109d15760405162461bcd60e51b81526004016108459061236e565b670de0b6b3a7640000600955565b5f546001600160a01b03163314610a085760405162461bcd60e51b81526004016108459061236e565b6012546040516001600160a01b038084169216907fa64373a629bc0c09eacf8a9cc2c7b070fa0a8b7e2e9b8aaee408a3c02eb1676b905f90a3601280546001600160a01b039092166001600160a01b0319909216821790555f908152600360205260409020805460ff19166001179055565b5f546001600160a01b03163314610aa35760405162461bcd60e51b81526004016108459061236e565b5f816001600160a01b0316476040515f6040518083038185875af1925050503d805f8114610aec576040519150601f19603f3d011682016040523d82523d5f602084013e610af1565b606091505b5050905080610afe575f80fd5b5050565b5f546001600160a01b03163314610b2b5760405162461bcd60e51b81526004016108459061236e565b60405163095ea7b360e01b81523060048201526024810182905282906001600160a01b0382169063095ea7b3906044016020604051808303815f875af1158015610b77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b9b91906123a3565b50806001600160a01b03166323b872dd30610bbd5f546001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604481018590526064015b6020604051808303815f875af1158015610c0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3391906123a3565b50505050565b5f546001600160a01b03163314610c625760405162461bcd60e51b81526004016108459061236e565b6011546040516001600160a01b038084169216907f898685b0c7235e80e6620a105663fe2b66911194a7fa848f2a7541afc2dc5c39905f90a3601180546001600160a01b039092166001600160a01b0319909216821790555f908152600360205260409020805460ff19166001179055565b5f546001600160a01b03163314610cfd5760405162461bcd60e51b81526004016108459061236e565b60058410610d4d5760405162461bcd60e51b815260206004820152601c60248201527f52656469732063616e6e6f74206265206d6f7265207468616e20352e000000006044820152606401610845565b60058310610d9d5760405162461bcd60e51b815260206004820152601c60248201527f52656469732063616e6e6f74206265206d6f7265207468616e20352e000000006044820152606401610845565b60198210610ded5760405162461bcd60e51b815260206004820152601b60248201527f5461782063616e6e6f74206265206d6f7265207468616e2032352e00000000006044820152606401610845565b60198110610e3d5760405162461bcd60e51b815260206004820152601b60248201527f5461782063616e6e6f74206265206d6f7265207468616e2032352e00000000006044820152606401610845565b600b93909355600d91909155600c55600e55565b5f546001600160a01b03163314610e7a5760405162461bcd60e51b81526004016108459061236e565b6013546040516001600160a01b038084169216907fe8e67054d01d5f7e0f5ffeb6db0b1fb4a40329cd5b38ddbc92060382ec2358fc905f90a3601380546001600160a01b039092166001600160a01b0319909216821790555f908152600360205260409020805460ff19166001179055565b5f6107ab33848461153c565b5f546001600160a01b03163314610f215760405162461bcd60e51b81526004016108459061236e565b600580546001600160a01b0319166001600160a01b03831690811790915561091390600161103a565b5f546001600160a01b03163314610f735760405162461bcd60e51b81526004016108459061236e565b600554600160a01b900460ff1615610f89575f80fd5b6007805460ff191660ff92909216919091179055565b5f546001600160a01b03163314610fc85760405162461bcd60e51b81526004016108459061236e565b6014546040516001600160a01b038084169216907f78c7c060c9bc33c6b42b3e972a9f710e466fa2c77b4f7083869b041492f00f40905f90a3601480546001600160a01b039092166001600160a01b0319909216821790555f908152600360205260409020805460ff19166001179055565b5f546001600160a01b031633146110635760405162461bcd60e51b81526004016108459061236e565b6001600160a01b0382165f81815260036020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016108a1565b5f546001600160a01b031633146110cf575f80fd5b5f6110d930610916565b905061091381611c06565b5f546001600160a01b0316331461110d5760405162461bcd60e51b81526004016108459061236e565b5f5b8281101561117b578160035f86868581811061112d5761112d6123be565b905060200201602081019061114291906121bc565b6001600160a01b0316815260208101919091526040015f20805460ff191691151591909117905580611173816123e6565b91505061110f565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358383836040516111af939291906123fe565b60405180910390a1505050565b5f546001600160a01b031633146111e55760405162461bcd60e51b81526004016108459061236e565b816001600160a01b0316836001600160a01b03167f47c33aa230eb5fd181505aa7befeaddd9b8a6f983989cea73a7868448c3a9ed98360405161122a91815260200190565b60405180910390a360405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401610bf3565b5f546001600160a01b031633146112905760405162461bcd60e51b81526004016108459061236e565b6001600160a01b0381166112f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610845565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146113775760405162461bcd60e51b81526004016108459061236e565b5f5b828110156113e5578160045f868685818110611397576113976123be565b90506020020160208101906113ac91906121bc565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055806113dd816123e6565b915050611379565b507fd09d39390fc688d281adc0e04befeb10838d7a58109b6eb8c29db9b251ebccf68383836040516111af939291906123fe565b6001600160a01b03831661147b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610845565b6001600160a01b0382166114dc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610845565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166115a05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610845565b6001600160a01b0382166116025760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610845565b5f81116116635760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610845565b6001600160a01b0383165f9081526004602052604090205460ff16156116c15760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401610845565b5f600f819055601055600554600160a01b900460ff16611718576016546001600160a01b0390811690831603611718576005805460ff60a01b1916600160a01b1790556007546117149060ff1643612456565b6006555b6005546001600160a01b038481169116146117b757600554600160a01b900460ff16801561174857506006544311155b801561175e5750600554600160a81b900460ff16155b156117b757600b54600f55600c5460105561177a838383611d76565b6016546001600160a01b038381169116146117b2576001600160a01b0382165f908152600460205260409020805460ff191660011790555b505050565b600554600160a01b900460ff1680156117d95750600554600160a81b900460ff165b156117ec576005805460ff60a81b191690555b5f546001600160a01b0384811691161480159061181657505f546001600160a01b03838116911614155b15611a03575f61182530610916565b601654909150600160a01b900460ff1615801561185057506016546001600160a01b03858116911614155b80156118655750601654600160a81b900460ff165b801561187057505f81115b156118a45761189261188d8361188884600a54611d81565b611d81565b611c06565b4780156118a2576118a247611a46565b505b6016546001600160a01b0385811691161480156118cf57506015546001600160a01b03848116911614155b1561194657600954826118e185610916565b6118eb9190612456565b11156119395760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610845565b600b54600f55600c546010555b6016546001600160a01b03848116911614801561197157506015546001600160a01b03858116911614155b1561198357600d54600f55600e546010555b6001600160a01b0384165f9081526003602052604090205460ff16806119c057506001600160a01b0383165f9081526003602052604090205460ff165b806119f257506016546001600160a01b038581169116148015906119f257506016546001600160a01b03848116911614155b15611a01575f600f8190556010555b505b6117b2838383611d76565b5f8184841115611a315760405162461bcd60e51b81526004016108459190612133565b505f611a3d8486612469565b95945050505050565b5f611a5d6008611a57846002611d95565b90611e13565b90505f611a706008611a57856002611d95565b90505f611a836008611a57866002611d95565b90505f611a9c82611a9685818989611e54565b90611e54565b6011546040519192506001600160a01b03169085156108fc029086905f818181858888f19350505050158015611ad4573d5f803e3d5ffd5b506012546040516001600160a01b039091169084156108fc029085905f818181858888f19350505050158015611b0c573d5f803e3d5ffd5b506013546040516001600160a01b039091169083156108fc029084905f818181858888f19350505050158015611b44573d5f803e3d5ffd5b506014546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015611b7c573d5f803e3d5ffd5b505050505050565b5f600854821115611bea5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610845565b5f611bf3611e95565b9050611bff8382611e13565b9392505050565b6016805460ff60a01b1916600160a01b1790556040805160028082526060820183525f9260208301908036833701905050905030815f81518110611c4c57611c4c6123be565b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611ca3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cc7919061247c565b81600181518110611cda57611cda6123be565b6001600160a01b039283166020918202929092010152601554611d009130911684611419565b60155460405163791ac94760e01b81526001600160a01b039091169063791ac94790611d389085905f90869030904290600401612497565b5f604051808303815f87803b158015611d4f575f80fd5b505af1158015611d61573d5f803e3d5ffd5b50506016805460ff60a01b1916905550505050565b6117b2838383611eb6565b5f818311611d8f5782611bff565b50919050565b5f825f03611da457505f6107af565b5f611daf8385612506565b905082611dbc858361251d565b14611bff5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610845565b5f611bff83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612057565b5f611bff83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a0e565b5f805f611ea0612083565b9092509050611eaf8282611e13565b9250505090565b5f611ebf611e95565b90505f611f03611edf6064611a5760105487611d9590919063ffffffff16565b611a96611efc6064611a57600f5489611d9590919063ffffffff16565b8690611e54565b90505f611f108484611d95565b90505f611f3784611f316064611a57600f548a611d9590919063ffffffff16565b90611d95565b90505f611f5885611f316064611a576010548b611d9590919063ffffffff16565b90505f611f6982611a968686611e54565b6001600160a01b038a165f90815260016020526040902054909150611f8e9085611e54565b6001600160a01b03808b165f9081526001602052604080822093909355908a1681522054611fbc90826120c2565b6001600160a01b0389165f90815260016020526040808220929092553081522054611fe790836120c2565b305f90815260016020526040902055611fff83612120565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161204491815260200190565b60405180910390a3505050505050505050565b5f81836120775760405162461bcd60e51b81526004016108459190612133565b505f611a3d848661251d565b6008545f908190670de0b6b3a764000061209d8282611e13565b8210156120b957505060085492670de0b6b3a764000092509050565b90939092509050565b5f806120ce8385612456565b905083811015611bff5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610845565b60085461212d9082611e54565b60085550565b5f6020808352835180828501525f5b8181101561215e57858101830151858201604001528201612142565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610913575f80fd5b5f80604083850312156121a3575f80fd5b82356121ae8161217e565b946020939093013593505050565b5f602082840312156121cc575f80fd5b8135611bff8161217e565b5f805f606084860312156121e9575f80fd5b83356121f48161217e565b925060208401356122048161217e565b929592945050506040919091013590565b8015158114610913575f80fd5b5f8060408385031215612233575f80fd5b823561223e8161217e565b9150602083013561224e81612215565b809150509250929050565b5f60208284031215612269575f80fd5b8135611bff81612215565b5f805f8060808587031215612287575f80fd5b5050823594602084013594506040840135936060013592509050565b5f602082840312156122b3575f80fd5b813560ff81168114611bff575f80fd5b5f805f604084860312156122d5575f80fd5b833567ffffffffffffffff808211156122ec575f80fd5b818601915086601f8301126122ff575f80fd5b81358181111561230d575f80fd5b8760208260051b8501011115612321575f80fd5b6020928301955093505084013561233781612215565b809150509250925092565b5f8060408385031215612353575f80fd5b823561235e8161217e565b9150602083013561224e8161217e565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f602082840312156123b3575f80fd5b8151611bff81612215565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f600182016123f7576123f76123d2565b5060010190565b604080825281018390525f8460608301825b868110156124405782356124238161217e565b6001600160a01b0316825260209283019290910190600101612410565b5080925050508215156020830152949350505050565b808201808211156107af576107af6123d2565b818103818111156107af576107af6123d2565b5f6020828403121561248c575f80fd5b8151611bff8161217e565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156124e55784516001600160a01b0316835293830193918301916001016124c0565b50506001600160a01b03969096166060850152505050608001529392505050565b80820281158282048414176107af576107af6123d2565b5f8261253757634e487b7160e01b5f52601260045260245ffd5b50049056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212205b136a57d1e48210e6960fea68afff7068d233801658b492e20af023a94882be64736f6c63430008140033

Deployed Bytecode Sourcemap

19668:14758:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19999:75;;;;;;;;;;-1:-1:-1;19999:75:0;;;;-1:-1:-1;;;;;19999:75:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;19999:75:0;;;;;;;;22677:83;;;;;;;;;;-1:-1:-1;22747:5:0;;;;;;;;;;;-1:-1:-1;;;22747:5:0;;;;22677:83;;;;22747:5;22677:83;:::i;23529:161::-;;;;;;;;;;-1:-1:-1;23529:161:0;;;;;:::i;:::-;;:::i;:::-;;;1396:14:1;;1389:22;1371:41;;1359:2;1344:18;23529:161:0;1231:187:1;19758:43:0;;;;;;;;;;-1:-1:-1;19758:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;1821:25:1;;;1809:2;1794:18;19758:43:0;1675:177:1;20470:45:0;;;;;;;;;;;;;;;;21310:41;;;;;;;;;;-1:-1:-1;21310:41:0;;;;-1:-1:-1;;;;;21310:41:0;;;20125:32;;;;;;;;;;-1:-1:-1;20125:32:0;;;;-1:-1:-1;;;20125:32:0;;;;;;22954:95;;;;;;;;;;-1:-1:-1;20328:19:0;22954:95;;19944:46;;;;;;;;;;-1:-1:-1;19944:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20081:37;;;;;;;;;;-1:-1:-1;20081:37:0;;;;-1:-1:-1;;;20081:37:0;;;;;;23698:313;;;;;;;;;;-1:-1:-1;23698:313:0;;;;;:::i;:::-;;:::i;20203:28::-;;;;;;;;;;-1:-1:-1;20203:28:0;;;;;;;;;;;2724:4:1;2712:17;;;2694:36;;2682:2;2667:18;20203:28:0;2552:184:1;22863:83:0;;;;;;;;;;-1:-1:-1;20899:1:0;22863:83;;33271:169;;;;;;;;;;-1:-1:-1;33271:169:0;;;;;:::i;:::-;;:::i;:::-;;21358:28;;;;;;;;;;-1:-1:-1;21358:28:0;;;;-1:-1:-1;;;;;21358:28:0;;;20164:32;;;;;;;;;;;;;;;;32447:101;;;;;;;;;;-1:-1:-1;32447:101:0;;;;;:::i;:::-;;:::i;31684:186::-;;;;;;;;;;;;;:::i;23057:138::-;;;;;;;;;;-1:-1:-1;23057:138:0;;;;;:::i;:::-;;:::i;19087:148::-;;;;;;;;;;;;;:::i;33973:85::-;;;;;;;;;;;;;:::i;29163:237::-;;;;;;;;;;-1:-1:-1;29163:237:0;;;;;:::i;:::-;;:::i;33795:170::-;;;;;;;;;;-1:-1:-1;33795:170:0;;;;;:::i;:::-;;:::i;19886:51::-;;;;;;;;;;-1:-1:-1;19886:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18445:79;;;;;;;;;;-1:-1:-1;18483:7:0;18510:6;-1:-1:-1;;;;;18510:6:0;18445:79;;20412:51;;;;;;;;;;;;;;;;34070:353;;;;;;;;;;-1:-1:-1;34070:353:0;;;;;:::i;:::-;;:::i;28855:213::-;;;;;;;;;;-1:-1:-1;28855:213:0;;;;;:::i;:::-;;:::i;31882:553::-;;;;;;;;;;-1:-1:-1;31882:553:0;;;;;:::i;:::-;;:::i;29796:245::-;;;;;;;;;;-1:-1:-1;29796:245:0;;;;;:::i;:::-;;:::i;23203:167::-;;;;;;;;;;-1:-1:-1;23203:167:0;;;;;:::i;:::-;;:::i;22507:162::-;;;;;;;;;;-1:-1:-1;22507:162:0;;;;;:::i;:::-;;:::i;22363:136::-;;;;;;;;;;-1:-1:-1;22363:136:0;;;;;:::i;:::-;;:::i;29486:221::-;;;;;;;;;;-1:-1:-1;29486:221:0;;;;;:::i;:::-;;:::i;33016:181::-;;;;;;;;;;-1:-1:-1;33016:181:0;;;;;:::i;:::-;;:::i;31489:187::-;;;;;;;;;;;;;:::i;32637:301::-;;;;;;;;;;-1:-1:-1;32637:301:0;;;;;:::i;:::-;;:::i;23378:143::-;;;;;;;;;;-1:-1:-1;23378:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;23486:18:0;;;23459:7;23486:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;23378:143;28557:209;;;;;;;;;;-1:-1:-1;28557:209:0;;;;;:::i;:::-;;:::i;19390:244::-;;;;;;;;;;-1:-1:-1;19390:244:0;;;;;:::i;:::-;;:::i;33516:271::-;;;;;;;;;;-1:-1:-1;33516:271:0;;;;;:::i;:::-;;:::i;23529:161::-;23604:4;23621:39;6736:10;23644:7;23653:6;23621:8;:39::i;:::-;-1:-1:-1;23678:4:0;23529:161;;;;;:::o;23698:313::-;23796:4;23813:36;23823:6;23831:9;23842:6;23813:9;:36::i;:::-;23860:121;23869:6;6736:10;23891:89;23929:6;23891:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23891:19:0;;;;;;:11;:19;;;;;;;;6736:10;23891:33;;;;;;;;;;:37;:89::i;:::-;23860:8;:121::i;:::-;-1:-1:-1;23999:4:0;23698:313;;;;;:::o;33271:169::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;33353:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;;;;:31;;-1:-1:-1;;33353:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33400:32;;1371:41:1;;;33400:32:0::1;::::0;1344:18:1;33400:32:0::1;;;;;;;;33271:169:::0;;:::o;32447:101::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;32514:11:::1;:26:::0;;;::::1;;-1:-1:-1::0;;;32514:26:0::1;-1:-1:-1::0;;;;32514:26:0;;::::1;::::0;;;::::1;::::0;;32447:101::o;31684:186::-;18483:7;18510:6;-1:-1:-1;;;;;18510:6:0;6736:10;31734:23;31726:32;;;;;;31798:21;31830:32;31798:21;31830:12;:32::i;:::-;31715:155;31684:186::o;23057:138::-;-1:-1:-1;;;;;23170:16:0;;23123:7;23170:16;;;:7;:16;;;;;;23150:37;;:19;:37::i;19087:148::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;19194:1:::1;19178:6:::0;;19157:40:::1;::::0;-1:-1:-1;;;;;19178:6:0;;::::1;::::0;19157:40:::1;::::0;19194:1;;19157:40:::1;19225:1;19208:19:::0;;-1:-1:-1;;;;;;19208:19:0::1;::::0;;19087:148::o;33973:85::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;20328:19:::1;34026:14;:24:::0;33973:85::o;29163:237::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;29275:17:::1;::::0;29251:49:::1;::::0;-1:-1:-1;;;;;29251:49:0;;::::1;::::0;29275:17:::1;::::0;29251:49:::1;::::0;29275:17:::1;::::0;29251:49:::1;29312:17;:25:::0;;-1:-1:-1;;;;;29312:25:0;;::::1;-1:-1:-1::0;;;;;;29312:25:0;;::::1;::::0;::::1;::::0;;:17:::1;29348:37:::0;;;:18:::1;:37;::::0;;;;:44;;-1:-1:-1;;29348:44:0::1;29312:25:::0;29348:44:::1;::::0;;29163:237::o;33795:170::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;33866:9:::1;33887:4;-1:-1:-1::0;;;;;33879:18:0::1;33906:21;33879:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33865:68;;;33952:4;33944:13;;;::::0;::::1;;33854:111;33795:170:::0;:::o;34070:353::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;34302:45:::1;::::0;-1:-1:-1;;;34302:45:0;;34332:4:::1;34302:45;::::0;::::1;6314:51:1::0;6381:18;;;6374:34;;;34190:14:0;;-1:-1:-1;;;;;34302:21:0;::::1;::::0;::::1;::::0;6287:18:1;;34302:45:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34356:13;-1:-1:-1::0;;;;;34356:26:0::1;;34391:4;34398:7;18483::::0;18510:6;-1:-1:-1;;;;;18510:6:0;;18445:79;34398:7:::1;34356:59;::::0;-1:-1:-1;;;;;;34356:59:0::1;::::0;;;;;;-1:-1:-1;;;;;6927:15:1;;;34356:59:0::1;::::0;::::1;6909:34:1::0;6979:15;;6959:18;;;6952:43;7011:18;;;7004:34;;;6844:18;;34356:59:0::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34153:270;34070:353:::0;;:::o;28855:213::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;28957:11:::1;::::0;28939:39:::1;::::0;-1:-1:-1;;;;;28939:39:0;;::::1;::::0;28957:11:::1;::::0;28939:39:::1;::::0;28957:11:::1;::::0;28939:39:::1;28990:11;:21:::0;;-1:-1:-1;;;;;28990:21:0;;::::1;-1:-1:-1::0;;;;;;28990:21:0;;::::1;::::0;::::1;::::0;;:11:::1;29022:31:::0;;;:18:::1;:31;::::0;;;;:38;;-1:-1:-1;;29022:38:0::1;28990:21:::0;29022:38:::1;::::0;;28855:213::o;31882:553::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;32037:1:::1;32021:13;:17;32013:58;;;::::0;-1:-1:-1;;;32013:58:0;;7251:2:1;32013:58:0::1;::::0;::::1;7233:21:1::0;7290:2;7270:18;;;7263:30;7329;7309:18;;;7302:58;7377:18;;32013:58:0::1;7049:352:1::0;32013:58:0::1;32104:1;32087:14;:18;32079:59;;;::::0;-1:-1:-1;;;32079:59:0;;7251:2:1;32079:59:0::1;::::0;::::1;7233:21:1::0;7290:2;7270:18;;;7263:30;7329;7309:18;;;7302:58;7377:18;;32079:59:0::1;7049:352:1::0;32079:59:0::1;32168:2;32154:11;:16;32146:56;;;::::0;-1:-1:-1;;;32146:56:0;;7608:2:1;32146:56:0::1;::::0;::::1;7590:21:1::0;7647:2;7627:18;;;7620:30;7686:29;7666:18;;;7659:57;7733:18;;32146:56:0::1;7406:351:1::0;32146:56:0::1;32233:2;32218:12;:17;32210:57;;;::::0;-1:-1:-1;;;32210:57:0;;7608:2:1;32210:57:0::1;::::0;::::1;7590:21:1::0;7647:2;7627:18;;;7620:30;7686:29;7666:18;;;7659:57;7733:18;;32210:57:0::1;7406:351:1::0;32210:57:0::1;32278:14;:30:::0;;;;32319:15:::1;:32:::0;;;;32362:12:::1;:26:::0;32399:13:::1;:28:::0;31882:553::o;29796:245::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;29910:15:::1;::::0;29888:51:::1;::::0;-1:-1:-1;;;;;29888:51:0;;::::1;::::0;29910:15:::1;::::0;29888:51:::1;::::0;29910:15:::1;::::0;29888:51:::1;29951:15;:29:::0;;-1:-1:-1;;;;;29951:29:0;;::::1;-1:-1:-1::0;;;;;;29951:29:0;;::::1;::::0;::::1;::::0;;:15:::1;29991:35:::0;;;:18:::1;:35;::::0;;;;:42;;-1:-1:-1;;29991:42:0::1;29951:29:::0;29991:42:::1;::::0;;29796:245::o;23203:167::-;23281:4;23298:42;6736:10;23322:9;23333:6;23298:9;:42::i;22507:162::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;22588:15:::1;:24:::0;;-1:-1:-1;;;;;;22588:24:0::1;-1:-1:-1::0;;;;;22588:24:0;::::1;::::0;;::::1;::::0;;;22623:38:::1;::::0;-1:-1:-1;22623:15:0::1;:38::i;22363:136::-:0;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;22441:17:::1;::::0;-1:-1:-1;;;22441:17:0;::::1;;;22440:18;22432:27;;;::::0;::::1;;22470:11;:21:::0;;-1:-1:-1;;22470:21:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;22363:136::o;29486:221::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;29591:12:::1;::::0;29572:42:::1;::::0;-1:-1:-1;;;;;29572:42:0;;::::1;::::0;29591:12:::1;::::0;29572:42:::1;::::0;29591:12:::1;::::0;29572:42:::1;29626:12;:23:::0;;-1:-1:-1;;;;;29626:23:0;;::::1;-1:-1:-1::0;;;;;;29626:23:0;;::::1;::::0;::::1;::::0;;:12:::1;29660:32:::0;;;:18:::1;:32;::::0;;;;:39;;-1:-1:-1;;29660:39:0::1;29626:23:::0;29660:39:::1;::::0;;29486:221::o;33016:181::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33101:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;33101:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33155:34;;1371:41:1;;;33155:34:0::1;::::0;1344:18:1;33155:34:0::1;1231:187:1::0;31489::0;18483:7;18510:6;-1:-1:-1;;;;;18510:6:0;6736:10;31539:23;31531:32;;;;;;31574:23;31600:24;31618:4;31600:9;:24::i;:::-;31574:50;;31635:33;31652:15;31635:16;:33::i;32637:301::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;32754:9:::1;32750:114;32769:19:::0;;::::1;32750:114;;;32844:8;32810:18;:31;32829:8;;32838:1;32829:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32810:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;32810:31:0;:42;;-1:-1:-1;;32810:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32790:3;::::1;::::0;::::1;:::i;:::-;;;;32750:114;;;;32879:51;32911:8;;32921;32879:51;;;;;;;;:::i;:::-;;;;;;;;32637:301:::0;;;:::o;28557:209::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;28692:3:::1;-1:-1:-1::0;;;;;28666:39:0::1;28680:10;-1:-1:-1::0;;;;;28666:39:0::1;;28697:7;28666:39;;;;1821:25:1::0;;1809:2;1794:18;;1675:177;28666:39:0::1;;;;;;;;28717:41;::::0;-1:-1:-1;;;28717:41:0;;-1:-1:-1;;;;;6332:32:1;;;28717:41:0::1;::::0;::::1;6314:51:1::0;6381:18;;;6374:34;;;28717:27:0;::::1;::::0;::::1;::::0;6287:18:1;;28717:41:0::1;6140:274:1::0;19390:244:0;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19479:22:0;::::1;19471:73;;;::::0;-1:-1:-1;;;19471:73:0;;9167:2:1;19471:73:0::1;::::0;::::1;9149:21:1::0;9206:2;9186:18;;;9179:30;9245:34;9225:18;;;9218:62;-1:-1:-1;;;9296:18:1;;;9289:36;9342:19;;19471:73:0::1;8965:402:1::0;19471:73:0::1;19581:6;::::0;;19560:38:::1;::::0;-1:-1:-1;;;;;19560:38:0;;::::1;::::0;19581:6;::::1;::::0;19560:38:::1;::::0;::::1;19609:6;:17:::0;;-1:-1:-1;;;;;;19609:17:0::1;-1:-1:-1::0;;;;;19609:17:0;;;::::1;::::0;;;::::1;::::0;;19390:244::o;33516:271::-;18657:6;;-1:-1:-1;;;;;18657:6:0;6736:10;18657:22;18649:67;;;;-1:-1:-1;;;18649:67:0;;;;;;;:::i;:::-;33621:9:::1;33617:107;33636:19:::0;;::::1;33617:107;;;33707:5;33677:14;:27;33692:8;;33701:1;33692:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33677:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;33677:27:0;:35;;-1:-1:-1;;33677:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33657:3;::::1;::::0;::::1;:::i;:::-;;;;33617:107;;;;33739:40;33763:8;;33773:5;33739:40;;;;;;;;:::i;24281:335::-:0;-1:-1:-1;;;;;24374:19:0;;24366:68;;;;-1:-1:-1;;;24366:68:0;;9574:2:1;24366:68:0;;;9556:21:1;9613:2;9593:18;;;9586:30;9652:34;9632:18;;;9625:62;-1:-1:-1;;;9703:18:1;;;9696:34;9747:19;;24366:68:0;9372:400:1;24366:68:0;-1:-1:-1;;;;;24453:21:0;;24445:68;;;;-1:-1:-1;;;24445:68:0;;9979:2:1;24445:68:0;;;9961:21:1;10018:2;9998:18;;;9991:30;10057:34;10037:18;;;10030:62;-1:-1:-1;;;10108:18:1;;;10101:32;10150:19;;24445:68:0;9777:398:1;24445:68:0;-1:-1:-1;;;;;24524:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24576:32;;1821:25:1;;;24576:32:0;;1794:18:1;24576:32:0;;;;;;;24281:335;;;:::o;24624:2582::-;-1:-1:-1;;;;;24712:18:0;;24704:68;;;;-1:-1:-1;;;24704:68:0;;10382:2:1;24704:68:0;;;10364:21:1;10421:2;10401:18;;;10394:30;10460:34;10440:18;;;10433:62;-1:-1:-1;;;10511:18:1;;;10504:35;10556:19;;24704:68:0;10180:401:1;24704:68:0;-1:-1:-1;;;;;24791:16:0;;24783:64;;;;-1:-1:-1;;;24783:64:0;;10788:2:1;24783:64:0;;;10770:21:1;10827:2;10807:18;;;10800:30;10866:34;10846:18;;;10839:62;-1:-1:-1;;;10917:18:1;;;10910:33;10960:19;;24783:64:0;10586:399:1;24783:64:0;24875:1;24866:6;:10;24858:64;;;;-1:-1:-1;;;24858:64:0;;11192:2:1;24858:64:0;;;11174:21:1;11231:2;11211:18;;;11204:30;11270:34;11250:18;;;11243:62;-1:-1:-1;;;11321:18:1;;;11314:39;11370:19;;24858:64:0;10990:405:1;24858:64:0;-1:-1:-1;;;;;24942:20:0;;;;;;:14;:20;;;;;;;;24941:21;24933:53;;;;-1:-1:-1;;;24933:53:0;;11602:2:1;24933:53:0;;;11584:21:1;11641:2;11621:18;;;11614:30;-1:-1:-1;;;11660:18:1;;;11653:49;11719:18;;24933:53:0;11400:343:1;24933:53:0;25011:1;24999:9;:13;;;25023:7;:11;25100:17;;-1:-1:-1;;;25100:17:0;;;;25095:245;;25144:13;;-1:-1:-1;;;;;25144:13:0;;;25138:19;;;;25134:195;;25178:17;:24;;-1:-1:-1;;;;25178:24:0;-1:-1:-1;;;25178:24:0;;;25302:11;;25287:26;;25178:24;25302:11;25287:12;:26;:::i;:::-;25267:17;:46;25134:195;25397:15;;-1:-1:-1;;;;;25381:32:0;;;25397:15;;25381:32;25377:434;;25433:17;;-1:-1:-1;;;25433:17:0;;;;:54;;;;;25470:17;;25454:12;:33;;25433:54;:72;;;;-1:-1:-1;25492:13:0;;-1:-1:-1;;;25492:13:0;;;;25491:14;25433:72;25430:370;;;25537:14;;25525:9;:26;25580:12;;25570:7;:22;25611:30;25626:4;25631:2;25634:6;25611:14;:30::i;:::-;25678:13;;-1:-1:-1;;;;;25664:28:0;;;25678:13;;25664:28;25660:100;;-1:-1:-1;;;;;25717:18:0;;;;;;:14;:18;;;;;:23;;-1:-1:-1;;25717:23:0;25736:4;25717:23;;;25660:100;24624:2582;;;:::o;25430:370::-;25827:17;;-1:-1:-1;;;25827:17:0;;;;:34;;;;-1:-1:-1;25848:13:0;;-1:-1:-1;;;25848:13:0;;;;25827:34;25823:87;;;25877:13;:21;;-1:-1:-1;;;;25877:21:0;;;25823:87;18483:7;18510:6;-1:-1:-1;;;;;25934:15:0;;;18510:6;;25934:15;;;;:32;;-1:-1:-1;18483:7:0;18510:6;-1:-1:-1;;;;;25953:13:0;;;18510:6;;25953:13;;25934:32;25930:1226;;;25997:28;26028:24;26046:4;26028:9;:24::i;:::-;26072:6;;25997:55;;-1:-1:-1;;;;26072:6:0;;;;26071:7;:32;;;;-1:-1:-1;26090:13:0;;-1:-1:-1;;;;;26082:21:0;;;26090:13;;26082:21;;26071:32;:47;;;;-1:-1:-1;26107:11:0;;-1:-1:-1;;;26107:11:0;;;;26071:47;:75;;;;;26145:1;26122:20;:24;26071:75;26067:377;;;26167:69;26184:51;26188:6;26196:38;26200:20;26222:11;;26196:3;:38::i;:::-;26184:3;:51::i;:::-;26167:16;:69::i;:::-;26284:21;26327:22;;26324:105;;26374:35;26387:21;26374:12;:35::i;:::-;26148:296;26067:377;26483:13;;-1:-1:-1;;;;;26475:21:0;;;26483:13;;26475:21;:55;;;;-1:-1:-1;26514:15:0;;-1:-1:-1;;;;;26500:30:0;;;26514:15;;26500:30;;26475:55;26472:260;;;26585:14;;26575:6;26559:13;26569:2;26559:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;26551:79;;;;-1:-1:-1;;;26551:79:0;;12080:2:1;26551:79:0;;;12062:21:1;12119:2;12099:18;;;12092:30;12158:28;12138:18;;;12131:56;12204:18;;26551:79:0;11878:350:1;26551:79:0;26661:14;;26649:9;:26;26704:12;;26694:7;:22;26472:260;26762:13;;-1:-1:-1;;;;;26756:19:0;;;26762:13;;26756:19;:55;;;;-1:-1:-1;26795:15:0;;-1:-1:-1;;;;;26779:32:0;;;26795:15;;26779:32;;26756:55;26752:165;;;26844:15;;26832:9;:27;26888:13;;26878:7;:23;26752:165;-1:-1:-1;;;;;26950:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;26978:22:0;;;;;;:18;:22;;;;;;;;26950:50;26949:102;;;-1:-1:-1;27014:13:0;;-1:-1:-1;;;;;27006:21:0;;;27014:13;;27006:21;;;;:44;;-1:-1:-1;27037:13:0;;-1:-1:-1;;;;;27031:19:0;;;27037:13;;27031:19;;27006:44;26945:186;;;27084:1;27072:9;:13;;;27104:7;:11;26945:186;25968:1188;25930:1226;27168:30;27183:4;27188:2;27191:6;27168:14;:30::i;8768:192::-;8854:7;8890:12;8882:6;;;;8874:29;;;;-1:-1:-1;;;8874:29:0;;;;;;;;:::i;:::-;-1:-1:-1;8914:9:0;8926:5;8930:1;8926;:5;:::i;:::-;8914:17;8768:192;-1:-1:-1;;;;;8768:192:0:o;27713:482::-;27770:17;27790:20;27808:1;27790:13;:6;27801:1;27790:10;:13::i;:::-;:17;;:20::i;:::-;27770:40;-1:-1:-1;27821:17:0;27841:20;27859:1;27841:13;:6;27852:1;27841:10;:13::i;:20::-;27821:40;-1:-1:-1;27872:21:0;27896:20;27914:1;27896:13;:6;27907:1;27896:10;:13::i;:20::-;27872:44;-1:-1:-1;27927:18:0;27948:55;27872:44;27948:36;27974:9;27948:36;:6;27959:9;27948:10;:21::i;:::-;:25;;:36::i;:55::-;28014:11;;:31;;27927:76;;-1:-1:-1;;;;;;28014:11:0;;:31;;;;;28035:9;;28014:11;:31;:11;:31;28035:9;28014:11;:31;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28056:17:0;;:37;;-1:-1:-1;;;;;28056:17:0;;;;:37;;;;;28083:9;;28056:17;:37;:17;:37;28083:9;28056:17;:37;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28104:15:0;;:39;;-1:-1:-1;;;;;28104:15:0;;;;:39;;;;;28129:13;;28104:15;:39;:15;:39;28129:13;28104:15;:39;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28154:12:0;;:33;;-1:-1:-1;;;;;28154:12:0;;;;:33;;;;;28176:10;;28154:12;:33;:12;:33;28176:10;28154:12;:33;;;;;;;;;;;;;;;;;;;;;27759:436;;;;27713:482;:::o;24019:254::-;24086:7;24125;;24114;:18;;24106:73;;;;-1:-1:-1;;;24106:73:0;;12568:2:1;24106:73:0;;;12550:21:1;12607:2;12587:18;;;12580:30;12646:34;12626:18;;;12619:62;-1:-1:-1;;;12697:18:1;;;12690:40;12747:19;;24106:73:0;12366:406:1;24106:73:0;24190:19;24213:10;:8;:10::i;:::-;24190:33;-1:-1:-1;24241:24:0;:7;24190:33;24241:11;:24::i;:::-;24234:31;24019:254;-1:-1:-1;;;24019:254:0:o;27214:483::-;21509:6;:13;;-1:-1:-1;;;;21509:13:0;-1:-1:-1;;;21509:13:0;;;27316:16:::1;::::0;;27330:1:::1;27316:16:::0;;;;;::::1;::::0;;-1:-1:-1;;27316:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27316:16:0::1;27292:40;;27361:4;27343;27348:1;27343:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27343:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;27387:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;27387:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;27343:7;;27387:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27377:4;27382:1;27377:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27377:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;27452:15:::1;::::0;27420:62:::1;::::0;27437:4:::1;::::0;27452:15:::1;27470:11:::0;27420:8:::1;:62::i;:::-;27493:15;::::0;:196:::1;::::0;-1:-1:-1;;;27493:196:0;;-1:-1:-1;;;;;27493:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;27574:11;;27493:15:::1;::::0;27616:4;;27643::::1;::::0;27663:15:::1;::::0;27493:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;21545:6:0;:14;;-1:-1:-1;;;;21545:14:0;;;-1:-1:-1;;;;27214:483:0:o;28321:146::-;28415:44;28433:6;28441:9;28452:6;28415:17;:44::i;28203:106::-;28260:7;28291:1;28287;:5;28286:15;;28300:1;28286:15;;;-1:-1:-1;28296:1:0;28279:22;-1:-1:-1;28203:106:0:o;9219:471::-;9277:7;9522:1;9527;9522:6;9518:47;;-1:-1:-1;9552:1:0;9545:8;;9518:47;9577:9;9589:5;9593:1;9589;:5;:::i;:::-;9577:17;-1:-1:-1;9622:1:0;9613:5;9617:1;9577:17;9613:5;:::i;:::-;:10;9605:56;;;;-1:-1:-1;;;9605:56:0;;14747:2:1;9605:56:0;;;14729:21:1;14786:2;14766:18;;;14759:30;14825:34;14805:18;;;14798:62;-1:-1:-1;;;14876:18:1;;;14869:31;14917:19;;9605:56:0;14545:397:1;10166:132:0;10224:7;10251:39;10255:1;10258;10251:39;;;;;;;;;;;;;;;;;:3;:39::i;8329:136::-;8387:7;8414:43;8418:1;8421;8414:43;;;;;;;;;;;;;;;;;:3;:43::i;31048:163::-;31089:7;31110:15;31127;31146:19;:17;:19::i;:::-;31109:56;;-1:-1:-1;31109:56:0;-1:-1:-1;31183:20:0;31109:56;;31183:11;:20::i;:::-;31176:27;;;;31048:163;:::o;30049:805::-;30147:19;30170:10;:8;:10::i;:::-;30147:33;;30191:23;30217:79;30266:29;30291:3;30266:20;30278:7;;30266;:11;;:20;;;;:::i;:29::-;30217:44;30229:31;30256:3;30229:22;30241:9;;30229:7;:11;;:22;;;;:::i;:31::-;30217:7;;:11;:44::i;:79::-;30191:105;-1:-1:-1;30307:15:0;30325:24;:7;30337:11;30325;:24::i;:::-;30307:42;;30360:12;30375:48;30411:11;30375:31;30402:3;30375:22;30387:9;;30375:7;:11;;:22;;;;:::i;:31::-;:35;;:48::i;:::-;30360:63;;30434:13;30450:46;30484:11;30450:29;30475:3;30450:20;30462:7;;30450;:11;;:20;;;;:::i;:46::-;30434:62;-1:-1:-1;30507:23:0;30533:28;30434:62;30533:17;:7;30545:4;30533:11;:17::i;:28::-;-1:-1:-1;;;;;30590:15:0;;;;;;:7;:15;;;;;;30507:54;;-1:-1:-1;30590:28:0;;30610:7;30590:19;:28::i;:::-;-1:-1:-1;;;;;30572:15:0;;;;;;;:7;:15;;;;;;:46;;;;30650:18;;;;;;;:39;;30673:15;30650:22;:39::i;:::-;-1:-1:-1;;;;;30629:18:0;;;;;;:7;:18;;;;;;:60;;;;30741:4;30725:22;;;;:33;;30752:5;30725:26;:33::i;:::-;30716:4;30700:22;;;;:7;:22;;;;;:58;30769:17;30781:4;30769:11;:17::i;:::-;30819:9;-1:-1:-1;;;;;30802:44:0;30811:6;-1:-1:-1;;;;;30802:44:0;;30830:15;30802:44;;;;1821:25:1;;1809:2;1794:18;;1675:177;30802:44:0;;;;;;;;30136:718;;;;;;30049:805;;;:::o;10794:278::-;10880:7;10915:12;10908:5;10900:28;;;;-1:-1:-1;;;10900:28:0;;;;;;;;:::i;:::-;-1:-1:-1;10939:9:0;10951:5;10955:1;10951;:5;:::i;31219:262::-;31316:7;;31269;;;;20328:19;31390:20;31316:7;20328:19;31390:11;:20::i;:::-;31380:7;:30;31376:61;;;-1:-1:-1;;31420:7:0;;;20328:19;;-1:-1:-1;31219:262:0;-1:-1:-1;31219:262:0:o;31376:61::-;31456:7;;31465;;-1:-1:-1;31219:262:0;-1:-1:-1;31219:262:0:o;7865:181::-;7923:7;;7955:5;7959:1;7955;:5;:::i;:::-;7943:17;;7984:1;7979;:6;;7971:46;;;;-1:-1:-1;;;7971:46:0;;15149:2:1;7971:46:0;;;15131:21:1;15188:2;15168:18;;;15161:30;15227:29;15207:18;;;15200:57;15274:18;;7971:46:0;14947:351:1;30917:89:0;30981:7;;:17;;30993:4;30981:11;:17::i;:::-;30971:7;:27;-1:-1:-1;30917:89:0:o;222:548:1:-;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;506:3;691:1;686:2;677:6;666:9;662:22;658:31;651:42;761:2;754;750:7;745:2;737:6;733:15;729:29;718:9;714:45;710:54;702:62;;;;222:548;;;;:::o;775:131::-;-1:-1:-1;;;;;850:31:1;;840:42;;830:70;;896:1;893;886:12;911:315;979:6;987;1040:2;1028:9;1019:7;1015:23;1011:32;1008:52;;;1056:1;1053;1046:12;1008:52;1095:9;1082:23;1114:31;1139:5;1114:31;:::i;:::-;1164:5;1216:2;1201:18;;;;1188:32;;-1:-1:-1;;;911:315:1:o;1423:247::-;1482:6;1535:2;1523:9;1514:7;1510:23;1506:32;1503:52;;;1551:1;1548;1541:12;1503:52;1590:9;1577:23;1609:31;1634:5;1609:31;:::i;2091:456::-;2168:6;2176;2184;2237:2;2225:9;2216:7;2212:23;2208:32;2205:52;;;2253:1;2250;2243:12;2205:52;2292:9;2279:23;2311:31;2336:5;2311:31;:::i;:::-;2361:5;-1:-1:-1;2418:2:1;2403:18;;2390:32;2431:33;2390:32;2431:33;:::i;:::-;2091:456;;2483:7;;-1:-1:-1;;;2537:2:1;2522:18;;;;2509:32;;2091:456::o;2741:118::-;2827:5;2820:13;2813:21;2806:5;2803:32;2793:60;;2849:1;2846;2839:12;2864:382;2929:6;2937;2990:2;2978:9;2969:7;2965:23;2961:32;2958:52;;;3006:1;3003;2996:12;2958:52;3045:9;3032:23;3064:31;3089:5;3064:31;:::i;:::-;3114:5;-1:-1:-1;3171:2:1;3156:18;;3143:32;3184:30;3143:32;3184:30;:::i;:::-;3233:7;3223:17;;;2864:382;;;;;:::o;3251:241::-;3307:6;3360:2;3348:9;3339:7;3335:23;3331:32;3328:52;;;3376:1;3373;3366:12;3328:52;3415:9;3402:23;3434:28;3456:5;3434:28;:::i;3757:385::-;3843:6;3851;3859;3867;3920:3;3908:9;3899:7;3895:23;3891:33;3888:53;;;3937:1;3934;3927:12;3888:53;-1:-1:-1;;3960:23:1;;;4030:2;4015:18;;4002:32;;-1:-1:-1;4081:2:1;4066:18;;4053:32;;4132:2;4117:18;4104:32;;-1:-1:-1;3757:385:1;-1:-1:-1;3757:385:1:o;4147:269::-;4204:6;4257:2;4245:9;4236:7;4232:23;4228:32;4225:52;;;4273:1;4270;4263:12;4225:52;4312:9;4299:23;4362:4;4355:5;4351:16;4344:5;4341:27;4331:55;;4382:1;4379;4372:12;4421:750;4513:6;4521;4529;4582:2;4570:9;4561:7;4557:23;4553:32;4550:52;;;4598:1;4595;4588:12;4550:52;4638:9;4625:23;4667:18;4708:2;4700:6;4697:14;4694:34;;;4724:1;4721;4714:12;4694:34;4762:6;4751:9;4747:22;4737:32;;4807:7;4800:4;4796:2;4792:13;4788:27;4778:55;;4829:1;4826;4819:12;4778:55;4869:2;4856:16;4895:2;4887:6;4884:14;4881:34;;;4911:1;4908;4901:12;4881:34;4966:7;4959:4;4949:6;4946:1;4942:14;4938:2;4934:23;4930:34;4927:47;4924:67;;;4987:1;4984;4977:12;4924:67;5018:4;5010:13;;;;-1:-1:-1;5042:6:1;-1:-1:-1;;5083:20:1;;5070:34;5113:28;5070:34;5113:28;:::i;:::-;5160:5;5150:15;;;4421:750;;;;;:::o;5176:388::-;5244:6;5252;5305:2;5293:9;5284:7;5280:23;5276:32;5273:52;;;5321:1;5318;5311:12;5273:52;5360:9;5347:23;5379:31;5404:5;5379:31;:::i;:::-;5429:5;-1:-1:-1;5486:2:1;5471:18;;5458:32;5499:33;5458:32;5499:33;:::i;5569:356::-;5771:2;5753:21;;;5790:18;;;5783:30;5849:34;5844:2;5829:18;;5822:62;5916:2;5901:18;;5569:356::o;6419:245::-;6486:6;6539:2;6527:9;6518:7;6514:23;6510:32;6507:52;;;6555:1;6552;6545:12;6507:52;6587:9;6581:16;6606:28;6628:5;6606:28;:::i;7762:127::-;7823:10;7818:3;7814:20;7811:1;7804:31;7854:4;7851:1;7844:15;7878:4;7875:1;7868:15;7894:127;7955:10;7950:3;7946:20;7943:1;7936:31;7986:4;7983:1;7976:15;8010:4;8007:1;8000:15;8026:135;8065:3;8086:17;;;8083:43;;8106:18;;:::i;:::-;-1:-1:-1;8153:1:1;8142:13;;8026:135::o;8166:794::-;8388:2;8400:21;;;8373:18;;8456:22;;;8340:4;8535:6;8509:2;8494:18;;8340:4;8569:304;8583:6;8580:1;8577:13;8569:304;;;8658:6;8645:20;8678:31;8703:5;8678:31;:::i;:::-;-1:-1:-1;;;;;8734:31:1;8722:44;;8789:4;8848:15;;;;8813:12;;;;8762:1;8598:9;8569:304;;;8573:3;8890;8882:11;;;;8945:6;8938:14;8931:22;8924:4;8913:9;8909:20;8902:52;8166:794;;;;;;:::o;11748:125::-;11813:9;;;11834:10;;;11831:36;;;11847:18;;:::i;12233:128::-;12300:9;;;12321:11;;;12318:37;;;12335:18;;:::i;12909:251::-;12979:6;13032:2;13020:9;13011:7;13007:23;13003:32;13000:52;;;13048:1;13045;13038:12;13000:52;13080:9;13074:16;13099:31;13124:5;13099:31;:::i;13165:980::-;13427:4;13475:3;13464:9;13460:19;13506:6;13495:9;13488:25;13532:2;13570:6;13565:2;13554:9;13550:18;13543:34;13613:3;13608:2;13597:9;13593:18;13586:31;13637:6;13672;13666:13;13703:6;13695;13688:22;13741:3;13730:9;13726:19;13719:26;;13780:2;13772:6;13768:15;13754:29;;13801:1;13811:195;13825:6;13822:1;13819:13;13811:195;;;13890:13;;-1:-1:-1;;;;;13886:39:1;13874:52;;13981:15;;;;13946:12;;;;13922:1;13840:9;13811:195;;;-1:-1:-1;;;;;;;14062:32:1;;;;14057:2;14042:18;;14035:60;-1:-1:-1;;;14126:3:1;14111:19;14104:35;14023:3;13165:980;-1:-1:-1;;;13165:980:1:o;14150:168::-;14223:9;;;14254;;14271:15;;;14265:22;;14251:37;14241:71;;14292:18;;:::i;14323:217::-;14363:1;14389;14379:132;;14433:10;14428:3;14424:20;14421:1;14414:31;14468:4;14465:1;14458:15;14496:4;14493:1;14486:15;14379:132;-1:-1:-1;14525:9:1;;14323:217::o

Swarm Source

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