ETH Price: $3,569.87 (+7.00%)

Token

Portal Inu (PORTAL)
 

Overview

Max Total Supply

1,000,000 PORTAL

Holders

230

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.05465118560165666 PORTAL

Value
$0.00
0x655e5651f4cafa4efcb2e6d9614f6cfd90e9e3fd
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:
SaintbotZeroTaxToken

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

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

/* --------
 Token Deployed using Saintbot
 Contract Renounced automatically
 Liquidity Locked on UNCX, 0 Owner Tokens, Anti-Rug by default
 Deploy and manage fair launch anti-rug tokens seamlessly and lightning-fast with low gas on our free-to-use Telegram bot.
 --------
 Website:
 Twitter: https://twitter.com/https://twitter.com/https://twitter.com/portalinu
 Telegram:
 Gitbook:
*/

// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.21;

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

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

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

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

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

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

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

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

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

/* pragma solidity ^0.8.0; */

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

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

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

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

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

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

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

/* pragma solidity ^0.8.0; */

/* import "../IERC20.sol"; */

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

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

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

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

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

  uint256 private _totalSupply;

  string private _name;
  string private _symbol;

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

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

    return true;
  }

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

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

    return true;
  }

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

    _beforeTokenTransfer(sender, recipient, amount);

    uint256 senderBalance = _balances[sender];
    require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
    unchecked {
      _balances[sender] = senderBalance - amount;
    }
    _balances[recipient] += amount;

    emit Transfer(sender, recipient, amount);

    _afterTokenTransfer(sender, recipient, amount);
  }

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

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
  /**
   * @dev Returns the addition of two unsigned integers, reverting on
   * overflow.
   *
   * Counterpart to Solidity's `+` operator.
   *
   * Requirements:
   *
   * - Addition cannot overflow.
   */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    return a + b;
  }

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

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

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

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

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

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

interface IUniswapV2Pair {
  event Approval(address indexed owner, address indexed spender, uint256 value);
  event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

  function balanceOf(address owner) external view returns (uint256);

  function allowance(
    address owner,
    address spender
  ) external view returns (uint256);

  function approve(address spender, uint256 value) external returns (bool);

  function transfer(address to, uint256 value) external returns (bool);

  function transferFrom(
    address from,
    address to,
    uint256 value
  ) external returns (bool);

  function factory() external view returns (address);

  function token0() external view returns (address);

  function token1() external view returns (address);

  function mint(address to) external returns (uint256 liquidity);

  function burn(address to) external returns (uint256 amount0, uint256 amount1);

  function swap(
    uint256 amount0Out,
    uint256 amount1Out,
    address to,
    bytes calldata data
  ) external;
}

interface IUniswapV2Router02 {
  function factory() external pure returns (address);

  function WETH() external pure returns (address);

  function addLiquidityETH(
    address token,
    uint256 amountTokenDesired,
    uint256 amountTokenMin,
    uint256 amountETHMin,
    address to,
    uint256 deadline
  )
    external
    payable
    returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
}

interface IERCBurn {
  function burn(uint256 _amount) external;

  function approve(address spender, uint256 amount) external returns (bool);

  function allowance(address owner, address spender) external returns (uint256);

  function balanceOf(address account) external view returns (uint256);
}

interface IUNCX {
  function lockLPToken(
    address _lpToken,
    uint256 _amount,
    uint256 _unlock_date,
    address payable _referral,
    bool _fee_in_eth,
    address payable _withdrawer
  ) external payable;

  struct FeeStruct {
    uint256 ethFee; // Small eth fee to prevent spam on the platform
    IERCBurn secondaryFeeToken; // UNCX or UNCL
    uint256 secondaryTokenFee; // optional, UNCX or UNCL
    uint256 secondaryTokenDiscount; // discount on liquidity fee for burning secondaryToken
    uint256 liquidityFee; // fee on univ2 liquidity tokens
    uint256 referralPercent; // fee for referrals
    IERCBurn referralToken; // token the refferer must hold to qualify as a referrer
    uint256 referralHold; // balance the referrer must hold to qualify as a referrer
    uint256 referralDiscount; // discount on flatrate fees for using a valid referral address
  }

  function gFees() external returns (FeeStruct memory);
}

interface IRefSys {
  function getRefReceiver(
    bytes memory _refCode
  ) external view returns (address receiverWallet);
}

contract SaintbotZeroTaxToken is ERC20, Ownable {
  using SafeMath for uint256;

  IUNCX public constant LOCKER =
    IUNCX(0x663A5C229c09b049E36dCc11a9B0d4a8Eb9db214);

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

  address public teamWallet;

  uint256 public maxTransactionAmount;
  uint256 public swapTokensAtAmount;
  uint256 public maxWallet;

  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 SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

  address public immutable REF;

  IRefSys public constant REF_SYS =
    IRefSys(0x8A99c005C7B425ce999441afeE22D4987F7a9869);
  address public constant MAINNET_BOT_TRADING_RECEIVER =
    0xD5E2E43e30b706de8A0e01e72a6aBa2b8930af44;

  constructor(
    string memory _name,
    string memory _symbol,
    uint256 _totalSupply,
    address _lockOwnerAndTaxReceiver,
    bytes memory _ref
  ) payable ERC20(_name, _symbol) {
    require(
      msg.value >= 0.55 ether,
      "weth liquidity need to be bigger than 0.55"
    );
    require(
      _totalSupply >= 10 && _totalSupply <= 1_000_000_000_000_000,
      "InvalidSupply()"
    );

    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 totalSupply_ = _totalSupply * 1e18;

    maxTransactionAmount = (totalSupply_ * 3) / 100;
    maxWallet = (totalSupply_ * 6) / 100;

    teamWallet = _lockOwnerAndTaxReceiver; // set as team wallet

    excludeFromMaxTransaction(address(this), true);
    excludeFromMaxTransaction(address(0xdead), true);
    excludeFromMaxTransaction(address(_uniswapV2Router), true);
    excludeFromMaxTransaction(_lockOwnerAndTaxReceiver, true);

    REF = REF_SYS.getRefReceiver(_ref);

    if (REF != address(0)) {
      payable(REF).transfer(0.02 ether);
      (bool ok, ) = payable(MAINNET_BOT_TRADING_RECEIVER).call{
        value: 0.13 ether
      }("");
      require(ok);
    } else {
      (bool ok, ) = payable(MAINNET_BOT_TRADING_RECEIVER).call{
        value: 0.15 ether
      }("");
      require(ok);
    }

    /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
    _mint(address(this), totalSupply_);
  }

  function addLiquidity(uint256 _months) external {
    require(msg.sender == owner(), "auth");

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

    uint256 uncxExpenses = LOCKER.gFees().ethFee;
    address _pair = address(uniswapV2Pair);

    uniswapV2Router.addLiquidityETH{
      value: address(this).balance - uncxExpenses
    }(
      address(this),
      balanceOf(address(this)),
      0,
      0,
      address(this),
      block.timestamp
    );

    IERCBurn(_pair).approve(
      address(LOCKER),
      IERC20(_pair).balanceOf(address(this))
    );

    LOCKER.lockLPToken{value: uncxExpenses}(
      address(_pair),
      IERC20(_pair).balanceOf(address(this)),
      block.timestamp + (_months * 30 days),
      payable(address(0)),
      true,
      payable(teamWallet)
    );

    renounceOwnership();
  }

  receive() external payable {}

  function excludeFromMaxTransaction(address updAds, bool isEx) internal {
    _isExcludedMaxTransactionAmount[updAds] = isEx;
  }

  function setAutomatedMarketMakerPair(address pair, bool value) internal {
    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 _transfer(
    address from,
    address to,
    uint256 amount
  ) internal override {
    require(from != address(0), "ERC20: transfer from the zero address");
    require(to != address(0), "ERC20: transfer to the zero address");

    if (amount == 0) {
      super._transfer(from, to, 0);
      return;
    }

    if (to != address(0) && to != address(0xdead)) {
      //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");
      }
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"},{"internalType":"address","name":"_lockOwnerAndTaxReceiver","type":"address"},{"internalType":"bytes","name":"_ref","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"LOCKER","outputs":[{"internalType":"contract IUNCX","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAINNET_BOT_TRADING_RECEIVER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REF","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REF_SYS","outputs":[{"internalType":"contract IRefSys","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_months","type":"uint256"}],"name":"addLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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"},{"stateMutability":"payable","type":"receive"}]

60e06040526040516200410d3803806200410d833981810160405281019062000029919062000cbe565b848481600390816200003c919062000fcd565b5080600490816200004e919062000fcd565b5050506200007162000065620006b560201b60201c565b620006bc60201b60201c565b6707a1fe1602770000341015620000bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000b69062001135565b60405180910390fd5b600a8310158015620000d8575066038d7ea4c680008311155b6200011a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200011190620011a3565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001458160016200077f60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001e99190620011c3565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002759190620011c3565b6040518363ffffffff1660e01b81526004016200029492919062001204565b6020604051808303815f875af1158015620002b1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002d79190620011c3565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200031f60a05160016200077f60201b60201c565b6200033460a0516001620007d760201b60201c565b5f670de0b6b3a7640000856200034b91906200125c565b905060646003826200035e91906200125c565b6200036a9190620012d3565b60078190555060646006826200038191906200125c565b6200038d9190620012d3565b6009819055508360065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003e63060016200077f60201b60201c565b620003fb61dead60016200077f60201b60201c565b6200040e8260016200077f60201b60201c565b620004218460016200077f60201b60201c565b738a99c005c7b425ce999441afee22d4987f7a986973ffffffffffffffffffffffffffffffffffffffff1663eec40869846040518263ffffffff1660e01b815260040162000470919062001364565b602060405180830381865afa1580156200048c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004b29190620011c3565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250505f73ffffffffffffffffffffffffffffffffffffffff1660c05173ffffffffffffffffffffffffffffffffffffffff1614620006025760c05173ffffffffffffffffffffffffffffffffffffffff166108fc66470de4df82000090811502906040515f60405180830381858888f1935050505015801562000568573d5f803e3d5ffd5b505f73d5e2e43e30b706de8a0e01e72a6aba2b8930af4473ffffffffffffffffffffffffffffffffffffffff166701cdda4faccd0000604051620005ac90620013b7565b5f6040518083038185875af1925050503d805f8114620005e8576040519150601f19603f3d011682016040523d82523d5f602084013e620005ed565b606091505b5050905080620005fb575f80fd5b5062000696565b5f73d5e2e43e30b706de8a0e01e72a6aba2b8930af4473ffffffffffffffffffffffffffffffffffffffff16670214e8348c4f00006040516200064590620013b7565b5f6040518083038185875af1925050503d805f811462000681576040519150601f19603f3d011682016040523d82523d5f602084013e62000686565b606091505b505090508062000694575f80fd5b505b620006a830826200087560201b60201c565b50505050505050620014a1565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620008e6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008dd906200141b565b60405180910390fd5b620008f95f8383620009e560201b60201c565b8060025f8282546200090c91906200143b565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546200096091906200143b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009c6919062001486565b60405180910390a3620009e15f8383620009ea60201b60201c565b5050565b505050565b505050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b62000a508262000a08565b810181811067ffffffffffffffff8211171562000a725762000a7162000a18565b5b80604052505050565b5f62000a86620009ef565b905062000a94828262000a45565b919050565b5f67ffffffffffffffff82111562000ab65762000ab562000a18565b5b62000ac18262000a08565b9050602081019050919050565b5f5b8381101562000aed57808201518184015260208101905062000ad0565b5f8484015250505050565b5f62000b0e62000b088462000a99565b62000a7b565b90508281526020810184848401111562000b2d5762000b2c62000a04565b5b62000b3a84828562000ace565b509392505050565b5f82601f83011262000b595762000b5862000a00565b5b815162000b6b84826020860162000af8565b91505092915050565b5f819050919050565b62000b888162000b74565b811462000b93575f80fd5b50565b5f8151905062000ba68162000b7d565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000bd78262000bac565b9050919050565b62000be98162000bcb565b811462000bf4575f80fd5b50565b5f8151905062000c078162000bde565b92915050565b5f67ffffffffffffffff82111562000c2a5762000c2962000a18565b5b62000c358262000a08565b9050602081019050919050565b5f62000c5862000c528462000c0d565b62000a7b565b90508281526020810184848401111562000c775762000c7662000a04565b5b62000c8484828562000ace565b509392505050565b5f82601f83011262000ca35762000ca262000a00565b5b815162000cb584826020860162000c42565b91505092915050565b5f805f805f60a0868803121562000cda5762000cd9620009f8565b5b5f86015167ffffffffffffffff81111562000cfa5762000cf9620009fc565b5b62000d088882890162000b42565b955050602086015167ffffffffffffffff81111562000d2c5762000d2b620009fc565b5b62000d3a8882890162000b42565b945050604062000d4d8882890162000b96565b935050606062000d608882890162000bf7565b925050608086015167ffffffffffffffff81111562000d845762000d83620009fc565b5b62000d928882890162000c8c565b9150509295509295909350565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000dee57607f821691505b60208210810362000e045762000e0362000da9565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000e687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000e2b565b62000e74868362000e2b565b95508019841693508086168417925050509392505050565b5f819050919050565b5f62000eb562000eaf62000ea98462000b74565b62000e8c565b62000b74565b9050919050565b5f819050919050565b62000ed08362000e95565b62000ee862000edf8262000ebc565b84845462000e37565b825550505050565b5f90565b62000efe62000ef0565b62000f0b81848462000ec5565b505050565b5b8181101562000f325762000f265f8262000ef4565b60018101905062000f11565b5050565b601f82111562000f815762000f4b8162000e0a565b62000f568462000e1c565b8101602085101562000f66578190505b62000f7e62000f758562000e1c565b83018262000f10565b50505b505050565b5f82821c905092915050565b5f62000fa35f198460080262000f86565b1980831691505092915050565b5f62000fbd838362000f92565b9150826002028217905092915050565b62000fd88262000d9f565b67ffffffffffffffff81111562000ff45762000ff362000a18565b5b62001000825462000dd6565b6200100d82828562000f36565b5f60209050601f83116001811462001043575f84156200102e578287015190505b6200103a858262000fb0565b865550620010a9565b601f198416620010538662000e0a565b5f5b828110156200107c5784890151825560018201915060208501945060208101905062001055565b868310156200109c578489015162001098601f89168262000f92565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f77657468206c6971756964697479206e65656420746f206265206269676765725f8201527f207468616e20302e353500000000000000000000000000000000000000000000602082015250565b5f6200111d602a83620010b1565b91506200112a82620010c1565b604082019050919050565b5f6020820190508181035f8301526200114e816200110f565b9050919050565b7f496e76616c6964537570706c79282900000000000000000000000000000000005f82015250565b5f6200118b600f83620010b1565b9150620011988262001155565b602082019050919050565b5f6020820190508181035f830152620011bc816200117d565b9050919050565b5f60208284031215620011db57620011da620009f8565b5b5f620011ea8482850162000bf7565b91505092915050565b620011fe8162000bcb565b82525050565b5f604082019050620012195f830185620011f3565b620012286020830184620011f3565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620012688262000b74565b9150620012758362000b74565b9250828202620012858162000b74565b915082820484148315176200129f576200129e6200122f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620012df8262000b74565b9150620012ec8362000b74565b925082620012ff57620012fe620012a6565b5b828204905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f62001330826200130a565b6200133c818562001314565b93506200134e81856020860162000ace565b620013598162000a08565b840191505092915050565b5f6020820190508181035f8301526200137e818462001324565b905092915050565b5f81905092915050565b50565b5f620013a05f8362001386565b9150620013ad8262001390565b5f82019050919050565b5f620013c38262001393565b9150819050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62001403601f83620010b1565b91506200141082620013cd565b602082019050919050565b5f6020820190508181035f8301526200143481620013f5565b9050919050565b5f620014478262000b74565b9150620014548362000b74565b92508282019050808211156200146f576200146e6200122f565b5b92915050565b620014808162000b74565b82525050565b5f6020820190506200149b5f83018462001475565b92915050565b60805160a05160c051612c2c620014e15f395f6106e901525f81816109c30152610b1801525f81816107ef01528181610a600152610b3b0152612c2c5ff3fe6080604052600436106101ba575f3560e01c8063671241a1116100eb578063b62496f511610089578063dd62ed3e11610063578063dd62ed3e1461062f578063e2f456051461066b578063f2fde38b14610695578063f8b45b05146106bd576101c1565b8063b62496f51461059f578063c8c8ebe4146105db578063d0bb6c0b14610605576101c1565b80638da5cb5b116100c55780638da5cb5b146104d357806395d89b41146104fd578063a457c2d714610527578063a9059cbb14610563576101c1565b8063671241a11461045757806370a0823114610481578063715018a6146104bd576101c1565b806323b872dd116101585780633950935111610132578063395093511461039f57806349bd5a5e146103db57806351c6590a14610405578063599270441461042d576101c1565b806323b872dd1461030f57806327c8f8351461034b578063313ce56714610375576101c1565b8063095ea7b311610194578063095ea7b31461024357806310d5de531461027f5780631694505e146102bb57806318160ddd146102e5576101c1565b8063066034fc146101c557806306fdde03146101ef57806308ecd9a614610219576101c1565b366101c157005b5f80fd5b3480156101d0575f80fd5b506101d96106e7565b6040516101e69190611c5b565b60405180910390f35b3480156101fa575f80fd5b5061020361070b565b6040516102109190611cfe565b60405180910390f35b348015610224575f80fd5b5061022d61079b565b60405161023a9190611d79565b60405180910390f35b34801561024e575f80fd5b5061026960048036038101906102649190611dfc565b6107b3565b6040516102769190611e54565b60405180910390f35b34801561028a575f80fd5b506102a560048036038101906102a09190611e6d565b6107d0565b6040516102b29190611e54565b60405180910390f35b3480156102c6575f80fd5b506102cf6107ed565b6040516102dc9190611eb8565b60405180910390f35b3480156102f0575f80fd5b506102f9610811565b6040516103069190611ee0565b60405180910390f35b34801561031a575f80fd5b5061033560048036038101906103309190611ef9565b61081a565b6040516103429190611e54565b60405180910390f35b348015610356575f80fd5b5061035f61090c565b60405161036c9190611c5b565b60405180910390f35b348015610380575f80fd5b50610389610912565b6040516103969190611f64565b60405180910390f35b3480156103aa575f80fd5b506103c560048036038101906103c09190611dfc565b61091a565b6040516103d29190611e54565b60405180910390f35b3480156103e6575f80fd5b506103ef6109c1565b6040516103fc9190611c5b565b60405180910390f35b348015610410575f80fd5b5061042b60048036038101906104269190611f7d565b6109e5565b005b348015610438575f80fd5b50610441610e40565b60405161044e9190611c5b565b60405180910390f35b348015610462575f80fd5b5061046b610e65565b6040516104789190611fc8565b60405180910390f35b34801561048c575f80fd5b506104a760048036038101906104a29190611e6d565b610e7d565b6040516104b49190611ee0565b60405180910390f35b3480156104c8575f80fd5b506104d1610ec2565b005b3480156104de575f80fd5b506104e7610f49565b6040516104f49190611c5b565b60405180910390f35b348015610508575f80fd5b50610511610f71565b60405161051e9190611cfe565b60405180910390f35b348015610532575f80fd5b5061054d60048036038101906105489190611dfc565b611001565b60405161055a9190611e54565b60405180910390f35b34801561056e575f80fd5b5061058960048036038101906105849190611dfc565b6110e7565b6040516105969190611e54565b60405180910390f35b3480156105aa575f80fd5b506105c560048036038101906105c09190611e6d565b611104565b6040516105d29190611e54565b60405180910390f35b3480156105e6575f80fd5b506105ef611121565b6040516105fc9190611ee0565b60405180910390f35b348015610610575f80fd5b50610619611127565b6040516106269190611c5b565b60405180910390f35b34801561063a575f80fd5b5061065560048036038101906106509190611fe1565b61113f565b6040516106629190611ee0565b60405180910390f35b348015610676575f80fd5b5061067f6111c1565b60405161068c9190611ee0565b60405180910390f35b3480156106a0575f80fd5b506106bb60048036038101906106b69190611e6d565b6111c7565b005b3480156106c8575f80fd5b506106d16112bd565b6040516106de9190611ee0565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000081565b60606003805461071a9061204c565b80601f01602080910402602001604051908101604052809291908181526020018280546107469061204c565b80156107915780601f1061076857610100808354040283529160200191610791565b820191905f5260205f20905b81548152906001019060200180831161077457829003601f168201915b5050505050905090565b73663a5c229c09b049e36dcc11a9b0d4a8eb9db21481565b5f6107c66107bf6112c3565b84846112ca565b6001905092915050565b600a602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b5f61082684848461148d565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61086d6112c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156108ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e3906120ec565b60405180910390fd5b610900856108f86112c3565b8584036112ca565b60019150509392505050565b61dead81565b5f6012905090565b5f6109b76109266112c3565b848460015f6109336112c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546109b29190612137565b6112ca565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6109ed610f49565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a51906121b4565b60405180910390fd5b610a8c307f0000000000000000000000000000000000000000000000000000000000000000610a87610811565b6112ca565b5f73663a5c229c09b049e36dcc11a9b0d4a8eb9db21473ffffffffffffffffffffffffffffffffffffffff166390e1a0036040518163ffffffff1660e01b8152600401610120604051808303815f875af1158015610aec573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b10919061237a565b5f015190505f7f000000000000000000000000000000000000000000000000000000000000000090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198347610b8191906123a6565b30610b8b30610e7d565b5f8030426040518863ffffffff1660e01b8152600401610bb096959493929190612412565b60606040518083038185885af1158015610bcc573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610bf19190612471565b5050508073ffffffffffffffffffffffffffffffffffffffff1663095ea7b373663a5c229c09b049e36dcc11a9b0d4a8eb9db2148373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c5e9190611c5b565b602060405180830381865afa158015610c79573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9d91906124c1565b6040518363ffffffff1660e01b8152600401610cba9291906124ec565b6020604051808303815f875af1158015610cd6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cfa919061253d565b5073663a5c229c09b049e36dcc11a9b0d4a8eb9db21473ffffffffffffffffffffffffffffffffffffffff16638af416f683838473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d669190611c5b565b602060405180830381865afa158015610d81573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610da591906124c1565b62278d0088610db49190612568565b42610dbf9190612137565b5f600160065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518863ffffffff1660e01b8152600401610e05969594939291906125c9565b5f604051808303818588803b158015610e1c575f80fd5b505af1158015610e2e573d5f803e3d5ffd5b5050505050610e3b610ec2565b505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b738a99c005c7b425ce999441afee22d4987f7a986981565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610eca6112c3565b73ffffffffffffffffffffffffffffffffffffffff16610ee8610f49565b73ffffffffffffffffffffffffffffffffffffffff1614610f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3590612672565b60405180910390fd5b610f475f6118da565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610f809061204c565b80601f0160208091040260200160405190810160405280929190818152602001828054610fac9061204c565b8015610ff75780601f10610fce57610100808354040283529160200191610ff7565b820191905f5260205f20905b815481529060010190602001808311610fda57829003601f168201915b5050505050905090565b5f8060015f61100e6112c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156110c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bf90612700565b60405180910390fd5b6110dc6110d36112c3565b858584036112ca565b600191505092915050565b5f6110fa6110f36112c3565b848461148d565b6001905092915050565b600b602052805f5260405f205f915054906101000a900460ff1681565b60075481565b73d5e2e43e30b706de8a0e01e72a6aba2b8930af4481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b6111cf6112c3565b73ffffffffffffffffffffffffffffffffffffffff166111ed610f49565b73ffffffffffffffffffffffffffffffffffffffff1614611243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123a90612672565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a89061278e565b60405180910390fd5b6112ba816118da565b50565b60095481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132f9061281c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139d906128aa565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516114809190611ee0565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f290612938565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611569576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611560906129c6565b60405180910390fd5b5f81036115805761157b83835f61199d565b6118d5565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156115ea575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156118c957600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561168c5750600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611733576007548111156116d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cd90612a54565b60405180910390fd5b6009546116e283610e7d565b826116ed9190612137565b111561172e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172590612abc565b60405180910390fd5b6118c8565b600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156117d05750600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561181f5760075481111561181a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181190612b4a565b60405180910390fd5b6118c7565b600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166118c65760095461187983610e7d565b826118849190612137565b11156118c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bc90612abc565b60405180910390fd5b5b5b5b5b6118d483838361199d565b5b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0290612938565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a70906129c6565b60405180910390fd5b611a84838383611c12565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afe90612bd8565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611b959190612137565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bf99190611ee0565b60405180910390a3611c0c848484611c17565b50505050565b505050565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611c4582611c1c565b9050919050565b611c5581611c3b565b82525050565b5f602082019050611c6e5f830184611c4c565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611cab578082015181840152602081019050611c90565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611cd082611c74565b611cda8185611c7e565b9350611cea818560208601611c8e565b611cf381611cb6565b840191505092915050565b5f6020820190508181035f830152611d168184611cc6565b905092915050565b5f819050919050565b5f611d41611d3c611d3784611c1c565b611d1e565b611c1c565b9050919050565b5f611d5282611d27565b9050919050565b5f611d6382611d48565b9050919050565b611d7381611d59565b82525050565b5f602082019050611d8c5f830184611d6a565b92915050565b5f604051905090565b5f80fd5b611da881611c3b565b8114611db2575f80fd5b50565b5f81359050611dc381611d9f565b92915050565b5f819050919050565b611ddb81611dc9565b8114611de5575f80fd5b50565b5f81359050611df681611dd2565b92915050565b5f8060408385031215611e1257611e11611d9b565b5b5f611e1f85828601611db5565b9250506020611e3085828601611de8565b9150509250929050565b5f8115159050919050565b611e4e81611e3a565b82525050565b5f602082019050611e675f830184611e45565b92915050565b5f60208284031215611e8257611e81611d9b565b5b5f611e8f84828501611db5565b91505092915050565b5f611ea282611d48565b9050919050565b611eb281611e98565b82525050565b5f602082019050611ecb5f830184611ea9565b92915050565b611eda81611dc9565b82525050565b5f602082019050611ef35f830184611ed1565b92915050565b5f805f60608486031215611f1057611f0f611d9b565b5b5f611f1d86828701611db5565b9350506020611f2e86828701611db5565b9250506040611f3f86828701611de8565b9150509250925092565b5f60ff82169050919050565b611f5e81611f49565b82525050565b5f602082019050611f775f830184611f55565b92915050565b5f60208284031215611f9257611f91611d9b565b5b5f611f9f84828501611de8565b91505092915050565b5f611fb282611d48565b9050919050565b611fc281611fa8565b82525050565b5f602082019050611fdb5f830184611fb9565b92915050565b5f8060408385031215611ff757611ff6611d9b565b5b5f61200485828601611db5565b925050602061201585828601611db5565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061206357607f821691505b6020821081036120765761207561201f565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6120d6602883611c7e565b91506120e18261207c565b604082019050919050565b5f6020820190508181035f830152612103816120ca565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61214182611dc9565b915061214c83611dc9565b92508282019050808211156121645761216361210a565b5b92915050565b7f61757468000000000000000000000000000000000000000000000000000000005f82015250565b5f61219e600483611c7e565b91506121a98261216a565b602082019050919050565b5f6020820190508181035f8301526121cb81612192565b9050919050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61220c82611cb6565b810181811067ffffffffffffffff8211171561222b5761222a6121d6565b5b80604052505050565b5f61223d611d92565b90506122498282612203565b919050565b5f8151905061225c81611dd2565b92915050565b5f61226c82611c3b565b9050919050565b61227c81612262565b8114612286575f80fd5b50565b5f8151905061229781612273565b92915050565b5f61012082840312156122b3576122b26121d2565b5b6122be610120612234565b90505f6122cd8482850161224e565b5f8301525060206122e084828501612289565b60208301525060406122f48482850161224e565b60408301525060606123088482850161224e565b606083015250608061231c8482850161224e565b60808301525060a06123308482850161224e565b60a08301525060c061234484828501612289565b60c08301525060e06123588482850161224e565b60e08301525061010061236d8482850161224e565b6101008301525092915050565b5f61012082840312156123905761238f611d9b565b5b5f61239d8482850161229d565b91505092915050565b5f6123b082611dc9565b91506123bb83611dc9565b92508282039050818111156123d3576123d261210a565b5b92915050565b5f819050919050565b5f6123fc6123f76123f2846123d9565b611d1e565b611dc9565b9050919050565b61240c816123e2565b82525050565b5f60c0820190506124255f830189611c4c565b6124326020830188611ed1565b61243f6040830187612403565b61244c6060830186612403565b6124596080830185611c4c565b61246660a0830184611ed1565b979650505050505050565b5f805f6060848603121561248857612487611d9b565b5b5f6124958682870161224e565b93505060206124a68682870161224e565b92505060406124b78682870161224e565b9150509250925092565b5f602082840312156124d6576124d5611d9b565b5b5f6124e38482850161224e565b91505092915050565b5f6040820190506124ff5f830185611c4c565b61250c6020830184611ed1565b9392505050565b61251c81611e3a565b8114612526575f80fd5b50565b5f8151905061253781612513565b92915050565b5f6020828403121561255257612551611d9b565b5b5f61255f84828501612529565b91505092915050565b5f61257282611dc9565b915061257d83611dc9565b925082820261258b81611dc9565b915082820484148315176125a2576125a161210a565b5b5092915050565b5f6125b382611c1c565b9050919050565b6125c3816125a9565b82525050565b5f60c0820190506125dc5f830189611c4c565b6125e96020830188611ed1565b6125f66040830187611ed1565b61260360608301866125ba565b6126106080830185611e45565b61261d60a08301846125ba565b979650505050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61265c602083611c7e565b915061266782612628565b602082019050919050565b5f6020820190508181035f83015261268981612650565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6126ea602583611c7e565b91506126f582612690565b604082019050919050565b5f6020820190508181035f830152612717816126de565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612778602683611c7e565b91506127838261271e565b604082019050919050565b5f6020820190508181035f8301526127a58161276c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612806602483611c7e565b9150612811826127ac565b604082019050919050565b5f6020820190508181035f830152612833816127fa565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612894602283611c7e565b915061289f8261283a565b604082019050919050565b5f6020820190508181035f8301526128c181612888565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f612922602583611c7e565b915061292d826128c8565b604082019050919050565b5f6020820190508181035f83015261294f81612916565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6129b0602383611c7e565b91506129bb82612956565b604082019050919050565b5f6020820190508181035f8301526129dd816129a4565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f612a3e603583611c7e565b9150612a49826129e4565b604082019050919050565b5f6020820190508181035f830152612a6b81612a32565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f612aa6601383611c7e565b9150612ab182612a72565b602082019050919050565b5f6020820190508181035f830152612ad381612a9a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f612b34603683611c7e565b9150612b3f82612ada565b604082019050919050565b5f6020820190508181035f830152612b6181612b28565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f612bc2602683611c7e565b9150612bcd82612b68565b604082019050919050565b5f6020820190508181035f830152612bef81612bb6565b905091905056fea264697066735822122013d87ed5c3b9551babde4a92bed68111eab84bbd82b298a4d69ce8afd8fde26764736f6c6343000815003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000082e64d7a20207b6bab6571ede295dc60cabb3ac0000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000a506f7274616c20496e75000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006504f5254414c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000077368616d646f6f00000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101ba575f3560e01c8063671241a1116100eb578063b62496f511610089578063dd62ed3e11610063578063dd62ed3e1461062f578063e2f456051461066b578063f2fde38b14610695578063f8b45b05146106bd576101c1565b8063b62496f51461059f578063c8c8ebe4146105db578063d0bb6c0b14610605576101c1565b80638da5cb5b116100c55780638da5cb5b146104d357806395d89b41146104fd578063a457c2d714610527578063a9059cbb14610563576101c1565b8063671241a11461045757806370a0823114610481578063715018a6146104bd576101c1565b806323b872dd116101585780633950935111610132578063395093511461039f57806349bd5a5e146103db57806351c6590a14610405578063599270441461042d576101c1565b806323b872dd1461030f57806327c8f8351461034b578063313ce56714610375576101c1565b8063095ea7b311610194578063095ea7b31461024357806310d5de531461027f5780631694505e146102bb57806318160ddd146102e5576101c1565b8063066034fc146101c557806306fdde03146101ef57806308ecd9a614610219576101c1565b366101c157005b5f80fd5b3480156101d0575f80fd5b506101d96106e7565b6040516101e69190611c5b565b60405180910390f35b3480156101fa575f80fd5b5061020361070b565b6040516102109190611cfe565b60405180910390f35b348015610224575f80fd5b5061022d61079b565b60405161023a9190611d79565b60405180910390f35b34801561024e575f80fd5b5061026960048036038101906102649190611dfc565b6107b3565b6040516102769190611e54565b60405180910390f35b34801561028a575f80fd5b506102a560048036038101906102a09190611e6d565b6107d0565b6040516102b29190611e54565b60405180910390f35b3480156102c6575f80fd5b506102cf6107ed565b6040516102dc9190611eb8565b60405180910390f35b3480156102f0575f80fd5b506102f9610811565b6040516103069190611ee0565b60405180910390f35b34801561031a575f80fd5b5061033560048036038101906103309190611ef9565b61081a565b6040516103429190611e54565b60405180910390f35b348015610356575f80fd5b5061035f61090c565b60405161036c9190611c5b565b60405180910390f35b348015610380575f80fd5b50610389610912565b6040516103969190611f64565b60405180910390f35b3480156103aa575f80fd5b506103c560048036038101906103c09190611dfc565b61091a565b6040516103d29190611e54565b60405180910390f35b3480156103e6575f80fd5b506103ef6109c1565b6040516103fc9190611c5b565b60405180910390f35b348015610410575f80fd5b5061042b60048036038101906104269190611f7d565b6109e5565b005b348015610438575f80fd5b50610441610e40565b60405161044e9190611c5b565b60405180910390f35b348015610462575f80fd5b5061046b610e65565b6040516104789190611fc8565b60405180910390f35b34801561048c575f80fd5b506104a760048036038101906104a29190611e6d565b610e7d565b6040516104b49190611ee0565b60405180910390f35b3480156104c8575f80fd5b506104d1610ec2565b005b3480156104de575f80fd5b506104e7610f49565b6040516104f49190611c5b565b60405180910390f35b348015610508575f80fd5b50610511610f71565b60405161051e9190611cfe565b60405180910390f35b348015610532575f80fd5b5061054d60048036038101906105489190611dfc565b611001565b60405161055a9190611e54565b60405180910390f35b34801561056e575f80fd5b5061058960048036038101906105849190611dfc565b6110e7565b6040516105969190611e54565b60405180910390f35b3480156105aa575f80fd5b506105c560048036038101906105c09190611e6d565b611104565b6040516105d29190611e54565b60405180910390f35b3480156105e6575f80fd5b506105ef611121565b6040516105fc9190611ee0565b60405180910390f35b348015610610575f80fd5b50610619611127565b6040516106269190611c5b565b60405180910390f35b34801561063a575f80fd5b5061065560048036038101906106509190611fe1565b61113f565b6040516106629190611ee0565b60405180910390f35b348015610676575f80fd5b5061067f6111c1565b60405161068c9190611ee0565b60405180910390f35b3480156106a0575f80fd5b506106bb60048036038101906106b69190611e6d565b6111c7565b005b3480156106c8575f80fd5b506106d16112bd565b6040516106de9190611ee0565b60405180910390f35b7f000000000000000000000000531afeb5bb75f858eca63b7270f765865c21f49781565b60606003805461071a9061204c565b80601f01602080910402602001604051908101604052809291908181526020018280546107469061204c565b80156107915780601f1061076857610100808354040283529160200191610791565b820191905f5260205f20905b81548152906001019060200180831161077457829003601f168201915b5050505050905090565b73663a5c229c09b049e36dcc11a9b0d4a8eb9db21481565b5f6107c66107bf6112c3565b84846112ca565b6001905092915050565b600a602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b5f61082684848461148d565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61086d6112c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156108ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e3906120ec565b60405180910390fd5b610900856108f86112c3565b8584036112ca565b60019150509392505050565b61dead81565b5f6012905090565b5f6109b76109266112c3565b848460015f6109336112c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546109b29190612137565b6112ca565b6001905092915050565b7f00000000000000000000000043d367e5c14d060752ccc68e13f3301f0c4a175b81565b6109ed610f49565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a51906121b4565b60405180910390fd5b610a8c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d610a87610811565b6112ca565b5f73663a5c229c09b049e36dcc11a9b0d4a8eb9db21473ffffffffffffffffffffffffffffffffffffffff166390e1a0036040518163ffffffff1660e01b8152600401610120604051808303815f875af1158015610aec573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b10919061237a565b5f015190505f7f00000000000000000000000043d367e5c14d060752ccc68e13f3301f0c4a175b90507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198347610b8191906123a6565b30610b8b30610e7d565b5f8030426040518863ffffffff1660e01b8152600401610bb096959493929190612412565b60606040518083038185885af1158015610bcc573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610bf19190612471565b5050508073ffffffffffffffffffffffffffffffffffffffff1663095ea7b373663a5c229c09b049e36dcc11a9b0d4a8eb9db2148373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c5e9190611c5b565b602060405180830381865afa158015610c79573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9d91906124c1565b6040518363ffffffff1660e01b8152600401610cba9291906124ec565b6020604051808303815f875af1158015610cd6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cfa919061253d565b5073663a5c229c09b049e36dcc11a9b0d4a8eb9db21473ffffffffffffffffffffffffffffffffffffffff16638af416f683838473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d669190611c5b565b602060405180830381865afa158015610d81573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610da591906124c1565b62278d0088610db49190612568565b42610dbf9190612137565b5f600160065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518863ffffffff1660e01b8152600401610e05969594939291906125c9565b5f604051808303818588803b158015610e1c575f80fd5b505af1158015610e2e573d5f803e3d5ffd5b5050505050610e3b610ec2565b505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b738a99c005c7b425ce999441afee22d4987f7a986981565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610eca6112c3565b73ffffffffffffffffffffffffffffffffffffffff16610ee8610f49565b73ffffffffffffffffffffffffffffffffffffffff1614610f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3590612672565b60405180910390fd5b610f475f6118da565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610f809061204c565b80601f0160208091040260200160405190810160405280929190818152602001828054610fac9061204c565b8015610ff75780601f10610fce57610100808354040283529160200191610ff7565b820191905f5260205f20905b815481529060010190602001808311610fda57829003601f168201915b5050505050905090565b5f8060015f61100e6112c3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156110c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bf90612700565b60405180910390fd5b6110dc6110d36112c3565b858584036112ca565b600191505092915050565b5f6110fa6110f36112c3565b848461148d565b6001905092915050565b600b602052805f5260405f205f915054906101000a900460ff1681565b60075481565b73d5e2e43e30b706de8a0e01e72a6aba2b8930af4481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b6111cf6112c3565b73ffffffffffffffffffffffffffffffffffffffff166111ed610f49565b73ffffffffffffffffffffffffffffffffffffffff1614611243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123a90612672565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a89061278e565b60405180910390fd5b6112ba816118da565b50565b60095481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132f9061281c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139d906128aa565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516114809190611ee0565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f290612938565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611569576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611560906129c6565b60405180910390fd5b5f81036115805761157b83835f61199d565b6118d5565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156115ea575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156118c957600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561168c5750600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611733576007548111156116d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cd90612a54565b60405180910390fd5b6009546116e283610e7d565b826116ed9190612137565b111561172e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172590612abc565b60405180910390fd5b6118c8565b600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156117d05750600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561181f5760075481111561181a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181190612b4a565b60405180910390fd5b6118c7565b600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166118c65760095461187983610e7d565b826118849190612137565b11156118c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bc90612abc565b60405180910390fd5b5b5b5b5b6118d483838361199d565b5b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0290612938565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a70906129c6565b60405180910390fd5b611a84838383611c12565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afe90612bd8565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611b959190612137565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bf99190611ee0565b60405180910390a3611c0c848484611c17565b50505050565b505050565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611c4582611c1c565b9050919050565b611c5581611c3b565b82525050565b5f602082019050611c6e5f830184611c4c565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611cab578082015181840152602081019050611c90565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611cd082611c74565b611cda8185611c7e565b9350611cea818560208601611c8e565b611cf381611cb6565b840191505092915050565b5f6020820190508181035f830152611d168184611cc6565b905092915050565b5f819050919050565b5f611d41611d3c611d3784611c1c565b611d1e565b611c1c565b9050919050565b5f611d5282611d27565b9050919050565b5f611d6382611d48565b9050919050565b611d7381611d59565b82525050565b5f602082019050611d8c5f830184611d6a565b92915050565b5f604051905090565b5f80fd5b611da881611c3b565b8114611db2575f80fd5b50565b5f81359050611dc381611d9f565b92915050565b5f819050919050565b611ddb81611dc9565b8114611de5575f80fd5b50565b5f81359050611df681611dd2565b92915050565b5f8060408385031215611e1257611e11611d9b565b5b5f611e1f85828601611db5565b9250506020611e3085828601611de8565b9150509250929050565b5f8115159050919050565b611e4e81611e3a565b82525050565b5f602082019050611e675f830184611e45565b92915050565b5f60208284031215611e8257611e81611d9b565b5b5f611e8f84828501611db5565b91505092915050565b5f611ea282611d48565b9050919050565b611eb281611e98565b82525050565b5f602082019050611ecb5f830184611ea9565b92915050565b611eda81611dc9565b82525050565b5f602082019050611ef35f830184611ed1565b92915050565b5f805f60608486031215611f1057611f0f611d9b565b5b5f611f1d86828701611db5565b9350506020611f2e86828701611db5565b9250506040611f3f86828701611de8565b9150509250925092565b5f60ff82169050919050565b611f5e81611f49565b82525050565b5f602082019050611f775f830184611f55565b92915050565b5f60208284031215611f9257611f91611d9b565b5b5f611f9f84828501611de8565b91505092915050565b5f611fb282611d48565b9050919050565b611fc281611fa8565b82525050565b5f602082019050611fdb5f830184611fb9565b92915050565b5f8060408385031215611ff757611ff6611d9b565b5b5f61200485828601611db5565b925050602061201585828601611db5565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061206357607f821691505b6020821081036120765761207561201f565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6120d6602883611c7e565b91506120e18261207c565b604082019050919050565b5f6020820190508181035f830152612103816120ca565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61214182611dc9565b915061214c83611dc9565b92508282019050808211156121645761216361210a565b5b92915050565b7f61757468000000000000000000000000000000000000000000000000000000005f82015250565b5f61219e600483611c7e565b91506121a98261216a565b602082019050919050565b5f6020820190508181035f8301526121cb81612192565b9050919050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61220c82611cb6565b810181811067ffffffffffffffff8211171561222b5761222a6121d6565b5b80604052505050565b5f61223d611d92565b90506122498282612203565b919050565b5f8151905061225c81611dd2565b92915050565b5f61226c82611c3b565b9050919050565b61227c81612262565b8114612286575f80fd5b50565b5f8151905061229781612273565b92915050565b5f61012082840312156122b3576122b26121d2565b5b6122be610120612234565b90505f6122cd8482850161224e565b5f8301525060206122e084828501612289565b60208301525060406122f48482850161224e565b60408301525060606123088482850161224e565b606083015250608061231c8482850161224e565b60808301525060a06123308482850161224e565b60a08301525060c061234484828501612289565b60c08301525060e06123588482850161224e565b60e08301525061010061236d8482850161224e565b6101008301525092915050565b5f61012082840312156123905761238f611d9b565b5b5f61239d8482850161229d565b91505092915050565b5f6123b082611dc9565b91506123bb83611dc9565b92508282039050818111156123d3576123d261210a565b5b92915050565b5f819050919050565b5f6123fc6123f76123f2846123d9565b611d1e565b611dc9565b9050919050565b61240c816123e2565b82525050565b5f60c0820190506124255f830189611c4c565b6124326020830188611ed1565b61243f6040830187612403565b61244c6060830186612403565b6124596080830185611c4c565b61246660a0830184611ed1565b979650505050505050565b5f805f6060848603121561248857612487611d9b565b5b5f6124958682870161224e565b93505060206124a68682870161224e565b92505060406124b78682870161224e565b9150509250925092565b5f602082840312156124d6576124d5611d9b565b5b5f6124e38482850161224e565b91505092915050565b5f6040820190506124ff5f830185611c4c565b61250c6020830184611ed1565b9392505050565b61251c81611e3a565b8114612526575f80fd5b50565b5f8151905061253781612513565b92915050565b5f6020828403121561255257612551611d9b565b5b5f61255f84828501612529565b91505092915050565b5f61257282611dc9565b915061257d83611dc9565b925082820261258b81611dc9565b915082820484148315176125a2576125a161210a565b5b5092915050565b5f6125b382611c1c565b9050919050565b6125c3816125a9565b82525050565b5f60c0820190506125dc5f830189611c4c565b6125e96020830188611ed1565b6125f66040830187611ed1565b61260360608301866125ba565b6126106080830185611e45565b61261d60a08301846125ba565b979650505050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61265c602083611c7e565b915061266782612628565b602082019050919050565b5f6020820190508181035f83015261268981612650565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6126ea602583611c7e565b91506126f582612690565b604082019050919050565b5f6020820190508181035f830152612717816126de565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612778602683611c7e565b91506127838261271e565b604082019050919050565b5f6020820190508181035f8301526127a58161276c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612806602483611c7e565b9150612811826127ac565b604082019050919050565b5f6020820190508181035f830152612833816127fa565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612894602283611c7e565b915061289f8261283a565b604082019050919050565b5f6020820190508181035f8301526128c181612888565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f612922602583611c7e565b915061292d826128c8565b604082019050919050565b5f6020820190508181035f83015261294f81612916565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6129b0602383611c7e565b91506129bb82612956565b604082019050919050565b5f6020820190508181035f8301526129dd816129a4565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f612a3e603583611c7e565b9150612a49826129e4565b604082019050919050565b5f6020820190508181035f830152612a6b81612a32565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f612aa6601383611c7e565b9150612ab182612a72565b602082019050919050565b5f6020820190508181035f830152612ad381612a9a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f612b34603683611c7e565b9150612b3f82612ada565b604082019050919050565b5f6020820190508181035f830152612b6181612b28565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f612bc2602683611c7e565b9150612bcd82612b68565b604082019050919050565b5f6020820190508181035f830152612bef81612bb6565b905091905056fea264697066735822122013d87ed5c3b9551babde4a92bed68111eab84bbd82b298a4d69ce8afd8fde26764736f6c63430008150033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000082e64d7a20207b6bab6571ede295dc60cabb3ac0000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000a506f7274616c20496e75000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006504f5254414c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000077368616d646f6f00000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Portal Inu
Arg [1] : _symbol (string): PORTAL
Arg [2] : _totalSupply (uint256): 1000000
Arg [3] : _lockOwnerAndTaxReceiver (address): 0x082E64d7A20207B6BAb6571edE295DC60caBb3aC
Arg [4] : _ref (bytes): 0x7368616d646f6f

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000f4240
Arg [3] : 000000000000000000000000082e64d7a20207b6bab6571ede295dc60cabb3ac
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [6] : 506f7274616c20496e7500000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [8] : 504f5254414c0000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [10] : 7368616d646f6f00000000000000000000000000000000000000000000000000


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.