ETH Price: $2,444.53 (+3.50%)
Gas: 2.24 Gwei

Token

Rogule (ROG)
 

Overview

Max Total Supply

1,000,000,000 ROG

Holders

17

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
8,181,370.299673870284564934 ROG

Value
$0.00
0x63a560e2929dd0d6f72d342700959ae41b34d004
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:
Rogule

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity 0.8.14;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);
 
    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);
 
    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);
 
    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);
 
    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
 
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);
 
    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);
 
    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);
 
    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    mapping(address => uint256) private _balances;
 
    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;
 
    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
 
    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
 
    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
 
    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
 
    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
 
    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
 
    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
 
    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
 
    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
 
    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
 
    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
 
        _beforeTokenTransfer(sender, recipient, amount);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
 
    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
 
        _beforeTokenTransfer(address(0), account, amount);
 
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
 
    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
 
        _beforeTokenTransfer(account, address(0), amount);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
 
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
 
    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}
 
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;
    }
}
 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);
 
    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }
 
    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }
 
    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }
 
    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
 
    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract Rogule is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private swapping;
 
    address private marketingWallet;
    address private devWallet;
    address private buybackWallet;
 
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
 
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool public enableEarlySellTax = true;
    bool public oktoswap = false;
 
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
 
    // Seller Map
    mapping (address => uint256) private _holderFirstBuyTimestamp;
 
    // Blacklist Map
    mapping (address => bool) private _blacklist;
    bool public transferDelayEnabled = true;
 
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public buyBuybackFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    uint256 public sellBuybackFee;
 
    uint256 public earlySellLiquidityFee;
    uint256 public earlySellMarketingFee;
    uint256 public earlySellDevFee;
    uint256 public earlySellBuybackFee;
 
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 public tokensForBuyback;
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20("Rogule", "ROG") {
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        uint256 _buyMarketingFee = 2;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyDevFee = 2;
        uint256 _buyBuybackFee = 0;
 
        uint256 _sellMarketingFee = 2;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellDevFee = 2;
        uint256 _sellBuybackFee = 0;
 
        uint256 _earlySellLiquidityFee = 2;
        uint256 _earlySellMarketingFee = 10;
	    uint256 _earlySellDevFee = 5;
        uint256 _earlySellBuybackFee = 0;
 
        uint256 totalSupply = 1_000_000_000 * 1e18;
 
        maxTransactionAmount = totalSupply * 10 / 1000; // 1% maxTransactionAmountTxn
        maxWallet = totalSupply * 20 / 1000; // 2% maxWallet
        swapTokensAtAmount = totalSupply * 10 / 10000; // 0.1% swap wallet
 
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyBuybackFee = _buyBuybackFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee + buyBuybackFee;
 
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellBuybackFee = _sellBuybackFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee + sellBuybackFee;
 
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
	    earlySellDevFee = _earlySellDevFee;
        earlySellBuybackFee = _earlySellBuybackFee;
 
        marketingWallet = address(owner()); // set as marketing wallet
        devWallet = address(owner()); // set as dev wallet  
        buybackWallet = address(owner()); // set as dev wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {
 
    }
 
    // once enabled, can never be turned off
    function launchCoin() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
        oktoswap = true;
    }

    // remove limits after token is stable
    function removelimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
 
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
 
    function setEarlySellTax(bool onoff) external onlyOwner  {
        enableEarlySellTax = onoff;
    }
 
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
 
    function updateMxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }
 
    function updateMxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
 
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _buybackFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyBuybackFee = _buybackFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee + buyBuybackFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }
 
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _buybackFee, uint256 _earlySellLiquidityFee, uint256 _earlySellMarketingFee, uint256 _earlySellDevFee, uint256 _earlySellBuybackFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellBuybackFee = _buybackFee;
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
	    earlySellDevFee = _earlySellDevFee;
        earlySellBuybackFee = _earlySellBuybackFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee + sellBuybackFee;
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function Manage (address account, bool isBlacklisted) public onlyOwner {
        _blacklist[account] = isBlacklisted;
    }
 
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }
 
    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
    
    function updateBuybackWallet(address newBuybackWallet) external onlyOwner {
        buybackWallet = newBuybackWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }
 
 
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    event BoughtEarly(address indexed sniper);
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        if (!oktoswap) {
        
        
        // anti bot logic
        if (block.number <= (launchedAt + 1) && 
                to != uniswapV2Pair && 
                to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
            ) { 
            _blacklist[to] = true;
        }
        
        }// early sell logic
        bool isBuy = from == uniswapV2Pair;
        if (!isBuy && enableEarlySellTax) {
            if (_holderFirstBuyTimestamp[from] != 0 &&
                (_holderFirstBuyTimestamp[from] + (1 hours) >= block.timestamp))  {
                sellLiquidityFee = earlySellLiquidityFee;
                sellMarketingFee = earlySellMarketingFee;
		        sellDevFee = earlySellDevFee;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
            } else {
                sellLiquidityFee = 2;
                sellMarketingFee = 10;
                sellBuybackFee = 1;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee + sellBuybackFee;
            }
        } else {
            if (_holderFirstBuyTimestamp[to] == 0) {
                _holderFirstBuyTimestamp[to] = block.timestamp;
            }
 
            if (!enableEarlySellTax) {
                sellLiquidityFee = 2;
                sellMarketingFee = 10;
		        sellDevFee = 1;
                sellBuybackFee = 1;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee + sellBuybackFee;
            }
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
 
        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
 
            swapBack();
 
            swapping = false;
        }
 
        bool takeFee = !swapping;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
                tokensForBuyback += fees * sellBuybackFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
                tokensForBuyback += fees * buyBuybackFee / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForBuyback = ethBalance.mul(tokensForBuyback).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev - ethForBuyback;
 
 
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        tokensForBuyback = 0;
 
        (success,) = address(devWallet).call{value: ethForDev}("");
        (success,) = address(buybackWallet).call{value: ethForBuyback}("");
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }

}

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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"Manage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBuybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySellBuybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchCoin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oktoswap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removelimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBuybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_buybackFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newBuybackWallet","type":"address"}],"name":"updateBuybackWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_buybackFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellDevFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellBuybackFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600c805464ffffffffff191663010000011790556010805460ff191660011790553480156200003257600080fd5b5060405180604001604052806006815260200165526f67756c6560d01b81525060405180604001604052806003815260200162524f4760e81b81525081600390805190602001906200008692919062000761565b5080516200009c90600490602084019062000761565b5050506000620000b16200047f60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d6200012181600162000483565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200016c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000192919062000807565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000206919062000807565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000254573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027a919062000807565b6001600160a01b031660a08190526200029590600162000483565b60a051620002a5906001620004fd565b600260018160008183818381600a6005836b033b2e3c9fd0803ce80000006103e8620002d2828662000848565b620002de91906200086a565b6009556103e8620002f182601462000848565b620002fd91906200086a565b600b556127106200031082600a62000848565b6200031c91906200086a565b600a819055508c6012819055508b6013819055508a601481905550896015819055506015546014546013546012546200035691906200088d565b6200036291906200088d565b6200036e91906200088d565b601155601789905560188890556019879055601a8690558587620003938a8c6200088d565b6200039f91906200088d565b620003ab91906200088d565b601655601b859055601c849055601d839055601e829055600554600680546001600160a01b03199081166001600160a01b039093169283179091556007805482168317905560088054909116821790556200040890600162000551565b6200041530600162000551565b6200042461dead600162000551565b620004436200043b6005546001600160a01b031690565b600162000483565b6200045030600162000483565b6200045f61dead600162000483565b6200046b3382620005fb565b5050505050505050505050505050620008e4565b3390565b6005546001600160a01b03163314620004d25760405162461bcd60e51b8152602060048201819052602482015260008051602062003b3883398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260266020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b031633146200059c5760405162461bcd60e51b8152602060048201819052602482015260008051602062003b388339815191526044820152606401620004c9565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004c9565b6200066f81600254620006f760201b620017711790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620006a291839062001771620006f7821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000806200070683856200088d565b9050838110156200075a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620004c9565b9392505050565b8280546200076f90620008a8565b90600052602060002090601f016020900481019282620007935760008555620007de565b82601f10620007ae57805160ff1916838001178555620007de565b82800160010185558215620007de579182015b82811115620007de578251825591602001919060010190620007c1565b50620007ec929150620007f0565b5090565b5b80821115620007ec5760008155600101620007f1565b6000602082840312156200081a57600080fd5b81516001600160a01b03811681146200075a57600080fd5b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000865576200086562000832565b500290565b6000826200088857634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620008a357620008a362000832565b500190565b600181811c90821680620008bd57607f821691505b602082108103620008de57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516131e862000950600039600081816106120152818161104301528181611b7d01528181611ef20152611f7b0152600081816104a901528181611b3f01528181612a4901528181612b0201528181612b3e01528181612bb80152612c1401526131e86000f3fe6080604052600436106103bc5760003560e01c8063924de9b7116101f2578063c8c8ebe41161010d578063dc4b9a4e116100a0578063f11a24d31161006f578063f11a24d314610afe578063f2fde38b14610b14578063f637434214610b34578063f8b45b0514610b4a57600080fd5b8063dc4b9a4e14610a78578063dd62ed3e14610a8d578063e2f4560514610ad3578063e884f26014610ae957600080fd5b8063d3e70569116100dc578063d3e7056914610a0c578063d4090d2a14610a2c578063d7331c0d14610a42578063d85ba06314610a6257600080fd5b8063c8c8ebe4146109a0578063cc4cfd3f146109b6578063d1a08cde146109d6578063d257b34f146109ec57600080fd5b8063a4d15b6411610185578063b62496f511610154578063b62496f514610917578063bbc0c74214610947578063c024666814610966578063c876d0b91461098657600080fd5b8063a4d15b64146108a0578063a7fc9e21146108c1578063a9059cbb146108d7578063aacebbe3146108f757600080fd5b80639fccce32116101c15780639fccce3214610834578063a0d82dc51461084a578063a265777814610860578063a457c2d71461088057600080fd5b8063924de9b7146107c957806395d89b41146107e95780639a7a23d6146107fe5780639c3b4fdc1461081e57600080fd5b8063475eb16f116102e25780636ddd1713116102755780637571336a116102445780637571336a1461075f5780637bce5a041461077f5780638da5cb5b1461079557806392136913146107b357600080fd5b80636ddd1713146106de57806370a08231146106fe578063715018a61461073457806371a515221461074957600080fd5b8063540ba552116102b1578063540ba55214610687578063541a43cf1461069d5780635e4ae81b146106b35780636a486a8e146106c857600080fd5b8063475eb16f146105e057806349bd5a5e146106005780634a62bb65146106345780634fbee1931461064e57600080fd5b80631816467f1161035a5780632bf3d42d116103295780632bf3d42d1461056e5780632e6ed7ef14610584578063313ce567146105a457806339509351146105c057600080fd5b80631816467f146105025780631a8145bb146105225780631f3fed8f1461053857806323b872dd1461054e57600080fd5b80630c3b2b9a116103965780630c3b2b9a1461044557806310d5de53146104675780631694505e1461049757806318160ddd146104e357600080fd5b806304dacd50146103c857806306fdde03146103ea578063095ea7b31461041557600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103e86103e3366004612cd8565b610b60565b005b3480156103f657600080fd5b506103ff610bb5565b60405161040c9190612cf5565b60405180910390f35b34801561042157600080fd5b50610435610430366004612d4a565b610c47565b604051901515815260200161040c565b34801561045157600080fd5b50600c5461043590640100000000900460ff1681565b34801561047357600080fd5b50610435610482366004612cd8565b60256020526000908152604090205460ff1681565b3480156104a357600080fd5b506104cb7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161040c565b3480156104ef57600080fd5b506002545b60405190815260200161040c565b34801561050e57600080fd5b506103e861051d366004612cd8565b610c5e565b34801561052e57600080fd5b506104f460205481565b34801561054457600080fd5b506104f4601f5481565b34801561055a57600080fd5b50610435610569366004612d76565b610ce5565b34801561057a57600080fd5b506104f4601c5481565b34801561059057600080fd5b506103e861059f366004612db7565b610d4e565b3480156105b057600080fd5b506040516012815260200161040c565b3480156105cc57600080fd5b506104356105db366004612d4a565b610e07565b3480156105ec57600080fd5b506103e86105fb366004612de9565b610e3d565b34801561060c57600080fd5b506104cb7f000000000000000000000000000000000000000000000000000000000000000081565b34801561064057600080fd5b50600c546104359060ff1681565b34801561065a57600080fd5b50610435610669366004612cd8565b6001600160a01b031660009081526024602052604090205460ff1690565b34801561069357600080fd5b506104f460155481565b3480156106a957600080fd5b506104f4601b5481565b3480156106bf57600080fd5b50610435610ebc565b3480156106d457600080fd5b506104f460165481565b3480156106ea57600080fd5b50600c546104359062010000900460ff1681565b34801561070a57600080fd5b506104f4610719366004612cd8565b6001600160a01b031660009081526020819052604090205490565b34801561074057600080fd5b506103e8610ef9565b34801561075557600080fd5b506104f4601a5481565b34801561076b57600080fd5b506103e861077a366004612e4e565b610f6d565b34801561078b57600080fd5b506104f460125481565b3480156107a157600080fd5b506005546001600160a01b03166104cb565b3480156107bf57600080fd5b506104f460175481565b3480156107d557600080fd5b506103e86107e4366004612e83565b610fc2565b3480156107f557600080fd5b506103ff611008565b34801561080a57600080fd5b506103e8610819366004612e4e565b611017565b34801561082a57600080fd5b506104f460145481565b34801561084057600080fd5b506104f460215481565b34801561085657600080fd5b506104f460195481565b34801561086c57600080fd5b506103e861087b366004612e83565b6110f6565b34801561088c57600080fd5b5061043561089b366004612d4a565b61113e565b3480156108ac57600080fd5b50600c54610435906301000000900460ff1681565b3480156108cd57600080fd5b506104f4601d5481565b3480156108e357600080fd5b506104356108f2366004612d4a565b61118d565b34801561090357600080fd5b506103e8610912366004612cd8565b61119a565b34801561092357600080fd5b50610435610932366004612cd8565b60266020526000908152604090205460ff1681565b34801561095357600080fd5b50600c5461043590610100900460ff1681565b34801561097257600080fd5b506103e8610981366004612e4e565b611221565b34801561099257600080fd5b506010546104359060ff1681565b3480156109ac57600080fd5b506104f460095481565b3480156109c257600080fd5b506103e86109d1366004612e9e565b6112aa565b3480156109e257600080fd5b506104f4601e5481565b3480156109f857600080fd5b50610435610a07366004612e9e565b611387565b348015610a1857600080fd5b506103e8610a27366004612e4e565b6114de565b348015610a3857600080fd5b506104f460225481565b348015610a4e57600080fd5b506103e8610a5d366004612e9e565b611533565b348015610a6e57600080fd5b506104f460115481565b348015610a8457600080fd5b506103e8611604565b348015610a9957600080fd5b506104f4610aa8366004612eb7565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610adf57600080fd5b506104f4600a5481565b348015610af557600080fd5b50610435611649565b348015610b0a57600080fd5b506104f460135481565b348015610b2057600080fd5b506103e8610b2f366004612cd8565b611686565b348015610b4057600080fd5b506104f460185481565b348015610b5657600080fd5b506104f4600b5481565b6005546001600160a01b03163314610b935760405162461bcd60e51b8152600401610b8a90612ef0565b60405180910390fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b606060038054610bc490612f25565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf090612f25565b8015610c3d5780601f10610c1257610100808354040283529160200191610c3d565b820191906000526020600020905b815481529060010190602001808311610c2057829003601f168201915b5050505050905090565b6000610c543384846117d7565b5060015b92915050565b6005546001600160a01b03163314610c885760405162461bcd60e51b8152600401610b8a90612ef0565b6007546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000610cf28484846118fc565b610d448433610d3f85604051806060016040528060288152602001613166602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061249a565b6117d7565b5060019392505050565b6005546001600160a01b03163314610d785760405162461bcd60e51b8152600401610b8a90612ef0565b60128490556013839055601482905560158190558082610d988587612f75565b610da29190612f75565b610dac9190612f75565b601181905560141015610e015760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610b8a565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c54918590610d3f9086611771565b6005546001600160a01b03163314610e675760405162461bcd60e51b8152600401610b8a90612ef0565b601788905560188790556019869055601a859055601b849055601c839055601d829055601e8190558486610e9b898b612f75565b610ea59190612f75565b610eaf9190612f75565b6016555050505050505050565b6005546000906001600160a01b03163314610ee95760405162461bcd60e51b8152600401610b8a90612ef0565b50600c805460ff19169055600190565b6005546001600160a01b03163314610f235760405162461bcd60e51b8152600401610b8a90612ef0565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610f975760405162461bcd60e51b8152600401610b8a90612ef0565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610fec5760405162461bcd60e51b8152600401610b8a90612ef0565b600c8054911515620100000262ff000019909216919091179055565b606060048054610bc490612f25565b6005546001600160a01b031633146110415760405162461bcd60e51b8152600401610b8a90612ef0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036110e85760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b8a565b6110f282826124d4565b5050565b6005546001600160a01b031633146111205760405162461bcd60e51b8152600401610b8a90612ef0565b600c805491151563010000000263ff00000019909216919091179055565b6000610c543384610d3f8560405180606001604052806025815260200161318e602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061249a565b6000610c543384846118fc565b6005546001600160a01b031633146111c45760405162461bcd60e51b8152600401610b8a90612ef0565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461124b5760405162461bcd60e51b8152600401610b8a90612ef0565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146112d45760405162461bcd60e51b8152600401610b8a90612ef0565b670de0b6b3a76400006103e86112e960025490565b6112f4906001612f8d565b6112fe9190612fac565b6113089190612fac565b81101561136f5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610b8a565b61138181670de0b6b3a7640000612f8d565b60095550565b6005546000906001600160a01b031633146113b45760405162461bcd60e51b8152600401610b8a90612ef0565b620186a06113c160025490565b6113cc906001612f8d565b6113d69190612fac565b8210156114435760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b8a565b6103e861144f60025490565b61145a906005612f8d565b6114649190612fac565b8211156114d05760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b8a565b50600a81905560015b919050565b6005546001600160a01b031633146115085760405162461bcd60e51b8152600401610b8a90612ef0565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461155d5760405162461bcd60e51b8152600401610b8a90612ef0565b670de0b6b3a76400006103e861157260025490565b61157d906005612f8d565b6115879190612fac565b6115919190612fac565b8110156115ec5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610b8a565b6115fe81670de0b6b3a7640000612f8d565b600b5550565b6005546001600160a01b0316331461162e5760405162461bcd60e51b8152600401610b8a90612ef0565b600c80544360235564ff00ffff001916640100010100179055565b6005546000906001600160a01b031633146116765760405162461bcd60e51b8152600401610b8a90612ef0565b506010805460ff19169055600190565b6005546001600160a01b031633146116b05760405162461bcd60e51b8152600401610b8a90612ef0565b6001600160a01b0381166117155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b8a565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b60008061177e8385612f75565b9050838110156117d05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b8a565b9392505050565b6001600160a01b0383166118395760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b8a565b6001600160a01b03821661189a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b8a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166119225760405162461bcd60e51b8152600401610b8a90612fce565b6001600160a01b0382166119485760405162461bcd60e51b8152600401610b8a90613013565b6001600160a01b0382166000908152600f602052604090205460ff1615801561198a57506001600160a01b0383166000908152600f602052604090205460ff16155b6119f05760405162461bcd60e51b815260206004820152603160248201527f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460448201527072616e73666572696e6720746f6b656e7360781b6064820152608401610b8a565b80600003611a0957611a0483836000612528565b505050565b600c5460ff1615611ec6576005546001600160a01b03848116911614801590611a4057506005546001600160a01b03838116911614155b8015611a5457506001600160a01b03821615155b8015611a6b57506001600160a01b03821661dead14155b8015611a815750600554600160a01b900460ff16155b15611ec657600c54610100900460ff16611b19576001600160a01b03831660009081526024602052604090205460ff1680611ad457506001600160a01b03821660009081526024602052604090205460ff165b611b195760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b8a565b60105460ff1615611c60576005546001600160a01b03838116911614801590611b7457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611bb257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15611c6057326000908152600d60205260409020544311611c4d5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610b8a565b326000908152600d602052604090204390555b6001600160a01b03831660009081526026602052604090205460ff168015611ca157506001600160a01b03821660009081526025602052604090205460ff16155b15611d8557600954811115611d165760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610b8a565b600b546001600160a01b038316600090815260208190526040902054611d3c9083612f75565b1115611d805760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b8a565b611ec6565b6001600160a01b03821660009081526026602052604090205460ff168015611dc657506001600160a01b03831660009081526025602052604090205460ff16155b15611e3c57600954811115611d805760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610b8a565b6001600160a01b03821660009081526025602052604090205460ff16611ec657600b546001600160a01b038316600090815260208190526040902054611e829083612f75565b1115611ec65760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b8a565b600c54640100000000900460ff16611f7957602354611ee6906001612f75565b4311158015611f2757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611f5057506001600160a01b038216737a250d5630b4cf539739df2c5dacb4c659f2488d14155b15611f79576001600160a01b0382166000908152600f60205260409020805460ff191660011790555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811690841614801581611fbf5750600c546301000000900460ff165b15612079576001600160a01b0384166000908152600e60205260409020541580159061201057506001600160a01b0384166000908152600e6020526040902054429061200d90610e10612f75565b10155b1561204957601b546018819055601c546017819055601d5460198190559161203791612f75565b6120419190612f75565b601655612104565b60026018819055600a60178190556001601a8190556019549092909161206f9190612f75565b6120379190612f75565b6001600160a01b0383166000908152600e602052604081205490036120b4576001600160a01b0383166000908152600e602052604090204290555b600c546301000000900460ff166121045760026018819055600a601781905560016019819055601a8190559182916120ec9190612f75565b6120f69190612f75565b6121009190612f75565b6016555b30600090815260208190526040902054600a54811080159081906121305750600c5462010000900460ff165b80156121465750600554600160a01b900460ff16155b801561216b57506001600160a01b03861660009081526026602052604090205460ff16155b801561219057506001600160a01b03861660009081526024602052604090205460ff16155b80156121b557506001600160a01b03851660009081526024602052604090205460ff16155b156121e3576005805460ff60a01b1916600160a01b1790556121d5612631565b6005805460ff60a01b191690555b6005546001600160a01b03871660009081526024602052604090205460ff600160a01b90920482161591168061223157506001600160a01b03861660009081526024602052604090205460ff165b1561223a575060005b60008115612485576001600160a01b03871660009081526026602052604090205460ff16801561226c57506000601654115b1561235a57612291606461228b601654896128ec90919063ffffffff16565b9061296e565b9050601654601854826122a49190612f8d565b6122ae9190612fac565b602060008282546122bf9190612f75565b90915550506016546019546122d49083612f8d565b6122de9190612fac565b602160008282546122ef9190612f75565b90915550506016546017546123049083612f8d565b61230e9190612fac565b601f600082825461231f9190612f75565b9091555050601654601a546123349083612f8d565b61233e9190612fac565b6022600082825461234f9190612f75565b909155506124679050565b6001600160a01b03881660009081526026602052604090205460ff16801561238457506000601154115b15612467576123a3606461228b601154896128ec90919063ffffffff16565b9050601154601354826123b69190612f8d565b6123c09190612fac565b602060008282546123d19190612f75565b90915550506011546014546123e69083612f8d565b6123f09190612fac565b602160008282546124019190612f75565b90915550506011546012546124169083612f8d565b6124209190612fac565b601f60008282546124319190612f75565b90915550506011546015546124469083612f8d565b6124509190612fac565b602260008282546124619190612f75565b90915550505b801561247857612478883083612528565b6124828187613056565b95505b612490888888612528565b5050505050505050565b600081848411156124be5760405162461bcd60e51b8152600401610b8a9190612cf5565b5060006124cb8486613056565b95945050505050565b6001600160a01b038216600081815260266020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b03831661254e5760405162461bcd60e51b8152600401610b8a90612fce565b6001600160a01b0382166125745760405162461bcd60e51b8152600401610b8a90613013565b6125b181604051806060016040528060268152602001613140602691396001600160a01b038616600090815260208190526040902054919061249a565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546125e09082611771565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016118ef565b3060009081526020819052604081205490506000602154601f546020546126589190612f75565b6126629190612f75565b90506000821580612671575081155b1561267b57505050565b600a54612689906014612f8d565b8311156126a157600a5461269e906014612f8d565b92505b6000600283602054866126b49190612f8d565b6126be9190612fac565b6126c89190612fac565b905060006126d685836129b0565b9050476126e2826129f2565b60006126ee47836129b0565b9050600061270b8761228b601f54856128ec90919063ffffffff16565b905060006127288861228b602154866128ec90919063ffffffff16565b905060006127458961228b602254876128ec90919063ffffffff16565b9050600081836127558688613056565b61275f9190613056565b6127699190613056565b60006020819055601f819055602181905560228190556007546040519293506001600160a01b031691859181818185875af1925050503d80600081146127cb576040519150601f19603f3d011682016040523d82523d6000602084013e6127d0565b606091505b5050600854604051919a506001600160a01b0316908390600081818185875af1925050503d8060008114612820576040519150601f19603f3d011682016040523d82523d6000602084013e612825565b606091505b509099505087158015906128395750600081115b1561288a576128488882612bb2565b60208054604080518a81529283018490528201527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d80600081146128d7576040519150601f19603f3d011682016040523d82523d6000602084013e6128dc565b606091505b5050505050505050505050505050565b6000826000036128fe57506000610c58565b600061290a8385612f8d565b9050826129178583612fac565b146117d05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b8a565b60006117d083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612c92565b60006117d083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061249a565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a2757612a2761306d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612aa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac99190613083565b81600181518110612adc57612adc61306d565b60200260200101906001600160a01b031690816001600160a01b031681525050612b27307f0000000000000000000000000000000000000000000000000000000000000000846117d7565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612b7c9085906000908690309042906004016130a0565b600060405180830381600087803b158015612b9657600080fd5b505af1158015612baa573d6000803e3d6000fd5b505050505050565b612bdd307f0000000000000000000000000000000000000000000000000000000000000000846117d7565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612c66573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c8b9190613111565b5050505050565b60008183612cb35760405162461bcd60e51b8152600401610b8a9190612cf5565b5060006124cb8486612fac565b6001600160a01b0381168114612cd557600080fd5b50565b600060208284031215612cea57600080fd5b81356117d081612cc0565b600060208083528351808285015260005b81811015612d2257858101830151858201604001528201612d06565b81811115612d34576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612d5d57600080fd5b8235612d6881612cc0565b946020939093013593505050565b600080600060608486031215612d8b57600080fd5b8335612d9681612cc0565b92506020840135612da681612cc0565b929592945050506040919091013590565b60008060008060808587031215612dcd57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600080600080610100898b031215612e0657600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b803580151581146114d957600080fd5b60008060408385031215612e6157600080fd5b8235612e6c81612cc0565b9150612e7a60208401612e3e565b90509250929050565b600060208284031215612e9557600080fd5b6117d082612e3e565b600060208284031215612eb057600080fd5b5035919050565b60008060408385031215612eca57600080fd5b8235612ed581612cc0565b91506020830135612ee581612cc0565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612f3957607f821691505b602082108103612f5957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115612f8857612f88612f5f565b500190565b6000816000190483118215151615612fa757612fa7612f5f565b500290565b600082612fc957634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561306857613068612f5f565b500390565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561309557600080fd5b81516117d081612cc0565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156130f05784516001600160a01b0316835293830193918301916001016130cb565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561312657600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c3e21c37da7316411e20edc282c90ea369cb21a2ecee4404c82d9a7c0c998cbe64736f6c634300080e00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103bc5760003560e01c8063924de9b7116101f2578063c8c8ebe41161010d578063dc4b9a4e116100a0578063f11a24d31161006f578063f11a24d314610afe578063f2fde38b14610b14578063f637434214610b34578063f8b45b0514610b4a57600080fd5b8063dc4b9a4e14610a78578063dd62ed3e14610a8d578063e2f4560514610ad3578063e884f26014610ae957600080fd5b8063d3e70569116100dc578063d3e7056914610a0c578063d4090d2a14610a2c578063d7331c0d14610a42578063d85ba06314610a6257600080fd5b8063c8c8ebe4146109a0578063cc4cfd3f146109b6578063d1a08cde146109d6578063d257b34f146109ec57600080fd5b8063a4d15b6411610185578063b62496f511610154578063b62496f514610917578063bbc0c74214610947578063c024666814610966578063c876d0b91461098657600080fd5b8063a4d15b64146108a0578063a7fc9e21146108c1578063a9059cbb146108d7578063aacebbe3146108f757600080fd5b80639fccce32116101c15780639fccce3214610834578063a0d82dc51461084a578063a265777814610860578063a457c2d71461088057600080fd5b8063924de9b7146107c957806395d89b41146107e95780639a7a23d6146107fe5780639c3b4fdc1461081e57600080fd5b8063475eb16f116102e25780636ddd1713116102755780637571336a116102445780637571336a1461075f5780637bce5a041461077f5780638da5cb5b1461079557806392136913146107b357600080fd5b80636ddd1713146106de57806370a08231146106fe578063715018a61461073457806371a515221461074957600080fd5b8063540ba552116102b1578063540ba55214610687578063541a43cf1461069d5780635e4ae81b146106b35780636a486a8e146106c857600080fd5b8063475eb16f146105e057806349bd5a5e146106005780634a62bb65146106345780634fbee1931461064e57600080fd5b80631816467f1161035a5780632bf3d42d116103295780632bf3d42d1461056e5780632e6ed7ef14610584578063313ce567146105a457806339509351146105c057600080fd5b80631816467f146105025780631a8145bb146105225780631f3fed8f1461053857806323b872dd1461054e57600080fd5b80630c3b2b9a116103965780630c3b2b9a1461044557806310d5de53146104675780631694505e1461049757806318160ddd146104e357600080fd5b806304dacd50146103c857806306fdde03146103ea578063095ea7b31461041557600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103e86103e3366004612cd8565b610b60565b005b3480156103f657600080fd5b506103ff610bb5565b60405161040c9190612cf5565b60405180910390f35b34801561042157600080fd5b50610435610430366004612d4a565b610c47565b604051901515815260200161040c565b34801561045157600080fd5b50600c5461043590640100000000900460ff1681565b34801561047357600080fd5b50610435610482366004612cd8565b60256020526000908152604090205460ff1681565b3480156104a357600080fd5b506104cb7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b03909116815260200161040c565b3480156104ef57600080fd5b506002545b60405190815260200161040c565b34801561050e57600080fd5b506103e861051d366004612cd8565b610c5e565b34801561052e57600080fd5b506104f460205481565b34801561054457600080fd5b506104f4601f5481565b34801561055a57600080fd5b50610435610569366004612d76565b610ce5565b34801561057a57600080fd5b506104f4601c5481565b34801561059057600080fd5b506103e861059f366004612db7565b610d4e565b3480156105b057600080fd5b506040516012815260200161040c565b3480156105cc57600080fd5b506104356105db366004612d4a565b610e07565b3480156105ec57600080fd5b506103e86105fb366004612de9565b610e3d565b34801561060c57600080fd5b506104cb7f000000000000000000000000e3a8a2ceb6cd6b6747d8dabe1dc6c0b9061e789681565b34801561064057600080fd5b50600c546104359060ff1681565b34801561065a57600080fd5b50610435610669366004612cd8565b6001600160a01b031660009081526024602052604090205460ff1690565b34801561069357600080fd5b506104f460155481565b3480156106a957600080fd5b506104f4601b5481565b3480156106bf57600080fd5b50610435610ebc565b3480156106d457600080fd5b506104f460165481565b3480156106ea57600080fd5b50600c546104359062010000900460ff1681565b34801561070a57600080fd5b506104f4610719366004612cd8565b6001600160a01b031660009081526020819052604090205490565b34801561074057600080fd5b506103e8610ef9565b34801561075557600080fd5b506104f4601a5481565b34801561076b57600080fd5b506103e861077a366004612e4e565b610f6d565b34801561078b57600080fd5b506104f460125481565b3480156107a157600080fd5b506005546001600160a01b03166104cb565b3480156107bf57600080fd5b506104f460175481565b3480156107d557600080fd5b506103e86107e4366004612e83565b610fc2565b3480156107f557600080fd5b506103ff611008565b34801561080a57600080fd5b506103e8610819366004612e4e565b611017565b34801561082a57600080fd5b506104f460145481565b34801561084057600080fd5b506104f460215481565b34801561085657600080fd5b506104f460195481565b34801561086c57600080fd5b506103e861087b366004612e83565b6110f6565b34801561088c57600080fd5b5061043561089b366004612d4a565b61113e565b3480156108ac57600080fd5b50600c54610435906301000000900460ff1681565b3480156108cd57600080fd5b506104f4601d5481565b3480156108e357600080fd5b506104356108f2366004612d4a565b61118d565b34801561090357600080fd5b506103e8610912366004612cd8565b61119a565b34801561092357600080fd5b50610435610932366004612cd8565b60266020526000908152604090205460ff1681565b34801561095357600080fd5b50600c5461043590610100900460ff1681565b34801561097257600080fd5b506103e8610981366004612e4e565b611221565b34801561099257600080fd5b506010546104359060ff1681565b3480156109ac57600080fd5b506104f460095481565b3480156109c257600080fd5b506103e86109d1366004612e9e565b6112aa565b3480156109e257600080fd5b506104f4601e5481565b3480156109f857600080fd5b50610435610a07366004612e9e565b611387565b348015610a1857600080fd5b506103e8610a27366004612e4e565b6114de565b348015610a3857600080fd5b506104f460225481565b348015610a4e57600080fd5b506103e8610a5d366004612e9e565b611533565b348015610a6e57600080fd5b506104f460115481565b348015610a8457600080fd5b506103e8611604565b348015610a9957600080fd5b506104f4610aa8366004612eb7565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610adf57600080fd5b506104f4600a5481565b348015610af557600080fd5b50610435611649565b348015610b0a57600080fd5b506104f460135481565b348015610b2057600080fd5b506103e8610b2f366004612cd8565b611686565b348015610b4057600080fd5b506104f460185481565b348015610b5657600080fd5b506104f4600b5481565b6005546001600160a01b03163314610b935760405162461bcd60e51b8152600401610b8a90612ef0565b60405180910390fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b606060038054610bc490612f25565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf090612f25565b8015610c3d5780601f10610c1257610100808354040283529160200191610c3d565b820191906000526020600020905b815481529060010190602001808311610c2057829003601f168201915b5050505050905090565b6000610c543384846117d7565b5060015b92915050565b6005546001600160a01b03163314610c885760405162461bcd60e51b8152600401610b8a90612ef0565b6007546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000610cf28484846118fc565b610d448433610d3f85604051806060016040528060288152602001613166602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061249a565b6117d7565b5060019392505050565b6005546001600160a01b03163314610d785760405162461bcd60e51b8152600401610b8a90612ef0565b60128490556013839055601482905560158190558082610d988587612f75565b610da29190612f75565b610dac9190612f75565b601181905560141015610e015760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610b8a565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c54918590610d3f9086611771565b6005546001600160a01b03163314610e675760405162461bcd60e51b8152600401610b8a90612ef0565b601788905560188790556019869055601a859055601b849055601c839055601d829055601e8190558486610e9b898b612f75565b610ea59190612f75565b610eaf9190612f75565b6016555050505050505050565b6005546000906001600160a01b03163314610ee95760405162461bcd60e51b8152600401610b8a90612ef0565b50600c805460ff19169055600190565b6005546001600160a01b03163314610f235760405162461bcd60e51b8152600401610b8a90612ef0565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610f975760405162461bcd60e51b8152600401610b8a90612ef0565b6001600160a01b03919091166000908152602560205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610fec5760405162461bcd60e51b8152600401610b8a90612ef0565b600c8054911515620100000262ff000019909216919091179055565b606060048054610bc490612f25565b6005546001600160a01b031633146110415760405162461bcd60e51b8152600401610b8a90612ef0565b7f000000000000000000000000e3a8a2ceb6cd6b6747d8dabe1dc6c0b9061e78966001600160a01b0316826001600160a01b0316036110e85760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b8a565b6110f282826124d4565b5050565b6005546001600160a01b031633146111205760405162461bcd60e51b8152600401610b8a90612ef0565b600c805491151563010000000263ff00000019909216919091179055565b6000610c543384610d3f8560405180606001604052806025815260200161318e602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061249a565b6000610c543384846118fc565b6005546001600160a01b031633146111c45760405162461bcd60e51b8152600401610b8a90612ef0565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461124b5760405162461bcd60e51b8152600401610b8a90612ef0565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146112d45760405162461bcd60e51b8152600401610b8a90612ef0565b670de0b6b3a76400006103e86112e960025490565b6112f4906001612f8d565b6112fe9190612fac565b6113089190612fac565b81101561136f5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610b8a565b61138181670de0b6b3a7640000612f8d565b60095550565b6005546000906001600160a01b031633146113b45760405162461bcd60e51b8152600401610b8a90612ef0565b620186a06113c160025490565b6113cc906001612f8d565b6113d69190612fac565b8210156114435760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b8a565b6103e861144f60025490565b61145a906005612f8d565b6114649190612fac565b8211156114d05760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b8a565b50600a81905560015b919050565b6005546001600160a01b031633146115085760405162461bcd60e51b8152600401610b8a90612ef0565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461155d5760405162461bcd60e51b8152600401610b8a90612ef0565b670de0b6b3a76400006103e861157260025490565b61157d906005612f8d565b6115879190612fac565b6115919190612fac565b8110156115ec5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610b8a565b6115fe81670de0b6b3a7640000612f8d565b600b5550565b6005546001600160a01b0316331461162e5760405162461bcd60e51b8152600401610b8a90612ef0565b600c80544360235564ff00ffff001916640100010100179055565b6005546000906001600160a01b031633146116765760405162461bcd60e51b8152600401610b8a90612ef0565b506010805460ff19169055600190565b6005546001600160a01b031633146116b05760405162461bcd60e51b8152600401610b8a90612ef0565b6001600160a01b0381166117155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b8a565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b60008061177e8385612f75565b9050838110156117d05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b8a565b9392505050565b6001600160a01b0383166118395760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b8a565b6001600160a01b03821661189a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b8a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166119225760405162461bcd60e51b8152600401610b8a90612fce565b6001600160a01b0382166119485760405162461bcd60e51b8152600401610b8a90613013565b6001600160a01b0382166000908152600f602052604090205460ff1615801561198a57506001600160a01b0383166000908152600f602052604090205460ff16155b6119f05760405162461bcd60e51b815260206004820152603160248201527f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460448201527072616e73666572696e6720746f6b656e7360781b6064820152608401610b8a565b80600003611a0957611a0483836000612528565b505050565b600c5460ff1615611ec6576005546001600160a01b03848116911614801590611a4057506005546001600160a01b03838116911614155b8015611a5457506001600160a01b03821615155b8015611a6b57506001600160a01b03821661dead14155b8015611a815750600554600160a01b900460ff16155b15611ec657600c54610100900460ff16611b19576001600160a01b03831660009081526024602052604090205460ff1680611ad457506001600160a01b03821660009081526024602052604090205460ff165b611b195760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b8a565b60105460ff1615611c60576005546001600160a01b03838116911614801590611b7457507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b8015611bb257507f000000000000000000000000e3a8a2ceb6cd6b6747d8dabe1dc6c0b9061e78966001600160a01b0316826001600160a01b031614155b15611c6057326000908152600d60205260409020544311611c4d5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610b8a565b326000908152600d602052604090204390555b6001600160a01b03831660009081526026602052604090205460ff168015611ca157506001600160a01b03821660009081526025602052604090205460ff16155b15611d8557600954811115611d165760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610b8a565b600b546001600160a01b038316600090815260208190526040902054611d3c9083612f75565b1115611d805760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b8a565b611ec6565b6001600160a01b03821660009081526026602052604090205460ff168015611dc657506001600160a01b03831660009081526025602052604090205460ff16155b15611e3c57600954811115611d805760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610b8a565b6001600160a01b03821660009081526025602052604090205460ff16611ec657600b546001600160a01b038316600090815260208190526040902054611e829083612f75565b1115611ec65760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b8a565b600c54640100000000900460ff16611f7957602354611ee6906001612f75565b4311158015611f2757507f000000000000000000000000e3a8a2ceb6cd6b6747d8dabe1dc6c0b9061e78966001600160a01b0316826001600160a01b031614155b8015611f5057506001600160a01b038216737a250d5630b4cf539739df2c5dacb4c659f2488d14155b15611f79576001600160a01b0382166000908152600f60205260409020805460ff191660011790555b7f000000000000000000000000e3a8a2ceb6cd6b6747d8dabe1dc6c0b9061e78966001600160a01b0390811690841614801581611fbf5750600c546301000000900460ff165b15612079576001600160a01b0384166000908152600e60205260409020541580159061201057506001600160a01b0384166000908152600e6020526040902054429061200d90610e10612f75565b10155b1561204957601b546018819055601c546017819055601d5460198190559161203791612f75565b6120419190612f75565b601655612104565b60026018819055600a60178190556001601a8190556019549092909161206f9190612f75565b6120379190612f75565b6001600160a01b0383166000908152600e602052604081205490036120b4576001600160a01b0383166000908152600e602052604090204290555b600c546301000000900460ff166121045760026018819055600a601781905560016019819055601a8190559182916120ec9190612f75565b6120f69190612f75565b6121009190612f75565b6016555b30600090815260208190526040902054600a54811080159081906121305750600c5462010000900460ff165b80156121465750600554600160a01b900460ff16155b801561216b57506001600160a01b03861660009081526026602052604090205460ff16155b801561219057506001600160a01b03861660009081526024602052604090205460ff16155b80156121b557506001600160a01b03851660009081526024602052604090205460ff16155b156121e3576005805460ff60a01b1916600160a01b1790556121d5612631565b6005805460ff60a01b191690555b6005546001600160a01b03871660009081526024602052604090205460ff600160a01b90920482161591168061223157506001600160a01b03861660009081526024602052604090205460ff165b1561223a575060005b60008115612485576001600160a01b03871660009081526026602052604090205460ff16801561226c57506000601654115b1561235a57612291606461228b601654896128ec90919063ffffffff16565b9061296e565b9050601654601854826122a49190612f8d565b6122ae9190612fac565b602060008282546122bf9190612f75565b90915550506016546019546122d49083612f8d565b6122de9190612fac565b602160008282546122ef9190612f75565b90915550506016546017546123049083612f8d565b61230e9190612fac565b601f600082825461231f9190612f75565b9091555050601654601a546123349083612f8d565b61233e9190612fac565b6022600082825461234f9190612f75565b909155506124679050565b6001600160a01b03881660009081526026602052604090205460ff16801561238457506000601154115b15612467576123a3606461228b601154896128ec90919063ffffffff16565b9050601154601354826123b69190612f8d565b6123c09190612fac565b602060008282546123d19190612f75565b90915550506011546014546123e69083612f8d565b6123f09190612fac565b602160008282546124019190612f75565b90915550506011546012546124169083612f8d565b6124209190612fac565b601f60008282546124319190612f75565b90915550506011546015546124469083612f8d565b6124509190612fac565b602260008282546124619190612f75565b90915550505b801561247857612478883083612528565b6124828187613056565b95505b612490888888612528565b5050505050505050565b600081848411156124be5760405162461bcd60e51b8152600401610b8a9190612cf5565b5060006124cb8486613056565b95945050505050565b6001600160a01b038216600081815260266020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b03831661254e5760405162461bcd60e51b8152600401610b8a90612fce565b6001600160a01b0382166125745760405162461bcd60e51b8152600401610b8a90613013565b6125b181604051806060016040528060268152602001613140602691396001600160a01b038616600090815260208190526040902054919061249a565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546125e09082611771565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016118ef565b3060009081526020819052604081205490506000602154601f546020546126589190612f75565b6126629190612f75565b90506000821580612671575081155b1561267b57505050565b600a54612689906014612f8d565b8311156126a157600a5461269e906014612f8d565b92505b6000600283602054866126b49190612f8d565b6126be9190612fac565b6126c89190612fac565b905060006126d685836129b0565b9050476126e2826129f2565b60006126ee47836129b0565b9050600061270b8761228b601f54856128ec90919063ffffffff16565b905060006127288861228b602154866128ec90919063ffffffff16565b905060006127458961228b602254876128ec90919063ffffffff16565b9050600081836127558688613056565b61275f9190613056565b6127699190613056565b60006020819055601f819055602181905560228190556007546040519293506001600160a01b031691859181818185875af1925050503d80600081146127cb576040519150601f19603f3d011682016040523d82523d6000602084013e6127d0565b606091505b5050600854604051919a506001600160a01b0316908390600081818185875af1925050503d8060008114612820576040519150601f19603f3d011682016040523d82523d6000602084013e612825565b606091505b509099505087158015906128395750600081115b1561288a576128488882612bb2565b60208054604080518a81529283018490528201527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d80600081146128d7576040519150601f19603f3d011682016040523d82523d6000602084013e6128dc565b606091505b5050505050505050505050505050565b6000826000036128fe57506000610c58565b600061290a8385612f8d565b9050826129178583612fac565b146117d05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b8a565b60006117d083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612c92565b60006117d083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061249a565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a2757612a2761306d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612aa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac99190613083565b81600181518110612adc57612adc61306d565b60200260200101906001600160a01b031690816001600160a01b031681525050612b27307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846117d7565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612b7c9085906000908690309042906004016130a0565b600060405180830381600087803b158015612b9657600080fd5b505af1158015612baa573d6000803e3d6000fd5b505050505050565b612bdd307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846117d7565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015612c66573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c8b9190613111565b5050505050565b60008183612cb35760405162461bcd60e51b8152600401610b8a9190612cf5565b5060006124cb8486612fac565b6001600160a01b0381168114612cd557600080fd5b50565b600060208284031215612cea57600080fd5b81356117d081612cc0565b600060208083528351808285015260005b81811015612d2257858101830151858201604001528201612d06565b81811115612d34576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612d5d57600080fd5b8235612d6881612cc0565b946020939093013593505050565b600080600060608486031215612d8b57600080fd5b8335612d9681612cc0565b92506020840135612da681612cc0565b929592945050506040919091013590565b60008060008060808587031215612dcd57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600080600080610100898b031215612e0657600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b803580151581146114d957600080fd5b60008060408385031215612e6157600080fd5b8235612e6c81612cc0565b9150612e7a60208401612e3e565b90509250929050565b600060208284031215612e9557600080fd5b6117d082612e3e565b600060208284031215612eb057600080fd5b5035919050565b60008060408385031215612eca57600080fd5b8235612ed581612cc0565b91506020830135612ee581612cc0565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612f3957607f821691505b602082108103612f5957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115612f8857612f88612f5f565b500190565b6000816000190483118215151615612fa757612fa7612f5f565b500290565b600082612fc957634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561306857613068612f5f565b500390565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561309557600080fd5b81516117d081612cc0565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156130f05784516001600160a01b0316835293830193918301916001016130cb565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561312657600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c3e21c37da7316411e20edc282c90ea369cb21a2ecee4404c82d9a7c0c998cbe64736f6c634300080e0033

Deployed Bytecode Sourcemap

29307:19099:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39159:125;;;;;;;;;;-1:-1:-1;39159:125:0;;;;;:::i;:::-;;:::i;:::-;;7405:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9579:169;;;;;;;;;;-1:-1:-1;9579:169:0;;;;;:::i;:::-;;:::i;:::-;;;1489:14:1;;1482:22;1464:41;;1452:2;1437:18;9579:169:0;1324:187:1;29908:28:0;;;;;;;;;;-1:-1:-1;29908:28:0;;;;;;;;;;;31230:64;;;;;;;;;;-1:-1:-1;31230:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29384:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1707:32:1;;;1689:51;;1677:2;1662:18;29384:51:0;1516:230:1;8528:108:0;;;;;;;;;;-1:-1:-1;8616:12:0;;8528:108;;;1897:25:1;;;1885:2;1870:18;8528:108:0;1751:177:1;39292:157:0;;;;;;;;;;-1:-1:-1;39292:157:0;;;;;:::i;:::-;;:::i;30906:33::-;;;;;;;;;;;;;;;;30866;;;;;;;;;;;;;;;;10231:355;;;;;;;;;;-1:-1:-1;10231:355:0;;;;;:::i;:::-;;:::i;30742:36::-;;;;;;;;;;;;;;;;36988:444;;;;;;;;;;-1:-1:-1;36988:444:0;;;;;:::i;:::-;;:::i;8369:93::-;;;;;;;;;;-1:-1:-1;8369:93:0;;8452:2;2926:36:1;;2914:2;2899:18;8369:93:0;2784:184:1;10996:218:0;;;;;;;;;;-1:-1:-1;10996:218:0;;;;;:::i;:::-;;:::i;37441:712::-;;;;;;;;;;-1:-1:-1;37441:712:0;;;;;:::i;:::-;;:::i;29442:38::-;;;;;;;;;;;;;;;29746:33;;;;;;;;;;-1:-1:-1;29746:33:0;;;;;;;;39461:125;;;;;;;;;;-1:-1:-1;39461:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;39550:28:0;39526:4;39550:28;;;:19;:28;;;;;;;;;39461:125;30479:28;;;;;;;;;;;;;;;;30699:36;;;;;;;;;;;;;;;;35278:120;;;;;;;;;;;;;:::i;30517:28::-;;;;;;;;;;;;;;;;29826:31;;;;;;;;;;-1:-1:-1;29826:31:0;;;;;;;;;;;8700:127;;;;;;;;;;-1:-1:-1;8700:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;8801:18:0;8774:7;8801:18;;;;;;;;;;;;8700:127;21907:148;;;;;;;;;;;;;:::i;30660:29::-;;;;;;;;;;;;;;;;36637:144;;;;;;;;;;-1:-1:-1;36637:144:0;;;;;:::i;:::-;;:::i;30374:30::-;;;;;;;;;;;;;;;;21263:79;;;;;;;;;;-1:-1:-1;21328:6:0;;-1:-1:-1;;;;;21328:6:0;21263:79;;30552:31;;;;;;;;;;;;;;;;36878:101;;;;;;;;;;-1:-1:-1;36878:101:0;;;;;:::i;:::-;;:::i;7625:104::-;;;;;;;;;;;;;:::i;38487:245::-;;;;;;;;;;-1:-1:-1;38487:245:0;;;;;:::i;:::-;;:::i;30448:24::-;;;;;;;;;;;;;;;;30946:27;;;;;;;;;;;;;;;;30628:25;;;;;;;;;;;;;;;;35603:102;;;;;;;;;;-1:-1:-1;35603:102:0;;;;;:::i;:::-;;:::i;11718:269::-;;;;;;;;;;-1:-1:-1;11718:269:0;;;;;:::i;:::-;;:::i;29864:37::-;;;;;;;;;;-1:-1:-1;29864:37:0;;;;;;;;;;;30785:30;;;;;;;;;;;;;;;;9041:175;;;;;;;;;;-1:-1:-1;9041:175:0;;;;;:::i;:::-;;:::i;38939:208::-;;;;;;;;;;-1:-1:-1;38939:208:0;;;;;:::i;:::-;;:::i;31453:58::-;;;;;;;;;;-1:-1:-1;31453:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29786:33;;;;;;;;;;-1:-1:-1;29786:33:0;;;;;;;;;;;38162:182;;;;;;;;;;-1:-1:-1;38162:182:0;;;;;:::i;:::-;;:::i;30291:39::-;;;;;;;;;;-1:-1:-1;30291:39:0;;;;;;;;29630:35;;;;;;;;;;;;;;;;36172:233;;;;;;;;;;-1:-1:-1;36172:233:0;;;;;:::i;:::-;;:::i;30822:34::-;;;;;;;;;;;;;;;;35777:386;;;;;;;;;;-1:-1:-1;35777:386:0;;;;;:::i;:::-;;:::i;38353:125::-;;;;;;;;;;-1:-1:-1;38353:125:0;;;;;:::i;:::-;;:::i;30980:31::-;;;;;;;;;;;;;;;;36414:214;;;;;;;;;;-1:-1:-1;36414:214:0;;;;;:::i;:::-;;:::i;30340:27::-;;;;;;;;;;;;;;;;35055:171;;;;;;;;;;;;;:::i;9280:151::-;;;;;;;;;;-1:-1:-1;9280:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;9396:18:0;;;9369:7;9396:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9280:151;29672:33;;;;;;;;;;;;;;;;35460:134;;;;;;;;;;;;;:::i;30411:30::-;;;;;;;;;;;;;;;;22211:244;;;;;;;;;;-1:-1:-1;22211:244:0;;;;;:::i;:::-;;:::i;30590:31::-;;;;;;;;;;;;;;;;29712:24;;;;;;;;;;;;;;;;39159:125;21476:6;;-1:-1:-1;;;;;21476:6:0;176:10;21476:22;21468:67;;;;-1:-1:-1;;;21468:67:0;;;;;;;:::i;:::-;;;;;;;;;39244:13:::1;:32:::0;;-1:-1:-1;;;;;;39244:32:0::1;-1:-1:-1::0;;;;;39244:32:0;;;::::1;::::0;;;::::1;::::0;;39159:125::o;7405:100::-;7459:13;7492:5;7485:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7405:100;:::o;9579:169::-;9662:4;9679:39;176:10;9702:7;9711:6;9679:8;:39::i;:::-;-1:-1:-1;9736:4:0;9579:169;;;;;:::o;39292:157::-;21476:6;;-1:-1:-1;;;;;21476:6:0;176:10;21476:22;21468:67;;;;-1:-1:-1;;;21468:67:0;;;;;;;:::i;:::-;39399:9:::1;::::0;39371:38:::1;::::0;-1:-1:-1;;;;;39399:9:0;;::::1;::::0;39371:38;::::1;::::0;::::1;::::0;39399:9:::1;::::0;39371:38:::1;39420:9;:21:::0;;-1:-1:-1;;;;;;39420:21:0::1;-1:-1:-1::0;;;;;39420:21:0;;;::::1;::::0;;;::::1;::::0;;39292:157::o;10231:355::-;10371:4;10388:36;10398:6;10406:9;10417:6;10388:9;:36::i;:::-;10435:121;10444:6;176:10;10466:89;10504:6;10466:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10466:19:0;;;;;;:11;:19;;;;;;;;176:10;10466:33;;;;;;;;;;:37;:89::i;:::-;10435:8;:121::i;:::-;-1:-1:-1;10574:4:0;10231:355;;;;;:::o;36988:444::-;21476:6;;-1:-1:-1;;;;;21476:6:0;176:10;21476:22;21468:67;;;;-1:-1:-1;;;21468:67:0;;;;;;;:::i;:::-;37125:15:::1;:31:::0;;;37167:15:::1;:31:::0;;;37209:9:::1;:19:::0;;;37239:13:::1;:27:::0;;;37255:11;37221:7;37292:33:::1;37185:13:::0;37143;37292:33:::1;:::i;:::-;:45;;;;:::i;:::-;:61;;;;:::i;:::-;37277:12;:76:::0;;;37388:2:::1;-1:-1:-1::0;37372:18:0::1;37364:60;;;::::0;-1:-1:-1;;;37364:60:0;;6308:2:1;37364:60:0::1;::::0;::::1;6290:21:1::0;6347:2;6327:18;;;6320:30;6386:31;6366:18;;;6359:59;6435:18;;37364:60:0::1;6106:353:1::0;37364:60:0::1;36988:444:::0;;;;:::o;10996:218::-;176:10;11084:4;11133:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11133:34:0;;;;;;;;;;11084:4;;11101:83;;11124:7;;11133:50;;11172:10;11133:38;:50::i;37441:712::-;21476:6;;-1:-1:-1;;;;;21476:6:0;176:10;21476:22;21468:67;;;;-1:-1:-1;;;21468:67:0;;;;;;;:::i;:::-;37699:16:::1;:32:::0;;;37742:16:::1;:32:::0;;;37785:10:::1;:20:::0;;;37816:14:::1;:28:::0;;;37855:21:::1;:46:::0;;;37912:21:::1;:46:::0;;;37966:15:::1;:34:::0;;;38011:19:::1;:42:::0;;;37833:11;37798:7;38080:35:::1;37761:13:::0;37718;38080:35:::1;:::i;:::-;:48;;;;:::i;:::-;:65;;;;:::i;:::-;38064:13;:81:::0;-1:-1:-1;;;;;;;;37441:712:0:o;35278:120::-;21476:6;;35330:4;;-1:-1:-1;;;;;21476:6:0;176:10;21476:22;21468:67;;;;-1:-1:-1;;;21468:67:0;;;;;;;:::i;:::-;-1:-1:-1;35346:14:0::1;:22:::0;;-1:-1:-1;;35346:22:0::1;::::0;;;35278:120;:::o;21907:148::-;21476:6;;-1:-1:-1;;;;;21476:6:0;176:10;21476:22;21468:67;;;;-1:-1:-1;;;21468:67:0;;;;;;;:::i;:::-;21998:6:::1;::::0;21977:40:::1;::::0;22014:1:::1;::::0;-1:-1:-1;;;;;21998:6:0::1;::::0;21977:40:::1;::::0;22014:1;;21977:40:::1;22028:6;:19:::0;;-1:-1:-1;;;;;;22028:19:0::1;::::0;;21907:148::o;36637:144::-;21476:6;;-1:-1:-1;;;;;21476:6:0;176:10;21476:22;21468:67;;;;-1:-1:-1;;;21468:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36727:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;36727:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36637:144::o;36878:101::-;21476:6;;-1:-1:-1;;;;;21476:6:0;176:10;21476:22;21468:67;;;;-1:-1:-1;;;21468:67:0;;;;;;;:::i;:::-;36950:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;36950:21:0;;::::1;::::0;;;::::1;::::0;;36878:101::o;7625:104::-;7681:13;7714:7;7707:14;;;;;:::i;38487:245::-;21476:6;;-1:-1:-1;;;;;21476:6:0;176:10;21476:22;21468:67;;;;-1:-1:-1;;;21468:67:0;;;;;;;:::i;:::-;38594:13:::1;-1:-1:-1::0;;;;;38586:21:0::1;:4;-1:-1:-1::0;;;;;38586:21:0::1;::::0;38578:91:::1;;;::::0;-1:-1:-1;;;38578:91:0;;6666:2:1;38578:91:0::1;::::0;::::1;6648:21:1::0;6705:2;6685:18;;;6678:30;6744:34;6724:18;;;6717:62;6815:27;6795:18;;;6788:55;6860:19;;38578:91:0::1;6464:421:1::0;38578:91:0::1;38683:41;38712:4;38718:5;38683:28;:41::i;:::-;38487:245:::0;;:::o;35603:102::-;21476:6;;-1:-1:-1;;;;;21476:6:0;176:10;21476:22;21468:67;;;;-1:-1:-1;;;21468:67:0;;;;;;;:::i;:::-;35671:18:::1;:26:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;35671:26:0;;::::1;::::0;;;::::1;::::0;;35603:102::o;11718:269::-;11811:4;11828:129;176:10;11851:7;11860:96;11899:15;11860:96;;;;;;;;;;;;;;;;;176:10;11860:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11860:34:0;;;;;;;;;;;;:38;:96::i;9041:175::-;9127:4;9144:42;176:10;9168:9;9179:6;9144:9;:42::i;38939:208::-;21476:6;;-1:-1:-1;;;;;21476:6:0;176:10;21476:22;21468:67;;;;-1:-1:-1;;;21468:67:0;;;;;;;:::i;:::-;39076:15:::1;::::0;39033:59:::1;::::0;-1:-1:-1;;;;;39076:15:0;;::::1;::::0;39033:59;::::1;::::0;::::1;::::0;39076:15:::1;::::0;39033:59:::1;39103:15;:36:::0;;-1:-1:-1;;;;;;39103:36:0::1;-1:-1:-1::0;;;;;39103:36:0;;;::::1;::::0;;;::::1;::::0;;38939:208::o;38162:182::-;21476:6;;-1:-1:-1;;;;;21476:6:0;176:10;21476:22;21468:67;;;;-1:-1:-1;;;21468:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38247:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;38247:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;38302:34;;1464:41:1;;;38302:34:0::1;::::0;1437:18:1;38302:34:0::1;;;;;;;38162:182:::0;;:::o;36172:233::-;21476:6;;-1:-1:-1;;;;;21476:6:0;176:10;21476:22;21468:67;;;;-1:-1:-1;;;21468:67:0;;;;;;;:::i;:::-;36290:4:::1;36284;36264:13;8616:12:::0;;;8528:108;36264:13:::1;:17;::::0;36280:1:::1;36264:17;:::i;:::-;:24;;;;:::i;:::-;36263:31;;;;:::i;:::-;36253:6;:41;;36245:101;;;::::0;-1:-1:-1;;;36245:101:0;;7487:2:1;36245:101:0::1;::::0;::::1;7469:21:1::0;7526:2;7506:18;;;7499:30;7565:34;7545:18;;;7538:62;-1:-1:-1;;;7616:18:1;;;7609:45;7671:19;;36245:101:0::1;7285:411:1::0;36245:101:0::1;36380:17;:6:::0;36390::::1;36380:17;:::i;:::-;36357:20;:40:::0;-1:-1:-1;36172:233:0:o;35777:386::-;21476:6;;35858:4;;-1:-1:-1;;;;;21476:6:0;176:10;21476:22;21468:67;;;;-1:-1:-1;;;21468:67:0;;;;;;;:::i;:::-;35915:6:::1;35895:13;8616:12:::0;;;8528:108;35895:13:::1;:17;::::0;35911:1:::1;35895:17;:::i;:::-;:26;;;;:::i;:::-;35882:9;:39;;35874:105;;;::::0;-1:-1:-1;;;35874:105:0;;7903:2:1;35874:105:0::1;::::0;::::1;7885:21:1::0;7942:2;7922:18;;;7915:30;7981:34;7961:18;;;7954:62;-1:-1:-1;;;8032:18:1;;;8025:51;8093:19;;35874:105:0::1;7701:417:1::0;35874:105:0::1;36031:4;36011:13;8616:12:::0;;;8528:108;36011:13:::1;:17;::::0;36027:1:::1;36011:17;:::i;:::-;:24;;;;:::i;:::-;35998:9;:37;;35990:102;;;::::0;-1:-1:-1;;;35990:102:0;;8325:2:1;35990:102:0::1;::::0;::::1;8307:21:1::0;8364:2;8344:18;;;8337:30;8403:34;8383:18;;;8376:62;-1:-1:-1;;;8454:18:1;;;8447:50;8514:19;;35990:102:0::1;8123:416:1::0;35990:102:0::1;-1:-1:-1::0;36103:18:0::1;:30:::0;;;36151:4:::1;21546:1;35777:386:::0;;;:::o;38353:125::-;21476:6;;-1:-1:-1;;;;;21476:6:0;176:10;21476:22;21468:67;;;;-1:-1:-1;;;21468:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38435:19:0;;;::::1;;::::0;;;:10:::1;:19;::::0;;;;:35;;-1:-1:-1;;38435:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38353:125::o;36414:214::-;21476:6;;-1:-1:-1;;;;;21476:6:0;176:10;21476:22;21468:67;;;;-1:-1:-1;;;21468:67:0;;;;;;;:::i;:::-;36535:4:::1;36529;36509:13;8616:12:::0;;;8528:108;36509:13:::1;:17;::::0;36525:1:::1;36509:17;:::i;:::-;:24;;;;:::i;:::-;36508:31;;;;:::i;:::-;36498:6;:41;;36490:90;;;::::0;-1:-1:-1;;;36490:90:0;;8746:2:1;36490:90:0::1;::::0;::::1;8728:21:1::0;8785:2;8765:18;;;8758:30;8824:34;8804:18;;;8797:62;-1:-1:-1;;;8875:18:1;;;8868:34;8919:19;;36490:90:0::1;8544:400:1::0;36490:90:0::1;36603:17;:6:::0;36613::::1;36603:17;:::i;:::-;36591:9;:29:::0;-1:-1:-1;36414:214:0:o;35055:171::-;21476:6;;-1:-1:-1;;;;;21476:6:0;176:10;21476:22;21468:67;;;;-1:-1:-1;;;21468:67:0;;;;;;;:::i;:::-;35107:13:::1;:20:::0;;35180:12:::1;35167:10;:25:::0;-1:-1:-1;;35203:15:0;;;;;35055:171::o;35460:134::-;21476:6;;35520:4;;-1:-1:-1;;;;;21476:6:0;176:10;21476:22;21468:67;;;;-1:-1:-1;;;21468:67:0;;;;;;;:::i;:::-;-1:-1:-1;35536:20:0::1;:28:::0;;-1:-1:-1;;35536:28:0::1;::::0;;;35460:134;:::o;22211:244::-;21476:6;;-1:-1:-1;;;;;21476:6:0;176:10;21476:22;21468:67;;;;-1:-1:-1;;;21468:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22300:22:0;::::1;22292:73;;;::::0;-1:-1:-1;;;22292:73:0;;9151:2:1;22292:73:0::1;::::0;::::1;9133:21:1::0;9190:2;9170:18;;;9163:30;9229:34;9209:18;;;9202:62;-1:-1:-1;;;9280:18:1;;;9273:36;9326:19;;22292:73:0::1;8949:402:1::0;22292:73:0::1;22402:6;::::0;22381:38:::1;::::0;-1:-1:-1;;;;;22381:38:0;;::::1;::::0;22402:6:::1;::::0;22381:38:::1;::::0;22402:6:::1;::::0;22381:38:::1;22430:6;:17:::0;;-1:-1:-1;;;;;;22430:17:0::1;-1:-1:-1::0;;;;;22430:17:0;;;::::1;::::0;;;::::1;::::0;;22211:244::o;16295:182::-;16353:7;;16385:5;16389:1;16385;:5;:::i;:::-;16373:17;;16414:1;16409;:6;;16401:46;;;;-1:-1:-1;;;16401:46:0;;9558:2:1;16401:46:0;;;9540:21:1;9597:2;9577:18;;;9570:30;9636:29;9616:18;;;9609:57;9683:18;;16401:46:0;9356:351:1;16401:46:0;16468:1;16295:182;-1:-1:-1;;;16295:182:0:o;14914:381::-;-1:-1:-1;;;;;15050:19:0;;15042:68;;;;-1:-1:-1;;;15042:68:0;;9914:2:1;15042:68:0;;;9896:21:1;9953:2;9933:18;;;9926:30;9992:34;9972:18;;;9965:62;-1:-1:-1;;;10043:18:1;;;10036:34;10087:19;;15042:68:0;9712:400:1;15042:68:0;-1:-1:-1;;;;;15129:21:0;;15121:68;;;;-1:-1:-1;;;15121:68:0;;10319:2:1;15121:68:0;;;10301:21:1;10358:2;10338:18;;;10331:30;10397:34;10377:18;;;10370:62;-1:-1:-1;;;10448:18:1;;;10441:32;10490:19;;15121:68:0;10117:398:1;15121:68:0;-1:-1:-1;;;;;15203:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15255:32;;1897:25:1;;;15255:32:0;;1870:18:1;15255:32:0;;;;;;;;14914:381;;;:::o;39646:5829::-;-1:-1:-1;;;;;39778:18:0;;39770:68;;;;-1:-1:-1;;;39770:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39857:16:0;;39849:64;;;;-1:-1:-1;;;39849:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39933:14:0;;;;;;:10;:14;;;;;;;;39932:15;:36;;;;-1:-1:-1;;;;;;39952:16:0;;;;;;:10;:16;;;;;;;;39951:17;39932:36;39924:98;;;;-1:-1:-1;;;39924:98:0;;11532:2:1;39924:98:0;;;11514:21:1;11571:2;11551:18;;;11544:30;11610:34;11590:18;;;11583:62;-1:-1:-1;;;11661:18:1;;;11654:47;11718:19;;39924:98:0;11330:413:1;39924:98:0;40037:6;40047:1;40037:11;40034:92;;40065:28;40081:4;40087:2;40091:1;40065:15;:28::i;:::-;39646:5829;;;:::o;40034:92::-;40142:14;;;;40139:1811;;;21328:6;;-1:-1:-1;;;;;40194:15:0;;;21328:6;;40194:15;;;;:49;;-1:-1:-1;21328:6:0;;-1:-1:-1;;;;;40230:13:0;;;21328:6;;40230:13;;40194:49;:86;;;;-1:-1:-1;;;;;;40264:16:0;;;;40194:86;:128;;;;-1:-1:-1;;;;;;40301:21:0;;40315:6;40301:21;;40194:128;:158;;;;-1:-1:-1;40344:8:0;;-1:-1:-1;;;40344:8:0;;;;40343:9;40194:158;40172:1767;;;40390:13;;;;;;;40386:148;;-1:-1:-1;;;;;40435:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;40464:23:0;;;;;;:19;:23;;;;;;;;40435:52;40427:87;;;;-1:-1:-1;;;40427:87:0;;11950:2:1;40427:87:0;;;11932:21:1;11989:2;11969:18;;;11962:30;-1:-1:-1;;;12008:18:1;;;12001:52;12070:18;;40427:87:0;11748:346:1;40427:87:0;40693:20;;;;40689:423;;;21328:6;;-1:-1:-1;;;;;40741:13:0;;;21328:6;;40741:13;;;;:47;;;40772:15;-1:-1:-1;;;;;40758:30:0;:2;-1:-1:-1;;;;;40758:30:0;;;40741:47;:79;;;;;40806:13;-1:-1:-1;;;;;40792:28:0;:2;-1:-1:-1;;;;;40792:28:0;;;40741:79;40737:356;;;40885:9;40856:39;;;;:28;:39;;;;;;40898:12;-1:-1:-1;40848:140:0;;;;-1:-1:-1;;;40848:140:0;;12301:2:1;40848:140:0;;;12283:21:1;12340:2;12320:18;;;12313:30;12379:34;12359:18;;;12352:62;12450:34;12430:18;;;12423:62;-1:-1:-1;;;12501:19:1;;;12494:40;12551:19;;40848:140:0;12099:477:1;40848:140:0;41044:9;41015:39;;;;:28;:39;;;;;41057:12;41015:54;;40737:356;-1:-1:-1;;;;;41165:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;41201:35:0;;;;;;:31;:35;;;;;;;;41200:36;41165:71;41161:763;;;41283:20;;41273:6;:30;;41265:96;;;;-1:-1:-1;;;41265:96:0;;12783:2:1;41265:96:0;;;12765:21:1;12822:2;12802:18;;;12795:30;12861:34;12841:18;;;12834:62;-1:-1:-1;;;12912:18:1;;;12905:51;12973:19;;41265:96:0;12581:417:1;41265:96:0;41422:9;;-1:-1:-1;;;;;8801:18:0;;8774:7;8801:18;;;;;;;;;;;41396:22;;:6;:22;:::i;:::-;:35;;41388:67;;;;-1:-1:-1;;;41388:67:0;;13205:2:1;41388:67:0;;;13187:21:1;13244:2;13224:18;;;13217:30;-1:-1:-1;;;13263:18:1;;;13256:49;13322:18;;41388:67:0;13003:343:1;41388:67:0;41161:763;;;-1:-1:-1;;;;;41534:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;41568:37:0;;;;;;:31;:37;;;;;;;;41567:38;41534:71;41530:394;;;41652:20;;41642:6;:30;;41634:97;;;;-1:-1:-1;;;41634:97:0;;13553:2:1;41634:97:0;;;13535:21:1;13592:2;13572:18;;;13565:30;13631:34;13611:18;;;13604:62;-1:-1:-1;;;13682:18:1;;;13675:52;13744:19;;41634:97:0;13351:418:1;41530:394:0;-1:-1:-1;;;;;41778:35:0;;;;;;:31;:35;;;;;;;;41774:150;;41871:9;;-1:-1:-1;;;;;8801:18:0;;8774:7;8801:18;;;;;;;;;;;41845:22;;:6;:22;:::i;:::-;:35;;41837:67;;;;-1:-1:-1;;;41837:67:0;;13205:2:1;41837:67:0;;;13187:21:1;13244:2;13224:18;;;13217:30;-1:-1:-1;;;13263:18:1;;;13256:49;13322:18;;41837:67:0;13003:343:1;41837:67:0;41965:8;;;;;;;41960:315;;42054:10;;:14;;42067:1;42054:14;:::i;:::-;42037:12;:32;;:73;;;;;42097:13;-1:-1:-1;;;;;42091:19:0;:2;-1:-1:-1;;;;;42091:19:0;;;42037:73;:152;;;;-1:-1:-1;;;;;;42132:57:0;;42146:42;42132:57;;42037:152;42033:221;;;-1:-1:-1;;;;;42221:14:0;;;;;;:10;:14;;;;;:21;;-1:-1:-1;;42221:21:0;42238:4;42221:21;;;42033:221;42325:13;-1:-1:-1;;;;;42317:21:0;;;;;;;42353:6;;42317:21;42353:28;;-1:-1:-1;42363:18:0;;;;;;;42353:28;42349:1135;;;-1:-1:-1;;;;;42402:30:0;;;;;;:24;:30;;;;;;:35;;;;:119;;-1:-1:-1;;;;;;42459:30:0;;;;;;:24;:30;;;;;;42505:15;;42459:42;;42493:7;42459:42;:::i;:::-;:61;;42402:119;42398:622;;;42562:21;;42543:16;:40;;;42621:21;;42602:16;:40;;;42668:15;;42655:10;:28;;;42668:15;42718:35;;;:::i;:::-;:48;;;;:::i;:::-;42702:13;:64;42349:1135;;42398:622;42826:1;42807:16;:20;;;42865:2;42846:16;:21;;;-1:-1:-1;42886:14:0;:18;;;42977:10;;-1:-1:-1;;42977:10:0;;42939:35;;42826:1;42939:35;:::i;:::-;:48;;;;:::i;42349:1135::-;-1:-1:-1;;;;;43056:28:0;;;;;;:24;:28;;;;;;:33;;43052:120;;-1:-1:-1;;;;;43110:28:0;;;;;;:24;:28;;;;;43141:15;43110:46;;43052:120;43194:18;;;;;;;43189:284;;43252:1;43233:16;:20;;;43291:2;43272:16;:21;;;-1:-1:-1;43306:10:0;:14;;;43339;:18;;;-1:-1:-1;;;43392:35:0;;43252:1;43392:35;:::i;:::-;:48;;;;:::i;:::-;:65;;;;:::i;:::-;43376:13;:81;43189:284;43546:4;43497:28;8801:18;;;;;;;;;;;43605;;43581:42;;;;;;;43655:35;;-1:-1:-1;43679:11:0;;;;;;;43655:35;:61;;;;-1:-1:-1;43708:8:0;;-1:-1:-1;;;43708:8:0;;;;43707:9;43655:61;:110;;;;-1:-1:-1;;;;;;43734:31:0;;;;;;:25;:31;;;;;;;;43733:32;43655:110;:153;;;;-1:-1:-1;;;;;;43783:25:0;;;;;;:19;:25;;;;;;;;43782:26;43655:153;:194;;;;-1:-1:-1;;;;;;43826:23:0;;;;;;:19;:23;;;;;;;;43825:24;43655:194;43637:328;;;43876:8;:15;;-1:-1:-1;;;;43876:15:0;-1:-1:-1;;;43876:15:0;;;43909:10;:8;:10::i;:::-;43937:8;:16;;-1:-1:-1;;;;43937:16:0;;;43637:328;43994:8;;-1:-1:-1;;;;;44104:25:0;;43978:12;44104:25;;;:19;:25;;;;;;43994:8;-1:-1:-1;;;43994:8:0;;;;;43993:9;;44104:25;;:52;;-1:-1:-1;;;;;;44133:23:0;;;;;;:19;:23;;;;;;;;44104:52;44101:99;;;-1:-1:-1;44183:5:0;44101:99;44213:12;44317:7;44314:1107;;;-1:-1:-1;;;;;44368:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;44417:1;44401:13;;:17;44368:50;44364:904;;;44445:34;44475:3;44445:25;44456:13;;44445:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;44438:41;;44546:13;;44527:16;;44520:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;44498:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;44614:13:0;;44601:10;;44594:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;44578:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;44694:13:0;;44675:16;;44668:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;44646:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;44770:13:0;;44753:14;;44746:21;;:4;:21;:::i;:::-;:37;;;;:::i;:::-;44726:16;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;44364:904:0;;-1:-1:-1;44364:904:0;;-1:-1:-1;;;;;44844:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;44894:1;44879:12;;:16;44844:51;44841:427;;;44923:33;44952:3;44923:24;44934:12;;44923:6;:10;;:24;;;;:::i;:33::-;44916:40;;45022:12;;45004:15;;44997:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;44975:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;45088:12:0;;45076:9;;45069:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;45053:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;45166:12:0;;45148:15;;45141:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;45119:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;45240:12:0;;45224:13;;45217:20;;:4;:20;:::i;:::-;:35;;;;:::i;:::-;45197:16;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;44841:427:0;45288:8;;45285:93;;45320:42;45336:4;45350;45357;45320:15;:42::i;:::-;45395:14;45405:4;45395:14;;:::i;:::-;;;44314:1107;45434:33;45450:4;45456:2;45460:6;45434:15;:33::i;:::-;39759:5716;;;;;39646:5829;;;:::o;17201:193::-;17287:7;17323:12;17315:6;;;;17307:29;;;;-1:-1:-1;;;17307:29:0;;;;;;;;:::i;:::-;-1:-1:-1;17347:9:0;17359:5;17363:1;17359;:5;:::i;:::-;17347:17;17201:193;-1:-1:-1;;;;;17201:193:0:o;38741:189::-;-1:-1:-1;;;;;38824:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;38824:39:0;;;;;;;;;;38882:40;;38824:39;;:31;38882:40;;;38741:189;;:::o;12478:575::-;-1:-1:-1;;;;;12618:20:0;;12610:70;;;;-1:-1:-1;;;12610:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12699:23:0;;12691:71;;;;-1:-1:-1;;;12691:71:0;;;;;;;:::i;:::-;12857;12879:6;12857:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12857:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;12837:17:0;;;:9;:17;;;;;;;;;;;:91;;;;12962:20;;;;;;;:32;;12987:6;12962:24;:32::i;:::-;-1:-1:-1;;;;;12939:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;13010:35;1897:25:1;;;12939:20:0;;13010:35;;;;;;1870:18:1;13010:35:0;1751:177:1;46619:1782:0;46702:4;46658:23;8801:18;;;;;;;;;;;46658:50;;46719:25;46789:12;;46768:18;;46747;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;46719:82;-1:-1:-1;46812:12:0;46841:20;;;:46;;-1:-1:-1;46865:22:0;;46841:46;46838:60;;;46890:7;;;46619:1782::o;46838:60::-;46932:18;;:23;;46953:2;46932:23;:::i;:::-;46914:15;:41;46911:111;;;46987:18;;:23;;47008:2;46987:23;:::i;:::-;46969:41;;46911:111;47084:23;47169:1;47149:17;47128:18;;47110:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;47084:86;-1:-1:-1;47181:26:0;47210:36;:15;47084:86;47210:19;:36::i;:::-;47181:65;-1:-1:-1;47288:21:0;47323:36;47181:65;47323:16;:36::i;:::-;47374:18;47395:44;:21;47421:17;47395:25;:44::i;:::-;47374:65;;47453:23;47479:57;47518:17;47479:34;47494:18;;47479:10;:14;;:34;;;;:::i;:57::-;47453:83;;47547:17;47567:51;47600:17;47567:28;47582:12;;47567:10;:14;;:28;;;;:::i;:51::-;47547:71;;47629:21;47653:55;47690:17;47653:32;47668:16;;47653:10;:14;;:32;;;;:::i;:55::-;47629:79;-1:-1:-1;47719:23:0;47629:79;47776:9;47745:28;47758:15;47745:10;:28;:::i;:::-;:40;;;;:::i;:::-;:56;;;;:::i;:::-;47839:1;47818:18;:22;;;47851:18;:22;;;47884:12;:16;;;47911;:20;;;47966:9;;47958:45;;47719:82;;-1:-1:-1;;;;;;47966:9:0;;47989;;47958:45;47839:1;47958:45;47989:9;47966;47958:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;48035:13:0;;48027:53;;47945:58;;-1:-1:-1;;;;;;48035:13:0;;48062;;48027:53;;;;48062:13;48035;48027:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48014:66:0;;-1:-1:-1;;48097:19:0;;;;;:42;;;48138:1;48120:15;:19;48097:42;48094:210;;;48155:46;48168:15;48185;48155:12;:46::i;:::-;48273:18;;;48221:71;;;14316:25:1;;;14357:18;;;14350:34;;;14400:18;;14393:34;48221:71:0;;14304:2:1;14289:18;48221:71:0;;;;;;;48094:210;48338:15;;48330:63;;-1:-1:-1;;;;;48338:15:0;;;;48367:21;;48330:63;;;;48367:21;48338:15;48330:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;46619:1782:0:o;17654:473::-;17712:7;17957:1;17962;17957:6;17953:47;;-1:-1:-1;17987:1:0;17980:8;;17953:47;18013:9;18025:5;18029:1;18025;:5;:::i;:::-;18013:17;-1:-1:-1;18058:1:0;18049:5;18053:1;18013:17;18049:5;:::i;:::-;:10;18041:56;;;;-1:-1:-1;;;18041:56:0;;14640:2:1;18041:56:0;;;14622:21:1;14679:2;14659:18;;;14652:30;14718:34;14698:18;;;14691:62;-1:-1:-1;;;14769:18:1;;;14762:31;14810:19;;18041:56:0;14438:397:1;18604:132:0;18662:7;18689:39;18693:1;18696;18689:39;;;;;;;;;;;;;;;;;:3;:39::i;16761:136::-;16819:7;16846:43;16850:1;16853;16846:43;;;;;;;;;;;;;;;;;:3;:43::i;45484:597::-;45637:16;;;45651:1;45637:16;;;;;;;;45613:21;;45637:16;;;;;;;;;;-1:-1:-1;45637:16:0;45613:40;;45682:4;45664;45669:1;45664:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;45664:23:0;;;-1:-1:-1;;;;;45664:23:0;;;;;45708:15;-1:-1:-1;;;;;45708:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45698:4;45703:1;45698:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;45698:32:0;;;-1:-1:-1;;;;;45698:32:0;;;;;45744:62;45761:4;45776:15;45794:11;45744:8;:62::i;:::-;45846:224;;-1:-1:-1;;;45846:224:0;;-1:-1:-1;;;;;45846:15:0;:66;;;;:224;;45927:11;;45953:1;;45997:4;;46024;;46044:15;;45846:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45539:542;45484:597;:::o;46090:520::-;46238:62;46255:4;46270:15;46288:11;46238:8;:62::i;:::-;46344:258;;-1:-1:-1;;;46344:258:0;;46416:4;46344:258;;;16686:34:1;;;16736:18;;;16729:34;;;46462:1:0;16779:18:1;;;16772:34;;;16822:18;;;16815:34;16865:19;;;16858:44;46576:15:0;16918:19:1;;;16911:35;46344:15:0;-1:-1:-1;;;;;46344:31:0;;;;46383:9;;16620:19:1;;46344:258:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;46090:520;;:::o;19233:279::-;19319:7;19354:12;19347:5;19339:28;;;;-1:-1:-1;;;19339:28:0;;;;;;;;:::i;:::-;-1:-1:-1;19378:9:0;19390:5;19394:1;19390;:5;:::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:247::-;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;402:597::-;514:4;543:2;572;561:9;554:21;604:6;598:13;647:6;642:2;631:9;627:18;620:34;672:1;682:140;696:6;693:1;690:13;682:140;;;791:14;;;787:23;;781:30;757:17;;;776:2;753:26;746:66;711:10;;682:140;;;840:6;837:1;834:13;831:91;;;910:1;905:2;896:6;885:9;881:22;877:31;870:42;831:91;-1:-1:-1;983:2:1;962:15;-1:-1:-1;;958:29:1;943:45;;;;990:2;939:54;;402:597;-1:-1:-1;;;402:597:1:o;1004:315::-;1072:6;1080;1133:2;1121:9;1112:7;1108:23;1104:32;1101:52;;;1149:1;1146;1139:12;1101:52;1188:9;1175:23;1207:31;1232:5;1207:31;:::i;:::-;1257:5;1309:2;1294:18;;;;1281:32;;-1:-1:-1;;;1004:315:1:o;1933:456::-;2010:6;2018;2026;2079:2;2067:9;2058:7;2054:23;2050:32;2047:52;;;2095:1;2092;2085:12;2047:52;2134:9;2121:23;2153:31;2178:5;2153:31;:::i;:::-;2203:5;-1:-1:-1;2260:2:1;2245:18;;2232:32;2273:33;2232:32;2273:33;:::i;:::-;1933:456;;2325:7;;-1:-1:-1;;;2379:2:1;2364:18;;;;2351:32;;1933:456::o;2394:385::-;2480:6;2488;2496;2504;2557:3;2545:9;2536:7;2532:23;2528:33;2525:53;;;2574:1;2571;2564:12;2525:53;-1:-1:-1;;2597:23:1;;;2667:2;2652:18;;2639:32;;-1:-1:-1;2718:2:1;2703:18;;2690:32;;2769:2;2754:18;2741:32;;-1:-1:-1;2394:385:1;-1:-1:-1;2394:385:1:o;2973:661::-;3095:6;3103;3111;3119;3127;3135;3143;3151;3204:3;3192:9;3183:7;3179:23;3175:33;3172:53;;;3221:1;3218;3211:12;3172:53;-1:-1:-1;;3244:23:1;;;3314:2;3299:18;;3286:32;;-1:-1:-1;3365:2:1;3350:18;;3337:32;;3416:2;3401:18;;3388:32;;-1:-1:-1;3467:3:1;3452:19;;3439:33;;-1:-1:-1;3519:3:1;3504:19;;3491:33;;-1:-1:-1;3571:3:1;3556:19;;3543:33;;-1:-1:-1;3623:3:1;3608:19;3595:33;;-1:-1:-1;2973:661:1;-1:-1:-1;2973:661:1:o;3847:160::-;3912:20;;3968:13;;3961:21;3951:32;;3941:60;;3997:1;3994;3987:12;4012:315;4077:6;4085;4138:2;4126:9;4117:7;4113:23;4109:32;4106:52;;;4154:1;4151;4144:12;4106:52;4193:9;4180:23;4212:31;4237:5;4212:31;:::i;:::-;4262:5;-1:-1:-1;4286:35:1;4317:2;4302:18;;4286:35;:::i;:::-;4276:45;;4012:315;;;;;:::o;4332:180::-;4388:6;4441:2;4429:9;4420:7;4416:23;4412:32;4409:52;;;4457:1;4454;4447:12;4409:52;4480:26;4496:9;4480:26;:::i;4517:180::-;4576:6;4629:2;4617:9;4608:7;4604:23;4600:32;4597:52;;;4645:1;4642;4635:12;4597:52;-1:-1:-1;4668:23:1;;4517:180;-1:-1:-1;4517:180:1:o;4702:388::-;4770:6;4778;4831:2;4819:9;4810:7;4806:23;4802:32;4799:52;;;4847:1;4844;4837:12;4799:52;4886:9;4873:23;4905:31;4930:5;4905:31;:::i;:::-;4955:5;-1:-1:-1;5012:2:1;4997:18;;4984:32;5025:33;4984:32;5025:33;:::i;:::-;5077:7;5067:17;;;4702:388;;;;;:::o;5095:356::-;5297:2;5279:21;;;5316:18;;;5309:30;5375:34;5370:2;5355:18;;5348:62;5442:2;5427:18;;5095:356::o;5456:380::-;5535:1;5531:12;;;;5578;;;5599:61;;5653:4;5645:6;5641:17;5631:27;;5599:61;5706:2;5698:6;5695:14;5675:18;5672:38;5669:161;;5752:10;5747:3;5743:20;5740:1;5733:31;5787:4;5784:1;5777:15;5815:4;5812:1;5805:15;5669:161;;5456:380;;;:::o;5841:127::-;5902:10;5897:3;5893:20;5890:1;5883:31;5933:4;5930:1;5923:15;5957:4;5954:1;5947:15;5973:128;6013:3;6044:1;6040:6;6037:1;6034:13;6031:39;;;6050:18;;:::i;:::-;-1:-1:-1;6086:9:1;;5973:128::o;6890:168::-;6930:7;6996:1;6992;6988:6;6984:14;6981:1;6978:21;6973:1;6966:9;6959:17;6955:45;6952:71;;;7003:18;;:::i;:::-;-1:-1:-1;7043:9:1;;6890:168::o;7063:217::-;7103:1;7129;7119:132;;7173:10;7168:3;7164:20;7161:1;7154:31;7208:4;7205:1;7198:15;7236:4;7233:1;7226:15;7119:132;-1:-1:-1;7265:9:1;;7063:217::o;10520:401::-;10722:2;10704:21;;;10761:2;10741:18;;;10734:30;10800:34;10795:2;10780:18;;10773:62;-1:-1:-1;;;10866:2:1;10851:18;;10844:35;10911:3;10896:19;;10520:401::o;10926:399::-;11128:2;11110:21;;;11167:2;11147:18;;;11140:30;11206:34;11201:2;11186:18;;11179:62;-1:-1:-1;;;11272:2:1;11257:18;;11250:33;11315:3;11300:19;;10926:399::o;13774:125::-;13814:4;13842:1;13839;13836:8;13833:34;;;13847:18;;:::i;:::-;-1:-1:-1;13884:9:1;;13774:125::o;14972:127::-;15033:10;15028:3;15024:20;15021:1;15014:31;15064:4;15061:1;15054:15;15088:4;15085:1;15078:15;15104:251;15174:6;15227:2;15215:9;15206:7;15202:23;15198:32;15195:52;;;15243:1;15240;15233:12;15195:52;15275:9;15269:16;15294:31;15319:5;15294:31;:::i;15360:980::-;15622:4;15670:3;15659:9;15655:19;15701:6;15690:9;15683:25;15727:2;15765:6;15760:2;15749:9;15745:18;15738:34;15808:3;15803:2;15792:9;15788:18;15781:31;15832:6;15867;15861:13;15898:6;15890;15883:22;15936:3;15925:9;15921:19;15914:26;;15975:2;15967:6;15963:15;15949:29;;15996:1;16006:195;16020:6;16017:1;16014:13;16006:195;;;16085:13;;-1:-1:-1;;;;;16081:39:1;16069:52;;16176:15;;;;16141:12;;;;16117:1;16035:9;16006:195;;;-1:-1:-1;;;;;;;16257:32:1;;;;16252:2;16237:18;;16230:60;-1:-1:-1;;;16321:3:1;16306:19;16299:35;16218:3;15360:980;-1:-1:-1;;;15360:980:1:o;16957:306::-;17045:6;17053;17061;17114:2;17102:9;17093:7;17089:23;17085:32;17082:52;;;17130:1;17127;17120:12;17082:52;17159:9;17153:16;17143:26;;17209:2;17198:9;17194:18;17188:25;17178:35;;17253:2;17242:9;17238:18;17232:25;17222:35;;16957:306;;;;;:::o

Swarm Source

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