ETH Price: $2,654.69 (+1.62%)

Token

Inu AI (INUAI)
 

Overview

Max Total Supply

100,000,000 INUAI

Holders

71

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.086127931673176759 INUAI

Value
$0.00
0xd4d3781c3a439ddc1e82e5de39798a4fe63bfe03
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:
INUAI

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

pragma solidity ^0.8.17;
// SPDX-License-Identifier: UNLICENSED
/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        assert(c / a == b);
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a / b;
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b <= a);
        return a - b;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        assert(c >= a);
        return c;
    }
}

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

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

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

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

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

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

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

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

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

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

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

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

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

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

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions 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);
    }
}

/** 
 *### Test_Target
 */
abstract contract BlackListable is Ownable {
    event AddedBlackList(address _user);
    event RemovedBlackList(address _user);

    mapping (address => bool) private isBlackListed;

    constructor() {}

    modifier notInBlackList(){
        _checkBlackList();
        _;
    }

    function getBlackListStatus(address _maker) external view onlyOwner returns (bool) {
        return isBlackListed[_maker];
    }

    function _checkBlackList() internal view virtual {
        require(!isBlackListed[_msgSender()], "");
    }

    function _addBlackList(address _evilUser) internal {
        isBlackListed[_evilUser] = true;
        emit AddedBlackList(_evilUser);
    }

    function addBlackList (address _evilUser) external onlyOwner {
        _addBlackList(_evilUser);
    }

    function removeBlackList (address _clearedUser) public onlyOwner {
        isBlackListed[_clearedUser] = false;
        emit RemovedBlackList(_clearedUser);
    }
}

abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        require(!paused(), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        require(paused(), "Pausable: not paused");
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, 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) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, 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) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /**
     *test_target
     */
    function _transferWithFee(
        address from,
        address to,
        uint256 amount,
        uint256 amountTransfer,
        uint256 fee
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount == amountTransfer + fee, "ERC20: fee calculation incorrect");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amountTransfer;
            _balances[address(this)] += fee;
        }

        emit Transfer(from, to, amountTransfer);

        _afterTokenTransfer(from, to, amount);
    }

    function contractAddress() internal view returns (address){
        return address(this);
    }

    /** @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;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _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;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

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

contract INUAI is ERC20, Ownable, Pausable, BlackListable {
    using SafeMath for uint;

    bool private tradingOpen;

    uint256 private _initialSupply = 100000000 * 10 ** 18;
    uint256 private _maximumHoldingEachAddress = 5000000 * 10 ** 18;
    uint256 private _limitEachTransaction = 1000000 * 10 ** 18;
    uint256 private _taxFeePercentBuy = 300; // 100 = 1%
    uint256 private _taxFeePercentSell = 300; // 100 = 1%

    address payable private _feeAddrWallet;

    IUniswapV2Router02 internal uniswapV2Router;
    address internal uniswapV2Pair;

    uint8 private txCount = 0;
    uint8 private swapTrigger = 5;
    bool private inSwap = false;

    constructor() ERC20('Inu AI', 'INUAI'){
        _pause();
        _mint(_msgSender(), _initialSupply);
        _feeAddrWallet = payable(_msgSender());
    }

    // @dev Public Getter - Tested
    function yourBalance() external view returns (uint256){
        return balanceOf(_msgSender());
    }

    // @dev Public OnlyOwner Setter - Tested
    function setTaxFeePercentageBuy(uint256 percentage) public onlyOwner{
        _taxFeePercentBuy = percentage;
    }

    function setTaxFeePercentageSell(uint256 percentage) public onlyOwner{
        _taxFeePercentSell = percentage;
    }

    function setAddressCap(uint256 cap) public onlyOwner{
        _maximumHoldingEachAddress = cap;
    }

    function setTransactionCap(uint256 cap) public onlyOwner{
        _limitEachTransaction = cap;
    }

    function setSwapTriggerCount(uint8 trigger) public onlyOwner{
        swapTrigger = trigger;
    }

    function setFeeAddress(address feeWallet) public onlyOwner {
        _feeAddrWallet = payable(feeWallet);
    }

    // @dev Token Transact Pause - Tested
    function pause() public virtual onlyOwner returns (bool) {
        _pause();
        return true;
    }

    function unpause() public virtual onlyOwner returns (bool) {
        _unpause();
        return true;
    }

    // @dev Public Transaction - tested
    function transfer(address to, uint256 amount) public virtual override whenNotPaused notInBlackList returns (bool) {
        tokenTransfer(_msgSender(), to, amount);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override whenNotPaused notInBlackList returns (bool){
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        tokenTransfer(from, to, amount);
        return true;
    }

    // @dev Internal Transaction - Tested
    function eachAddressCap() internal view returns (uint256) {
        return _maximumHoldingEachAddress;
    }

    function eachTransactionCap() internal view returns (uint256) {
        return _limitEachTransaction;
    }

    function taxFeePercentageBuy(uint256 amount) internal view returns (uint256) {
        return amount.mul(_taxFeePercentBuy).div(10000);
    }

    function taxFeePercentageSell(uint256 amount) internal view returns (uint256) {
        return amount.mul(_taxFeePercentSell).div(10000);
    }

    // test_target
    function _tokenTransfer(address from, address to, uint256 amount, bool takeFee, bool isBuy) internal {
        if (!takeFee) {
            _transfer(from, to, amount);
        }
        else if (isBuy){
            uint256 feeAmount = taxFeePercentageBuy(amount);
            uint256 transferAmount = amount - feeAmount;
            _transferWithFee(from, to, amount, transferAmount, feeAmount);
        }
        else{
            if (to != uniswapV2Pair) {
                _transfer(from, to, amount);
            }
            else{
                uint256 feeAmount = taxFeePercentageSell(amount);
                uint256 transferAmount = amount - feeAmount;
                _transferWithFee(from, to, amount, transferAmount, feeAmount);
            }
        }
    }

    // test_target
    function tokenTransfer(address from, address to, uint256 amount) internal {
        if (to != owner() &&
            to != address(this) &&
            to != uniswapV2Pair &&
            from != owner()){
                require(balanceOf(to).add(amount) <= eachAddressCap(), "ERC20: exceeding number of token for each address");
        }

        if (from != owner() && to != owner() && from != address(this) && to != address(this))
            require(amount <= eachTransactionCap(), "ERC20: transfer amount above limit for each transaction");
        
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "ERC20: Token amount transfer must be higher than zero.");

        if (
            txCount >= swapTrigger &&
            !inSwap &&
            from != uniswapV2Pair
        ) {
            swapWalletBalance();
        }

        bool takeFee = true;
        bool isBuy;

        if (from == address(this) || from == owner()){
            takeFee = false;
        }
        if (from == uniswapV2Pair) {
            isBuy = true;
        }
        
        txCount++;
        _tokenTransfer(from, to, amount, takeFee, isBuy);
    }
    // @dev ETH transaction - test_target
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

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

    function sendToWallet(address payable wallet, uint256 amount) private {
        wallet.transfer(amount);
    }

    function swapWalletBalance() private{
            uint256 contractTokenBalance = balanceOf(address(this));
            if (!inSwap && contractTokenBalance>0) {
                txCount = 0;
                swapTokensForEth(contractTokenBalance);
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendToWallet(_feeAddrWallet, contractETHBalance);
                }
            }
    }

    function manualSwap() public onlyOwner {
        swapWalletBalance();
    }

    receive() external payable {}

    // @dev uniswap contract - tested
    function openTrading() external onlyOwner whenPaused {
        require(!tradingOpen,"Trading is already open");
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        uniswapV2Router = _uniswapV2Router;
        _approve(_msgSender(), address(_uniswapV2Router), _initialSupply);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        tradingOpen = true;
        _unpause();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_user","type":"address"}],"name":"AddedBlackList","type":"event"},{"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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_user","type":"address"}],"name":"RemovedBlackList","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"_evilUser","type":"address"}],"name":"addBlackList","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"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":"_maker","type":"address"}],"name":"getBlackListStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_clearedUser","type":"address"}],"name":"removeBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cap","type":"uint256"}],"name":"setAddressCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"feeWallet","type":"address"}],"name":"setFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"trigger","type":"uint8"}],"name":"setSwapTriggerCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"setTaxFeePercentageBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"setTaxFeePercentageSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cap","type":"uint256"}],"name":"setTransactionCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"unpause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"yourBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526a52b7d2dcc80cd2e40000006008556a0422ca8b0a00a42500000060095569d3c21bcecceda1000000600a5561012c600b5561012c600c556000600f60146101000a81548160ff021916908360ff1602179055506005600f60156101000a81548160ff021916908360ff1602179055506000600f60166101000a81548160ff0219169083151502179055503480156200009c57600080fd5b506040518060400160405280600681526020017f496e7520414900000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f494e55414900000000000000000000000000000000000000000000000000000081525081600390816200011a919062000793565b5080600490816200012c919062000793565b5050506200014f62000143620001f360201b60201c565b620001fb60201b60201c565b6000600560146101000a81548160ff0219169083151502179055506200017a620002c160201b60201c565b6200019d6200018e620001f360201b60201c565b6008546200033660201b60201c565b620001ad620001f360201b60201c565b600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000a69565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002d1620004a360201b60201c565b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586200031d620001f360201b60201c565b6040516200032c9190620008bf565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620003a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200039f906200093d565b60405180910390fd5b620003bc60008383620004f860201b60201c565b8060026000828254620003d091906200098e565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620004839190620009da565b60405180910390a36200049f60008383620004fd60201b60201c565b5050565b620004b36200050260201b60201c565b15620004f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004ed9062000a47565b60405180910390fd5b565b505050565b505050565b6000600560149054906101000a900460ff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200059b57607f821691505b602082108103620005b157620005b062000553565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200061b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005dc565b620006278683620005dc565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620006746200066e62000668846200063f565b62000649565b6200063f565b9050919050565b6000819050919050565b620006908362000653565b620006a86200069f826200067b565b848454620005e9565b825550505050565b600090565b620006bf620006b0565b620006cc81848462000685565b505050565b5b81811015620006f457620006e8600082620006b5565b600181019050620006d2565b5050565b601f82111562000743576200070d81620005b7565b6200071884620005cc565b8101602085101562000728578190505b620007406200073785620005cc565b830182620006d1565b50505b505050565b600082821c905092915050565b6000620007686000198460080262000748565b1980831691505092915050565b600062000783838362000755565b9150826002028217905092915050565b6200079e8262000519565b67ffffffffffffffff811115620007ba57620007b962000524565b5b620007c6825462000582565b620007d3828285620006f8565b600060209050601f8311600181146200080b5760008415620007f6578287015190505b62000802858262000775565b86555062000872565b601f1984166200081b86620005b7565b60005b8281101562000845578489015182556001820191506020850194506020810190506200081e565b8683101562000865578489015162000861601f89168262000755565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620008a7826200087a565b9050919050565b620008b9816200089a565b82525050565b6000602082019050620008d66000830184620008ae565b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000925601f83620008dc565b91506200093282620008ed565b602082019050919050565b60006020820190508181036000830152620009588162000916565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200099b826200063f565b9150620009a8836200063f565b9250828201905080821115620009c357620009c26200095f565b5b92915050565b620009d4816200063f565b82525050565b6000602082019050620009f16000830184620009c9565b92915050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b600062000a2f601083620008dc565b915062000a3c82620009f7565b602082019050919050565b6000602082019050818103600083015262000a628162000a20565b9050919050565b6136af8062000a796000396000f3fe6080604052600436106101c65760003560e01c8063715018a6116100f7578063a457c2d711610095578063dd62ed3e11610064578063dd62ed3e1461063b578063e4997dc514610678578063ec8490b5146106a1578063f2fde38b146106ca576101cd565b8063a457c2d714610581578063a9059cbb146105be578063c9567bf9146105fb578063d1bdac2414610612576101cd565b80638705fcd4116100d15780638705fcd4146104d95780638bed30b8146105025780638da5cb5b1461052b57806395d89b4114610556576101cd565b8063715018a61461046c578063804fed28146104835780638456cb59146104ae576101cd565b8063313ce5671161016457806351bc3c851161013e57806351bc3c85146103b057806359bf1abe146103c75780635c975abb1461040457806370a082311461042f576101cd565b8063313ce5671461031d57806339509351146103485780633f4ba83a14610385576101cd565b80630ecb93c0116101a05780630ecb93c01461026357806318160ddd1461028c57806323b872dd146102b75780632e773e58146102f4576101cd565b806306fdde03146101d2578063095ea7b3146101fd5780630d4c8ce81461023a576101cd565b366101cd57005b600080fd5b3480156101de57600080fd5b506101e76106f3565b6040516101f491906126de565b60405180910390f35b34801561020957600080fd5b50610224600480360381019061021f9190612799565b610785565b60405161023191906127f4565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c919061280f565b6107a8565b005b34801561026f57600080fd5b5061028a6004803603810190610285919061283c565b6107ba565b005b34801561029857600080fd5b506102a16107ce565b6040516102ae9190612878565b60405180910390f35b3480156102c357600080fd5b506102de60048036038101906102d99190612893565b6107d8565b6040516102eb91906127f4565b60405180910390f35b34801561030057600080fd5b5061031b6004803603810190610316919061280f565b610818565b005b34801561032957600080fd5b5061033261082a565b60405161033f9190612902565b60405180910390f35b34801561035457600080fd5b5061036f600480360381019061036a9190612799565b610833565b60405161037c91906127f4565b60405180910390f35b34801561039157600080fd5b5061039a61086a565b6040516103a791906127f4565b60405180910390f35b3480156103bc57600080fd5b506103c5610883565b005b3480156103d357600080fd5b506103ee60048036038101906103e9919061283c565b610895565b6040516103fb91906127f4565b60405180910390f35b34801561041057600080fd5b506104196108f3565b60405161042691906127f4565b60405180910390f35b34801561043b57600080fd5b506104566004803603810190610451919061283c565b61090a565b6040516104639190612878565b60405180910390f35b34801561047857600080fd5b50610481610952565b005b34801561048f57600080fd5b50610498610966565b6040516104a59190612878565b60405180910390f35b3480156104ba57600080fd5b506104c361097d565b6040516104d091906127f4565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb919061283c565b610996565b005b34801561050e57600080fd5b506105296004803603810190610524919061280f565b6109e2565b005b34801561053757600080fd5b506105406109f4565b60405161054d919061292c565b60405180910390f35b34801561056257600080fd5b5061056b610a1e565b60405161057891906126de565b60405180910390f35b34801561058d57600080fd5b506105a860048036038101906105a39190612799565b610ab0565b6040516105b591906127f4565b60405180910390f35b3480156105ca57600080fd5b506105e560048036038101906105e09190612799565b610b27565b6040516105f291906127f4565b60405180910390f35b34801561060757600080fd5b50610610610b55565b005b34801561061e57600080fd5b506106396004803603810190610634919061280f565b610de3565b005b34801561064757600080fd5b50610662600480360381019061065d9190612947565b610df5565b60405161066f9190612878565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a919061283c565b610e7c565b005b3480156106ad57600080fd5b506106c860048036038101906106c391906129b3565b610f16565b005b3480156106d657600080fd5b506106f160048036038101906106ec919061283c565b610f3c565b005b60606003805461070290612a0f565b80601f016020809104026020016040519081016040528092919081815260200182805461072e90612a0f565b801561077b5780601f106107505761010080835404028352916020019161077b565b820191906000526020600020905b81548152906001019060200180831161075e57829003601f168201915b5050505050905090565b600080610790610fbf565b905061079d818585610fc7565b600191505092915050565b6107b0611190565b80600b8190555050565b6107c2611190565b6107cb8161120e565b50565b6000600254905090565b60006107e26112a0565b6107ea6112ea565b60006107f4610fbf565b9050610801858285611380565b61080c85858561140c565b60019150509392505050565b610820611190565b80600c8190555050565b60006012905090565b60008061083e610fbf565b905061085f8185856108508589610df5565b61085a9190612a6f565b610fc7565b600191505092915050565b6000610874611190565b61087c6119a2565b6001905090565b61088b611190565b610893611a05565b565b600061089f611190565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600560149054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61095a611190565b6109646000611a99565b565b6000610978610973610fbf565b61090a565b905090565b6000610987611190565b61098f611b5f565b6001905090565b61099e611190565b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6109ea611190565b8060098190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610a2d90612a0f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5990612a0f565b8015610aa65780601f10610a7b57610100808354040283529160200191610aa6565b820191906000526020600020905b815481529060010190602001808311610a8957829003601f168201915b5050505050905090565b600080610abb610fbf565b90506000610ac98286610df5565b905083811015610b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0590612b15565b60405180910390fd5b610b1b8286868403610fc7565b60019250505092915050565b6000610b316112a0565b610b396112ea565b610b4b610b44610fbf565b848461140c565b6001905092915050565b610b5d611190565b610b65611bc2565b600760009054906101000a900460ff1615610bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bac90612b81565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610c23610c1a610fbf565b82600854610fc7565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c929190612bb6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1d9190612bb6565b6040518363ffffffff1660e01b8152600401610d3a929190612be3565b6020604051808303816000875af1158015610d59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7d9190612bb6565b600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760006101000a81548160ff021916908315150217905550610de06119a2565b50565b610deb611190565b80600a8190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e84611190565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd7e9ec6e6ecd65492dce6bf513cd6867560d49544421d0783ddf06e76c24470c81604051610f0b919061292c565b60405180910390a150565b610f1e611190565b80600f60156101000a81548160ff021916908360ff16021790555050565b610f44611190565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faa90612c7e565b60405180910390fd5b610fbc81611a99565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d90612d10565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109c90612da2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111839190612878565b60405180910390a3505050565b611198610fbf565b73ffffffffffffffffffffffffffffffffffffffff166111b66109f4565b73ffffffffffffffffffffffffffffffffffffffff161461120c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120390612e0e565b60405180910390fd5b565b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f42e160154868087d6bfdc0ca23d96a1c1cfa32f1b72ba9ba27b69b98a0d819dc81604051611295919061292c565b60405180910390a150565b6112a86108f3565b156112e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112df90612e7a565b60405180910390fd5b565b600660006112f6610fbf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561137e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137590612ec0565b60405180910390fd5b565b600061138c8484610df5565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461140657818110156113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef90612f2c565b60405180910390fd5b6114058484848403610fc7565b5b50505050565b6114146109f4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561147b57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156114d55750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561151457506114e46109f4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561157e57611521611c0b565b61153c8261152e8561090a565b611c1590919063ffffffff16565b111561157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490612fbe565b60405180910390fd5b5b6115866109f4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156115f457506115c46109f4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561162c57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561166457503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156116b457611671611c41565b8111156116b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116aa90613050565b60405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171a906130e2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178990613174565b60405180910390fd5b600081116117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc90613206565b60405180910390fd5b600f60159054906101000a900460ff1660ff16600f60149054906101000a900460ff1660ff16101580156118165750600f60169054906101000a900460ff16155b80156118705750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561187e5761187d611a05565b5b60006001905060003073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806118f257506118c36109f4565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156118fc57600091505b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361195657600190505b600f601481819054906101000a900460ff168092919061197590613226565b91906101000a81548160ff021916908360ff1602179055505061199b8585858585611c4b565b5050505050565b6119aa611bc2565b6000600560146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6119ee610fbf565b6040516119fb919061292c565b60405180910390a1565b6000611a103061090a565b9050600f60169054906101000a900460ff16158015611a2f5750600081115b15611a96576000600f60146101000a81548160ff021916908360ff160217905550611a5981611d32565b60004790506000811115611a9457611a93600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611fab565b5b505b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611b676112a0565b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611bab610fbf565b604051611bb8919061292c565b60405180910390a1565b611bca6108f3565b611c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c009061329b565b60405180910390fd5b565b6000600954905090565b6000808284611c249190612a6f565b905083811015611c3757611c366132bb565b5b8091505092915050565b6000600a54905090565b81611c6057611c5b858585611ff6565b611d2b565b8015611c97576000611c718461226c565b905060008185611c8191906132ea565b9050611c90878787848661229e565b5050611d2a565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611cfc57611cf7858585611ff6565b611d29565b6000611d07846125af565b905060008185611d1791906132ea565b9050611d26878787848661229e565b50505b5b5b5050505050565b6001600f60166101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611d6a57611d6961331e565b5b604051908082528060200260200182016040528015611d985781602001602082028036833780820191505090505b5090503081600081518110611db057611daf61334d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7b9190612bb6565b81600181518110611e8f57611e8e61334d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611ef630600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610fc7565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611f5a95949392919061347f565b600060405180830381600087803b158015611f7457600080fd5b505af1158015611f88573d6000803e3d6000fd5b50505050506000600f60166101000a81548160ff02191690831515021790555050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ff1573d6000803e3d6000fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205c906130e2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cb90613174565b60405180910390fd5b6120df8383836125e1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215c9061354b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122539190612878565b60405180910390a36122668484846125e6565b50505050565b6000612297612710612289600b54856125eb90919063ffffffff16565b61263390919063ffffffff16565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361230d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612304906130e2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361237c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237390613174565b60405180910390fd5b80826123889190612a6f565b83146123c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c0906135b7565b60405180910390fd5b6123d48585856125e1565b60008060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561245a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124519061354b565b60405180910390fd5b8381036000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816000803073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516125949190612878565b60405180910390a36125a78686866125e6565b505050505050565b60006125da6127106125cc600c54856125eb90919063ffffffff16565b61263390919063ffffffff16565b9050919050565b505050565b505050565b60008083036125fd576000905061262d565b6000828461260b91906135d7565b905082848261261a9190613648565b14612628576126276132bb565b5b809150505b92915050565b60008082846126429190613648565b90508091505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561268857808201518184015260208101905061266d565b60008484015250505050565b6000601f19601f8301169050919050565b60006126b08261264e565b6126ba8185612659565b93506126ca81856020860161266a565b6126d381612694565b840191505092915050565b600060208201905081810360008301526126f881846126a5565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061273082612705565b9050919050565b61274081612725565b811461274b57600080fd5b50565b60008135905061275d81612737565b92915050565b6000819050919050565b61277681612763565b811461278157600080fd5b50565b6000813590506127938161276d565b92915050565b600080604083850312156127b0576127af612700565b5b60006127be8582860161274e565b92505060206127cf85828601612784565b9150509250929050565b60008115159050919050565b6127ee816127d9565b82525050565b600060208201905061280960008301846127e5565b92915050565b60006020828403121561282557612824612700565b5b600061283384828501612784565b91505092915050565b60006020828403121561285257612851612700565b5b60006128608482850161274e565b91505092915050565b61287281612763565b82525050565b600060208201905061288d6000830184612869565b92915050565b6000806000606084860312156128ac576128ab612700565b5b60006128ba8682870161274e565b93505060206128cb8682870161274e565b92505060406128dc86828701612784565b9150509250925092565b600060ff82169050919050565b6128fc816128e6565b82525050565b600060208201905061291760008301846128f3565b92915050565b61292681612725565b82525050565b6000602082019050612941600083018461291d565b92915050565b6000806040838503121561295e5761295d612700565b5b600061296c8582860161274e565b925050602061297d8582860161274e565b9150509250929050565b612990816128e6565b811461299b57600080fd5b50565b6000813590506129ad81612987565b92915050565b6000602082840312156129c9576129c8612700565b5b60006129d78482850161299e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612a2757607f821691505b602082108103612a3a57612a396129e0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612a7a82612763565b9150612a8583612763565b9250828201905080821115612a9d57612a9c612a40565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612aff602583612659565b9150612b0a82612aa3565b604082019050919050565b60006020820190508181036000830152612b2e81612af2565b9050919050565b7f54726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b6000612b6b601783612659565b9150612b7682612b35565b602082019050919050565b60006020820190508181036000830152612b9a81612b5e565b9050919050565b600081519050612bb081612737565b92915050565b600060208284031215612bcc57612bcb612700565b5b6000612bda84828501612ba1565b91505092915050565b6000604082019050612bf8600083018561291d565b612c05602083018461291d565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612c68602683612659565b9150612c7382612c0c565b604082019050919050565b60006020820190508181036000830152612c9781612c5b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612cfa602483612659565b9150612d0582612c9e565b604082019050919050565b60006020820190508181036000830152612d2981612ced565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612d8c602283612659565b9150612d9782612d30565b604082019050919050565b60006020820190508181036000830152612dbb81612d7f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612df8602083612659565b9150612e0382612dc2565b602082019050919050565b60006020820190508181036000830152612e2781612deb565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000612e64601083612659565b9150612e6f82612e2e565b602082019050919050565b60006020820190508181036000830152612e9381612e57565b9050919050565b50565b6000612eaa600083612659565b9150612eb582612e9a565b600082019050919050565b60006020820190508181036000830152612ed981612e9d565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612f16601d83612659565b9150612f2182612ee0565b602082019050919050565b60006020820190508181036000830152612f4581612f09565b9050919050565b7f45524332303a20657863656564696e67206e756d626572206f6620746f6b656e60008201527f20666f7220656163682061646472657373000000000000000000000000000000602082015250565b6000612fa8603183612659565b9150612fb382612f4c565b604082019050919050565b60006020820190508181036000830152612fd781612f9b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742061626f7665206c696d60008201527f697420666f722065616368207472616e73616374696f6e000000000000000000602082015250565b600061303a603783612659565b915061304582612fde565b604082019050919050565b600060208201905081810360008301526130698161302d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006130cc602583612659565b91506130d782613070565b604082019050919050565b600060208201905081810360008301526130fb816130bf565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061315e602383612659565b915061316982613102565b604082019050919050565b6000602082019050818103600083015261318d81613151565b9050919050565b7f45524332303a20546f6b656e20616d6f756e74207472616e73666572206d757360008201527f7420626520686967686572207468616e207a65726f2e00000000000000000000602082015250565b60006131f0603683612659565b91506131fb82613194565b604082019050919050565b6000602082019050818103600083015261321f816131e3565b9050919050565b6000613231826128e6565b915060ff820361324457613243612a40565b5b600182019050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000613285601483612659565b91506132908261324f565b602082019050919050565b600060208201905081810360008301526132b481613278565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006132f582612763565b915061330083612763565b925082820390508181111561331857613317612a40565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b60006133ab6133a66133a18461337c565b613386565b612763565b9050919050565b6133bb81613390565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6133f681612725565b82525050565b600061340883836133ed565b60208301905092915050565b6000602082019050919050565b600061342c826133c1565b61343681856133cc565b9350613441836133dd565b8060005b8381101561347257815161345988826133fc565b975061346483613414565b925050600181019050613445565b5085935050505092915050565b600060a0820190506134946000830188612869565b6134a160208301876133b2565b81810360408301526134b38186613421565b90506134c2606083018561291d565b6134cf6080830184612869565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613535602683612659565b9150613540826134d9565b604082019050919050565b6000602082019050818103600083015261356481613528565b9050919050565b7f45524332303a206665652063616c63756c6174696f6e20696e636f7272656374600082015250565b60006135a1602083612659565b91506135ac8261356b565b602082019050919050565b600060208201905081810360008301526135d081613594565b9050919050565b60006135e282612763565b91506135ed83612763565b92508282026135fb81612763565b9150828204841483151761361257613611612a40565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061365382612763565b915061365e83612763565b92508261366e5761366d613619565b5b82820490509291505056fea264697066735822122042735227abfbc1320bd97a244a0751a9f4072af346fbc8082f56fdf034aaf50464736f6c63430008110033

Deployed Bytecode

0x6080604052600436106101c65760003560e01c8063715018a6116100f7578063a457c2d711610095578063dd62ed3e11610064578063dd62ed3e1461063b578063e4997dc514610678578063ec8490b5146106a1578063f2fde38b146106ca576101cd565b8063a457c2d714610581578063a9059cbb146105be578063c9567bf9146105fb578063d1bdac2414610612576101cd565b80638705fcd4116100d15780638705fcd4146104d95780638bed30b8146105025780638da5cb5b1461052b57806395d89b4114610556576101cd565b8063715018a61461046c578063804fed28146104835780638456cb59146104ae576101cd565b8063313ce5671161016457806351bc3c851161013e57806351bc3c85146103b057806359bf1abe146103c75780635c975abb1461040457806370a082311461042f576101cd565b8063313ce5671461031d57806339509351146103485780633f4ba83a14610385576101cd565b80630ecb93c0116101a05780630ecb93c01461026357806318160ddd1461028c57806323b872dd146102b75780632e773e58146102f4576101cd565b806306fdde03146101d2578063095ea7b3146101fd5780630d4c8ce81461023a576101cd565b366101cd57005b600080fd5b3480156101de57600080fd5b506101e76106f3565b6040516101f491906126de565b60405180910390f35b34801561020957600080fd5b50610224600480360381019061021f9190612799565b610785565b60405161023191906127f4565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c919061280f565b6107a8565b005b34801561026f57600080fd5b5061028a6004803603810190610285919061283c565b6107ba565b005b34801561029857600080fd5b506102a16107ce565b6040516102ae9190612878565b60405180910390f35b3480156102c357600080fd5b506102de60048036038101906102d99190612893565b6107d8565b6040516102eb91906127f4565b60405180910390f35b34801561030057600080fd5b5061031b6004803603810190610316919061280f565b610818565b005b34801561032957600080fd5b5061033261082a565b60405161033f9190612902565b60405180910390f35b34801561035457600080fd5b5061036f600480360381019061036a9190612799565b610833565b60405161037c91906127f4565b60405180910390f35b34801561039157600080fd5b5061039a61086a565b6040516103a791906127f4565b60405180910390f35b3480156103bc57600080fd5b506103c5610883565b005b3480156103d357600080fd5b506103ee60048036038101906103e9919061283c565b610895565b6040516103fb91906127f4565b60405180910390f35b34801561041057600080fd5b506104196108f3565b60405161042691906127f4565b60405180910390f35b34801561043b57600080fd5b506104566004803603810190610451919061283c565b61090a565b6040516104639190612878565b60405180910390f35b34801561047857600080fd5b50610481610952565b005b34801561048f57600080fd5b50610498610966565b6040516104a59190612878565b60405180910390f35b3480156104ba57600080fd5b506104c361097d565b6040516104d091906127f4565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb919061283c565b610996565b005b34801561050e57600080fd5b506105296004803603810190610524919061280f565b6109e2565b005b34801561053757600080fd5b506105406109f4565b60405161054d919061292c565b60405180910390f35b34801561056257600080fd5b5061056b610a1e565b60405161057891906126de565b60405180910390f35b34801561058d57600080fd5b506105a860048036038101906105a39190612799565b610ab0565b6040516105b591906127f4565b60405180910390f35b3480156105ca57600080fd5b506105e560048036038101906105e09190612799565b610b27565b6040516105f291906127f4565b60405180910390f35b34801561060757600080fd5b50610610610b55565b005b34801561061e57600080fd5b506106396004803603810190610634919061280f565b610de3565b005b34801561064757600080fd5b50610662600480360381019061065d9190612947565b610df5565b60405161066f9190612878565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a919061283c565b610e7c565b005b3480156106ad57600080fd5b506106c860048036038101906106c391906129b3565b610f16565b005b3480156106d657600080fd5b506106f160048036038101906106ec919061283c565b610f3c565b005b60606003805461070290612a0f565b80601f016020809104026020016040519081016040528092919081815260200182805461072e90612a0f565b801561077b5780601f106107505761010080835404028352916020019161077b565b820191906000526020600020905b81548152906001019060200180831161075e57829003601f168201915b5050505050905090565b600080610790610fbf565b905061079d818585610fc7565b600191505092915050565b6107b0611190565b80600b8190555050565b6107c2611190565b6107cb8161120e565b50565b6000600254905090565b60006107e26112a0565b6107ea6112ea565b60006107f4610fbf565b9050610801858285611380565b61080c85858561140c565b60019150509392505050565b610820611190565b80600c8190555050565b60006012905090565b60008061083e610fbf565b905061085f8185856108508589610df5565b61085a9190612a6f565b610fc7565b600191505092915050565b6000610874611190565b61087c6119a2565b6001905090565b61088b611190565b610893611a05565b565b600061089f611190565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600560149054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61095a611190565b6109646000611a99565b565b6000610978610973610fbf565b61090a565b905090565b6000610987611190565b61098f611b5f565b6001905090565b61099e611190565b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6109ea611190565b8060098190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610a2d90612a0f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5990612a0f565b8015610aa65780601f10610a7b57610100808354040283529160200191610aa6565b820191906000526020600020905b815481529060010190602001808311610a8957829003601f168201915b5050505050905090565b600080610abb610fbf565b90506000610ac98286610df5565b905083811015610b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0590612b15565b60405180910390fd5b610b1b8286868403610fc7565b60019250505092915050565b6000610b316112a0565b610b396112ea565b610b4b610b44610fbf565b848461140c565b6001905092915050565b610b5d611190565b610b65611bc2565b600760009054906101000a900460ff1615610bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bac90612b81565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610c23610c1a610fbf565b82600854610fc7565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c929190612bb6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1d9190612bb6565b6040518363ffffffff1660e01b8152600401610d3a929190612be3565b6020604051808303816000875af1158015610d59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7d9190612bb6565b600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760006101000a81548160ff021916908315150217905550610de06119a2565b50565b610deb611190565b80600a8190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e84611190565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd7e9ec6e6ecd65492dce6bf513cd6867560d49544421d0783ddf06e76c24470c81604051610f0b919061292c565b60405180910390a150565b610f1e611190565b80600f60156101000a81548160ff021916908360ff16021790555050565b610f44611190565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faa90612c7e565b60405180910390fd5b610fbc81611a99565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102d90612d10565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109c90612da2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111839190612878565b60405180910390a3505050565b611198610fbf565b73ffffffffffffffffffffffffffffffffffffffff166111b66109f4565b73ffffffffffffffffffffffffffffffffffffffff161461120c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120390612e0e565b60405180910390fd5b565b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f42e160154868087d6bfdc0ca23d96a1c1cfa32f1b72ba9ba27b69b98a0d819dc81604051611295919061292c565b60405180910390a150565b6112a86108f3565b156112e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112df90612e7a565b60405180910390fd5b565b600660006112f6610fbf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561137e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137590612ec0565b60405180910390fd5b565b600061138c8484610df5565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461140657818110156113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef90612f2c565b60405180910390fd5b6114058484848403610fc7565b5b50505050565b6114146109f4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561147b57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156114d55750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561151457506114e46109f4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561157e57611521611c0b565b61153c8261152e8561090a565b611c1590919063ffffffff16565b111561157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490612fbe565b60405180910390fd5b5b6115866109f4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156115f457506115c46109f4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561162c57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561166457503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156116b457611671611c41565b8111156116b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116aa90613050565b60405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171a906130e2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178990613174565b60405180910390fd5b600081116117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc90613206565b60405180910390fd5b600f60159054906101000a900460ff1660ff16600f60149054906101000a900460ff1660ff16101580156118165750600f60169054906101000a900460ff16155b80156118705750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561187e5761187d611a05565b5b60006001905060003073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806118f257506118c36109f4565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156118fc57600091505b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361195657600190505b600f601481819054906101000a900460ff168092919061197590613226565b91906101000a81548160ff021916908360ff1602179055505061199b8585858585611c4b565b5050505050565b6119aa611bc2565b6000600560146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6119ee610fbf565b6040516119fb919061292c565b60405180910390a1565b6000611a103061090a565b9050600f60169054906101000a900460ff16158015611a2f5750600081115b15611a96576000600f60146101000a81548160ff021916908360ff160217905550611a5981611d32565b60004790506000811115611a9457611a93600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611fab565b5b505b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611b676112a0565b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611bab610fbf565b604051611bb8919061292c565b60405180910390a1565b611bca6108f3565b611c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c009061329b565b60405180910390fd5b565b6000600954905090565b6000808284611c249190612a6f565b905083811015611c3757611c366132bb565b5b8091505092915050565b6000600a54905090565b81611c6057611c5b858585611ff6565b611d2b565b8015611c97576000611c718461226c565b905060008185611c8191906132ea565b9050611c90878787848661229e565b5050611d2a565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611cfc57611cf7858585611ff6565b611d29565b6000611d07846125af565b905060008185611d1791906132ea565b9050611d26878787848661229e565b50505b5b5b5050505050565b6001600f60166101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611d6a57611d6961331e565b5b604051908082528060200260200182016040528015611d985781602001602082028036833780820191505090505b5090503081600081518110611db057611daf61334d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7b9190612bb6565b81600181518110611e8f57611e8e61334d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611ef630600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610fc7565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611f5a95949392919061347f565b600060405180830381600087803b158015611f7457600080fd5b505af1158015611f88573d6000803e3d6000fd5b50505050506000600f60166101000a81548160ff02191690831515021790555050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ff1573d6000803e3d6000fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205c906130e2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cb90613174565b60405180910390fd5b6120df8383836125e1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215c9061354b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122539190612878565b60405180910390a36122668484846125e6565b50505050565b6000612297612710612289600b54856125eb90919063ffffffff16565b61263390919063ffffffff16565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361230d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612304906130e2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361237c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237390613174565b60405180910390fd5b80826123889190612a6f565b83146123c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c0906135b7565b60405180910390fd5b6123d48585856125e1565b60008060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561245a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124519061354b565b60405180910390fd5b8381036000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816000803073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516125949190612878565b60405180910390a36125a78686866125e6565b505050505050565b60006125da6127106125cc600c54856125eb90919063ffffffff16565b61263390919063ffffffff16565b9050919050565b505050565b505050565b60008083036125fd576000905061262d565b6000828461260b91906135d7565b905082848261261a9190613648565b14612628576126276132bb565b5b809150505b92915050565b60008082846126429190613648565b90508091505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561268857808201518184015260208101905061266d565b60008484015250505050565b6000601f19601f8301169050919050565b60006126b08261264e565b6126ba8185612659565b93506126ca81856020860161266a565b6126d381612694565b840191505092915050565b600060208201905081810360008301526126f881846126a5565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061273082612705565b9050919050565b61274081612725565b811461274b57600080fd5b50565b60008135905061275d81612737565b92915050565b6000819050919050565b61277681612763565b811461278157600080fd5b50565b6000813590506127938161276d565b92915050565b600080604083850312156127b0576127af612700565b5b60006127be8582860161274e565b92505060206127cf85828601612784565b9150509250929050565b60008115159050919050565b6127ee816127d9565b82525050565b600060208201905061280960008301846127e5565b92915050565b60006020828403121561282557612824612700565b5b600061283384828501612784565b91505092915050565b60006020828403121561285257612851612700565b5b60006128608482850161274e565b91505092915050565b61287281612763565b82525050565b600060208201905061288d6000830184612869565b92915050565b6000806000606084860312156128ac576128ab612700565b5b60006128ba8682870161274e565b93505060206128cb8682870161274e565b92505060406128dc86828701612784565b9150509250925092565b600060ff82169050919050565b6128fc816128e6565b82525050565b600060208201905061291760008301846128f3565b92915050565b61292681612725565b82525050565b6000602082019050612941600083018461291d565b92915050565b6000806040838503121561295e5761295d612700565b5b600061296c8582860161274e565b925050602061297d8582860161274e565b9150509250929050565b612990816128e6565b811461299b57600080fd5b50565b6000813590506129ad81612987565b92915050565b6000602082840312156129c9576129c8612700565b5b60006129d78482850161299e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612a2757607f821691505b602082108103612a3a57612a396129e0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612a7a82612763565b9150612a8583612763565b9250828201905080821115612a9d57612a9c612a40565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612aff602583612659565b9150612b0a82612aa3565b604082019050919050565b60006020820190508181036000830152612b2e81612af2565b9050919050565b7f54726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b6000612b6b601783612659565b9150612b7682612b35565b602082019050919050565b60006020820190508181036000830152612b9a81612b5e565b9050919050565b600081519050612bb081612737565b92915050565b600060208284031215612bcc57612bcb612700565b5b6000612bda84828501612ba1565b91505092915050565b6000604082019050612bf8600083018561291d565b612c05602083018461291d565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612c68602683612659565b9150612c7382612c0c565b604082019050919050565b60006020820190508181036000830152612c9781612c5b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612cfa602483612659565b9150612d0582612c9e565b604082019050919050565b60006020820190508181036000830152612d2981612ced565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612d8c602283612659565b9150612d9782612d30565b604082019050919050565b60006020820190508181036000830152612dbb81612d7f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612df8602083612659565b9150612e0382612dc2565b602082019050919050565b60006020820190508181036000830152612e2781612deb565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000612e64601083612659565b9150612e6f82612e2e565b602082019050919050565b60006020820190508181036000830152612e9381612e57565b9050919050565b50565b6000612eaa600083612659565b9150612eb582612e9a565b600082019050919050565b60006020820190508181036000830152612ed981612e9d565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612f16601d83612659565b9150612f2182612ee0565b602082019050919050565b60006020820190508181036000830152612f4581612f09565b9050919050565b7f45524332303a20657863656564696e67206e756d626572206f6620746f6b656e60008201527f20666f7220656163682061646472657373000000000000000000000000000000602082015250565b6000612fa8603183612659565b9150612fb382612f4c565b604082019050919050565b60006020820190508181036000830152612fd781612f9b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742061626f7665206c696d60008201527f697420666f722065616368207472616e73616374696f6e000000000000000000602082015250565b600061303a603783612659565b915061304582612fde565b604082019050919050565b600060208201905081810360008301526130698161302d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006130cc602583612659565b91506130d782613070565b604082019050919050565b600060208201905081810360008301526130fb816130bf565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061315e602383612659565b915061316982613102565b604082019050919050565b6000602082019050818103600083015261318d81613151565b9050919050565b7f45524332303a20546f6b656e20616d6f756e74207472616e73666572206d757360008201527f7420626520686967686572207468616e207a65726f2e00000000000000000000602082015250565b60006131f0603683612659565b91506131fb82613194565b604082019050919050565b6000602082019050818103600083015261321f816131e3565b9050919050565b6000613231826128e6565b915060ff820361324457613243612a40565b5b600182019050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000613285601483612659565b91506132908261324f565b602082019050919050565b600060208201905081810360008301526132b481613278565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006132f582612763565b915061330083612763565b925082820390508181111561331857613317612a40565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b60006133ab6133a66133a18461337c565b613386565b612763565b9050919050565b6133bb81613390565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6133f681612725565b82525050565b600061340883836133ed565b60208301905092915050565b6000602082019050919050565b600061342c826133c1565b61343681856133cc565b9350613441836133dd565b8060005b8381101561347257815161345988826133fc565b975061346483613414565b925050600181019050613445565b5085935050505092915050565b600060a0820190506134946000830188612869565b6134a160208301876133b2565b81810360408301526134b38186613421565b90506134c2606083018561291d565b6134cf6080830184612869565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613535602683612659565b9150613540826134d9565b604082019050919050565b6000602082019050818103600083015261356481613528565b9050919050565b7f45524332303a206665652063616c63756c6174696f6e20696e636f7272656374600082015250565b60006135a1602083612659565b91506135ac8261356b565b602082019050919050565b600060208201905081810360008301526135d081613594565b9050919050565b60006135e282612763565b91506135ed83612763565b92508282026135fb81612763565b9150828204841483151761361257613611612a40565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061365382612763565b915061365e83612763565b92508261366e5761366d613619565b5b82820490509291505056fea264697066735822122042735227abfbc1320bd97a244a0751a9f4072af346fbc8082f56fdf034aaf50464736f6c63430008110033

Deployed Bytecode Sourcemap

23678:7276:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11290:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13641:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24723:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8184:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12410:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25943:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24848:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12252:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15126:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25582:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30242:77;;;;;;;;;;;;;:::i;:::-;;7779:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9528:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12581:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6633:103;;;;;;;;;;;;;:::i;:::-;;24566;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25468:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25304:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24975:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5985:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11509:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15867:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25741:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30403:548;;;;;;;;;;;;;:::i;:::-;;25086:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13170:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8296:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25196:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6891:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11290:100;11344:13;11377:5;11370:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11290:100;:::o;13641:201::-;13724:4;13741:13;13757:12;:10;:12::i;:::-;13741:28;;13780:32;13789:5;13796:7;13805:6;13780:8;:32::i;:::-;13830:4;13823:11;;;13641:201;;;;:::o;24723:117::-;5871:13;:11;:13::i;:::-;24822:10:::1;24802:17;:30;;;;24723:117:::0;:::o;8184:104::-;5871:13;:11;:13::i;:::-;8256:24:::1;8270:9;8256:13;:24::i;:::-;8184:104:::0;:::o;12410:108::-;12471:7;12498:12;;12491:19;;12410:108;:::o;25943:327::-;26103:4;9133:19;:17;:19::i;:::-;7734:17:::1;:15;:17::i;:::-;26119:15:::2;26137:12;:10;:12::i;:::-;26119:30;;26160:38;26176:4;26182:7;26191:6;26160:15;:38::i;:::-;26209:31;26223:4;26229:2;26233:6;26209:13;:31::i;:::-;26258:4;26251:11;;;25943:327:::0;;;;;:::o;24848:119::-;5871:13;:11;:13::i;:::-;24949:10:::1;24928:18;:31;;;;24848:119:::0;:::o;12252:93::-;12310:5;12335:2;12328:9;;12252:93;:::o;15126:238::-;15214:4;15231:13;15247:12;:10;:12::i;:::-;15231:28;;15270:64;15279:5;15286:7;15323:10;15295:25;15305:5;15312:7;15295:9;:25::i;:::-;:38;;;;:::i;:::-;15270:8;:64::i;:::-;15352:4;15345:11;;;15126:238;;;;:::o;25582:110::-;25635:4;5871:13;:11;:13::i;:::-;25652:10:::1;:8;:10::i;:::-;25680:4;25673:11;;25582:110:::0;:::o;30242:77::-;5871:13;:11;:13::i;:::-;30292:19:::1;:17;:19::i;:::-;30242:77::o:0;7779:130::-;7856:4;5871:13;:11;:13::i;:::-;7880::::1;:21;7894:6;7880:21;;;;;;;;;;;;;;;;;;;;;;;;;7873:28;;7779:130:::0;;;:::o;9528:86::-;9575:4;9599:7;;;;;;;;;;;9592:14;;9528:86;:::o;12581:127::-;12655:7;12682:9;:18;12692:7;12682:18;;;;;;;;;;;;;;;;12675:25;;12581:127;;;:::o;6633:103::-;5871:13;:11;:13::i;:::-;6698:30:::1;6725:1;6698:18;:30::i;:::-;6633:103::o:0;24566:::-;24612:7;24638:23;24648:12;:10;:12::i;:::-;24638:9;:23::i;:::-;24631:30;;24566:103;:::o;25468:106::-;25519:4;5871:13;:11;:13::i;:::-;25536:8:::1;:6;:8::i;:::-;25562:4;25555:11;;25468:106:::0;:::o;25304:113::-;5871:13;:11;:13::i;:::-;25399:9:::1;25374:14;;:35;;;;;;;;;;;;;;;;;;25304:113:::0;:::o;24975:103::-;5871:13;:11;:13::i;:::-;25067:3:::1;25038:26;:32;;;;24975:103:::0;:::o;5985:87::-;6031:7;6058:6;;;;;;;;;;;6051:13;;5985:87;:::o;11509:104::-;11565:13;11598:7;11591:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11509:104;:::o;15867:436::-;15960:4;15977:13;15993:12;:10;:12::i;:::-;15977:28;;16016:24;16043:25;16053:5;16060:7;16043:9;:25::i;:::-;16016:52;;16107:15;16087:16;:35;;16079:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;16200:60;16209:5;16216:7;16244:15;16225:16;:34;16200:8;:60::i;:::-;16291:4;16284:11;;;;15867:436;;;;:::o;25741:194::-;25849:4;9133:19;:17;:19::i;:::-;7734:17:::1;:15;:17::i;:::-;25866:39:::2;25880:12;:10;:12::i;:::-;25894:2;25898:6;25866:13;:39::i;:::-;25923:4;25916:11;;25741:194:::0;;;;:::o;30403:548::-;5871:13;:11;:13::i;:::-;9392:16:::1;:14;:16::i;:::-;30476:11:::2;;;;;;;;;;;30475:12;30467:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;30525:35;30596:42;30525:124;;30678:16;30660:15;;:34;;;;;;;;;;;;;;;;;;30705:65;30714:12;:10;:12::i;:::-;30736:16;30755:14;;30705:8;:65::i;:::-;30815:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30797:56;;;30862:4;30869:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30797:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30781:13;;:112;;;;;;;;;;;;;;;;;;30918:4;30904:11;;:18;;;;;;;;;;;;;;;;;;30933:10;:8;:10::i;:::-;30456:495;30403:548::o:0;25086:102::-;5871:13;:11;:13::i;:::-;25177:3:::1;25153:21;:27;;;;25086:102:::0;:::o;13170:151::-;13259:7;13286:11;:18;13298:5;13286:18;;;;;;;;;;;;;;;:27;13305:7;13286:27;;;;;;;;;;;;;;;;13279:34;;13170:151;;;;:::o;8296:165::-;5871:13;:11;:13::i;:::-;8402:5:::1;8372:13;:27;8386:12;8372:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;8423:30;8440:12;8423:30;;;;;;:::i;:::-;;;;;;;;8296:165:::0;:::o;25196:100::-;5871:13;:11;:13::i;:::-;25281:7:::1;25267:11;;:21;;;;;;;;;;;;;;;;;;25196:100:::0;:::o;6891:201::-;5871:13;:11;:13::i;:::-;7000:1:::1;6980:22;;:8;:22;;::::0;6972:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7056:28;7075:8;7056:18;:28::i;:::-;6891:201:::0;:::o;5201:98::-;5254:7;5281:10;5274:17;;5201:98;:::o;21094:380::-;21247:1;21230:19;;:5;:19;;;21222:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21328:1;21309:21;;:7;:21;;;21301:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21412:6;21382:11;:18;21394:5;21382:18;;;;;;;;;;;;;;;:27;21401:7;21382:27;;;;;;;;;;;;;;;:36;;;;21450:7;21434:32;;21443:5;21434:32;;;21459:6;21434:32;;;;;;:::i;:::-;;;;;;;;21094:380;;;:::o;6150:132::-;6225:12;:10;:12::i;:::-;6214:23;;:7;:5;:7::i;:::-;:23;;;6206:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6150:132::o;8034:142::-;8123:4;8096:13;:24;8110:9;8096:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;8143:25;8158:9;8143:25;;;;;;:::i;:::-;;;;;;;;8034:142;:::o;9687:108::-;9758:8;:6;:8::i;:::-;9757:9;9749:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;9687:108::o;7917:109::-;7986:13;:27;8000:12;:10;:12::i;:::-;7986:27;;;;;;;;;;;;;;;;;;;;;;;;;7985:28;7977:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;7917:109::o;21765:453::-;21900:24;21927:25;21937:5;21944:7;21927:9;:25::i;:::-;21900:52;;21987:17;21967:16;:37;21963:248;;22049:6;22029:16;:26;;22021:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22133:51;22142:5;22149:7;22177:6;22158:16;:25;22133:8;:51::i;:::-;21963:248;21889:329;21765:453;;;:::o;27698:1303::-;27793:7;:5;:7::i;:::-;27787:13;;:2;:13;;;;:49;;;;;27831:4;27817:19;;:2;:19;;;;27787:49;:85;;;;;27859:13;;;;;;;;;;;27853:19;;:2;:19;;;;27787:85;:117;;;;;27897:7;:5;:7::i;:::-;27889:15;;:4;:15;;;;27787:117;27783:260;;;27961:16;:14;:16::i;:::-;27932:25;27950:6;27932:13;27942:2;27932:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;:45;;27924:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;27783:260;28067:7;:5;:7::i;:::-;28059:15;;:4;:15;;;;:32;;;;;28084:7;:5;:7::i;:::-;28078:13;;:2;:13;;;;28059:32;:57;;;;;28111:4;28095:21;;:4;:21;;;;28059:57;:80;;;;;28134:4;28120:19;;:2;:19;;;;28059:80;28055:197;;;28172:20;:18;:20::i;:::-;28162:6;:30;;28154:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;28055:197;28297:1;28281:18;;:4;:18;;;28273:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28374:1;28360:16;;:2;:16;;;28352:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28444:1;28435:6;:10;28427:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;28546:11;;;;;;;;;;;28535:22;;:7;;;;;;;;;;;:22;;;;:46;;;;;28575:6;;;;;;;;;;;28574:7;28535:46;:84;;;;;28606:13;;;;;;;;;;;28598:21;;:4;:21;;;;28535:84;28517:160;;;28646:19;:17;:19::i;:::-;28517:160;28689:12;28704:4;28689:19;;28719:10;28762:4;28746:21;;:4;:21;;;:40;;;;28779:7;:5;:7::i;:::-;28771:15;;:4;:15;;;28746:40;28742:87;;;28812:5;28802:15;;28742:87;28851:13;;;;;;;;;;;28843:21;;:4;:21;;;28839:66;;28889:4;28881:12;;28839:66;28925:7;;:9;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;28945:48;28960:4;28966:2;28970:6;28978:7;28987:5;28945:14;:48::i;:::-;27772:1229;;27698:1303;;;:::o;10383:120::-;9392:16;:14;:16::i;:::-;10452:5:::1;10442:7;;:15;;;;;;;;;;;;;;;;;;10473:22;10482:12;:10;:12::i;:::-;10473:22;;;;;;:::i;:::-;;;;;;;;10383:120::o:0;29758:476::-;29809:28;29840:24;29858:4;29840:9;:24::i;:::-;29809:55;;29884:6;;;;;;;;;;;29883:7;:33;;;;;29915:1;29894:20;:22;29883:33;29879:348;;;29947:1;29937:7;;:11;;;;;;;;;;;;;;;;;;29967:38;29984:20;29967:16;:38::i;:::-;30024:26;30053:21;30024:50;;30118:1;30097:18;:22;30093:119;;;30144:48;30157:14;;;;;;;;;;;30173:18;30144:12;:48::i;:::-;30093:119;29918:309;29879:348;29794:440;29758:476::o;7252:191::-;7326:16;7345:6;;;;;;;;;;;7326:25;;7371:8;7362:6;;:17;;;;;;;;;;;;;;;;;;7426:8;7395:40;;7416:8;7395:40;;;;;;;;;;;;7315:128;7252:191;:::o;10124:118::-;9133:19;:17;:19::i;:::-;10194:4:::1;10184:7;;:14;;;;;;;;;;;;;;;;;;10214:20;10221:12;:10;:12::i;:::-;10214:20;;;;;;:::i;:::-;;;;;;;;10124:118::o:0;9872:108::-;9939:8;:6;:8::i;:::-;9931:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;9872:108::o;26321:110::-;26370:7;26397:26;;26390:33;;26321:110;:::o;661:147::-;719:7;739:9;755:1;751;:5;;;;:::i;:::-;739:17;;779:1;774;:6;;767:14;;;;:::i;:::-;;799:1;792:8;;;661:147;;;;:::o;26439:109::-;26492:7;26519:21;;26512:28;;26439:109;:::o;26880:790::-;26997:7;26992:671;;27021:27;27031:4;27037:2;27041:6;27021:9;:27::i;:::-;26992:671;;;27079:5;27075:588;;;27100:17;27120:27;27140:6;27120:19;:27::i;:::-;27100:47;;27162:22;27196:9;27187:6;:18;;;;:::i;:::-;27162:43;;27220:61;27237:4;27243:2;27247:6;27255:14;27271:9;27220:16;:61::i;:::-;27085:208;;27075:588;;;27332:13;;;;;;;;;;;27326:19;;:2;:19;;;27322:330;;27366:27;27376:4;27382:2;27386:6;27366:9;:27::i;:::-;27322:330;;;27446:17;27466:28;27487:6;27466:20;:28::i;:::-;27446:48;;27513:22;27547:9;27538:6;:18;;;;:::i;:::-;27513:43;;27575:61;27592:4;27598:2;27602:6;27610:14;27626:9;27575:16;:61::i;:::-;27427:225;;27322:330;27075:588;26992:671;26880:790;;;;;:::o;29148:482::-;29091:4;29082:6;;:13;;;;;;;;;;;;;;;;;;29225:21:::1;29263:1;29249:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29225:40;;29294:4;29276;29281:1;29276:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;29320:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29310:4;29315:1;29310:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;29353:62;29370:4;29385:15;;;;;;;;;;;29403:11;29353:8;:62::i;:::-;29426:15;;;;;;;;;;;:66;;;29507:11;29533:1;29549:4;29576;29596:15;29426:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29214:416;29127:5:::0;29118:6;;:14;;;;;;;;;;;;;;;;;;29148:482;:::o;29638:112::-;29719:6;:15;;:23;29735:6;29719:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29638:112;;:::o;16773:840::-;16920:1;16904:18;;:4;:18;;;16896:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16997:1;16983:16;;:2;:16;;;16975:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;17052:38;17073:4;17079:2;17083:6;17052:20;:38::i;:::-;17103:19;17125:9;:15;17135:4;17125:15;;;;;;;;;;;;;;;;17103:37;;17174:6;17159:11;:21;;17151:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;17291:6;17277:11;:20;17259:9;:15;17269:4;17259:15;;;;;;;;;;;;;;;:38;;;;17494:6;17477:9;:13;17487:2;17477:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;17544:2;17529:26;;17538:4;17529:26;;;17548:6;17529:26;;;;;;:::i;:::-;;;;;;;;17568:37;17588:4;17594:2;17598:6;17568:19;:37::i;:::-;16885:728;16773:840;;;:::o;26556:143::-;26624:7;26651:40;26685:5;26651:29;26662:17;;26651:6;:10;;:29;;;;:::i;:::-;:33;;:40;;;;:::i;:::-;26644:47;;26556:143;;;:::o;17658:1050::-;17867:1;17851:18;;:4;:18;;;17843:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17944:1;17930:16;;:2;:16;;;17922:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;18032:3;18015:14;:20;;;;:::i;:::-;18005:6;:30;17997:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;18085:38;18106:4;18112:2;18116:6;18085:20;:38::i;:::-;18136:19;18158:9;:15;18168:4;18158:15;;;;;;;;;;;;;;;;18136:37;;18207:6;18192:11;:21;;18184:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;18324:6;18310:11;:20;18292:9;:15;18302:4;18292:15;;;;;;;;;;;;;;;:38;;;;18527:14;18510:9;:13;18520:2;18510:13;;;;;;;;;;;;;;;;:31;;;;;;;;;;;18584:3;18556:9;:24;18574:4;18556:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;18631:2;18616:34;;18625:4;18616:34;;;18635:14;18616:34;;;;;;:::i;:::-;;;;;;;;18663:37;18683:4;18689:2;18693:6;18663:19;:37::i;:::-;17832:876;17658:1050;;;;;:::o;26707:145::-;26776:7;26803:41;26838:5;26803:30;26814:18;;26803:6;:10;;:30;;;;:::i;:::-;:34;;:41;;;;:::i;:::-;26796:48;;26707:145;;;:::o;22818:125::-;;;;:::o;23547:124::-;;;;:::o;184:208::-;242:7;271:1;266;:6;262:47;;296:1;289:8;;;;262:47;319:9;335:1;331;:5;;;;:::i;:::-;319:17;;363:1;358;354;:5;;;;:::i;:::-;:10;347:18;;;;:::i;:::-;;383:1;376:8;;;184:208;;;;;:::o;400:122::-;458:7;478:9;494:1;490;:5;;;;:::i;:::-;478:17;;513:1;506:8;;;400:122;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:::-;3840:6;3889:2;3877:9;3868:7;3864:23;3860:32;3857:119;;;3895:79;;:::i;:::-;3857:119;4015:1;4040:53;4085:7;4076:6;4065:9;4061:22;4040:53;:::i;:::-;4030:63;;3986:117;3781:329;;;;:::o;4116:118::-;4203:24;4221:5;4203:24;:::i;:::-;4198:3;4191:37;4116:118;;:::o;4240:222::-;4333:4;4371:2;4360:9;4356:18;4348:26;;4384:71;4452:1;4441:9;4437:17;4428:6;4384:71;:::i;:::-;4240:222;;;;:::o;4468:619::-;4545:6;4553;4561;4610:2;4598:9;4589:7;4585:23;4581:32;4578:119;;;4616:79;;:::i;:::-;4578:119;4736:1;4761:53;4806:7;4797:6;4786:9;4782:22;4761:53;:::i;:::-;4751:63;;4707:117;4863:2;4889:53;4934:7;4925:6;4914:9;4910:22;4889:53;:::i;:::-;4879:63;;4834:118;4991:2;5017:53;5062:7;5053:6;5042:9;5038:22;5017:53;:::i;:::-;5007:63;;4962:118;4468:619;;;;;:::o;5093:86::-;5128:7;5168:4;5161:5;5157:16;5146:27;;5093:86;;;:::o;5185:112::-;5268:22;5284:5;5268:22;:::i;:::-;5263:3;5256:35;5185:112;;:::o;5303:214::-;5392:4;5430:2;5419:9;5415:18;5407:26;;5443:67;5507:1;5496:9;5492:17;5483:6;5443:67;:::i;:::-;5303:214;;;;:::o;5523:118::-;5610:24;5628:5;5610:24;:::i;:::-;5605:3;5598:37;5523:118;;:::o;5647:222::-;5740:4;5778:2;5767:9;5763:18;5755:26;;5791:71;5859:1;5848:9;5844:17;5835:6;5791:71;:::i;:::-;5647:222;;;;:::o;5875:474::-;5943:6;5951;6000:2;5988:9;5979:7;5975:23;5971:32;5968:119;;;6006:79;;:::i;:::-;5968:119;6126:1;6151:53;6196:7;6187:6;6176:9;6172:22;6151:53;:::i;:::-;6141:63;;6097:117;6253:2;6279:53;6324:7;6315:6;6304:9;6300:22;6279:53;:::i;:::-;6269:63;;6224:118;5875:474;;;;;:::o;6355:118::-;6426:22;6442:5;6426:22;:::i;:::-;6419:5;6416:33;6406:61;;6463:1;6460;6453:12;6406:61;6355:118;:::o;6479:135::-;6523:5;6561:6;6548:20;6539:29;;6577:31;6602:5;6577:31;:::i;:::-;6479:135;;;;:::o;6620:325::-;6677:6;6726:2;6714:9;6705:7;6701:23;6697:32;6694:119;;;6732:79;;:::i;:::-;6694:119;6852:1;6877:51;6920:7;6911:6;6900:9;6896:22;6877:51;:::i;:::-;6867:61;;6823:115;6620:325;;;;:::o;6951:180::-;6999:77;6996:1;6989:88;7096:4;7093:1;7086:15;7120:4;7117:1;7110:15;7137:320;7181:6;7218:1;7212:4;7208:12;7198:22;;7265:1;7259:4;7255:12;7286:18;7276:81;;7342:4;7334:6;7330:17;7320:27;;7276:81;7404:2;7396:6;7393:14;7373:18;7370:38;7367:84;;7423:18;;:::i;:::-;7367:84;7188:269;7137:320;;;:::o;7463:180::-;7511:77;7508:1;7501:88;7608:4;7605:1;7598:15;7632:4;7629:1;7622:15;7649:191;7689:3;7708:20;7726:1;7708:20;:::i;:::-;7703:25;;7742:20;7760:1;7742:20;:::i;:::-;7737:25;;7785:1;7782;7778:9;7771:16;;7806:3;7803:1;7800:10;7797:36;;;7813:18;;:::i;:::-;7797:36;7649:191;;;;:::o;7846:224::-;7986:34;7982:1;7974:6;7970:14;7963:58;8055:7;8050:2;8042:6;8038:15;8031:32;7846:224;:::o;8076:366::-;8218:3;8239:67;8303:2;8298:3;8239:67;:::i;:::-;8232:74;;8315:93;8404:3;8315:93;:::i;:::-;8433:2;8428:3;8424:12;8417:19;;8076:366;;;:::o;8448:419::-;8614:4;8652:2;8641:9;8637:18;8629:26;;8701:9;8695:4;8691:20;8687:1;8676:9;8672:17;8665:47;8729:131;8855:4;8729:131;:::i;:::-;8721:139;;8448:419;;;:::o;8873:173::-;9013:25;9009:1;9001:6;8997:14;8990:49;8873:173;:::o;9052:366::-;9194:3;9215:67;9279:2;9274:3;9215:67;:::i;:::-;9208:74;;9291:93;9380:3;9291:93;:::i;:::-;9409:2;9404:3;9400:12;9393:19;;9052:366;;;:::o;9424:419::-;9590:4;9628:2;9617:9;9613:18;9605:26;;9677:9;9671:4;9667:20;9663:1;9652:9;9648:17;9641:47;9705:131;9831:4;9705:131;:::i;:::-;9697:139;;9424:419;;;:::o;9849:143::-;9906:5;9937:6;9931:13;9922:22;;9953:33;9980:5;9953:33;:::i;:::-;9849:143;;;;:::o;9998:351::-;10068:6;10117:2;10105:9;10096:7;10092:23;10088:32;10085:119;;;10123:79;;:::i;:::-;10085:119;10243:1;10268:64;10324:7;10315:6;10304:9;10300:22;10268:64;:::i;:::-;10258:74;;10214:128;9998:351;;;;:::o;10355:332::-;10476:4;10514:2;10503:9;10499:18;10491:26;;10527:71;10595:1;10584:9;10580:17;10571:6;10527:71;:::i;:::-;10608:72;10676:2;10665:9;10661:18;10652:6;10608:72;:::i;:::-;10355:332;;;;;:::o;10693:225::-;10833:34;10829:1;10821:6;10817:14;10810:58;10902:8;10897:2;10889:6;10885:15;10878:33;10693:225;:::o;10924:366::-;11066:3;11087:67;11151:2;11146:3;11087:67;:::i;:::-;11080:74;;11163:93;11252:3;11163:93;:::i;:::-;11281:2;11276:3;11272:12;11265:19;;10924:366;;;:::o;11296:419::-;11462:4;11500:2;11489:9;11485:18;11477:26;;11549:9;11543:4;11539:20;11535:1;11524:9;11520:17;11513:47;11577:131;11703:4;11577:131;:::i;:::-;11569:139;;11296:419;;;:::o;11721:223::-;11861:34;11857:1;11849:6;11845:14;11838:58;11930:6;11925:2;11917:6;11913:15;11906:31;11721:223;:::o;11950:366::-;12092:3;12113:67;12177:2;12172:3;12113:67;:::i;:::-;12106:74;;12189:93;12278:3;12189:93;:::i;:::-;12307:2;12302:3;12298:12;12291:19;;11950:366;;;:::o;12322:419::-;12488:4;12526:2;12515:9;12511:18;12503:26;;12575:9;12569:4;12565:20;12561:1;12550:9;12546:17;12539:47;12603:131;12729:4;12603:131;:::i;:::-;12595:139;;12322:419;;;:::o;12747:221::-;12887:34;12883:1;12875:6;12871:14;12864:58;12956:4;12951:2;12943:6;12939:15;12932:29;12747:221;:::o;12974:366::-;13116:3;13137:67;13201:2;13196:3;13137:67;:::i;:::-;13130:74;;13213:93;13302:3;13213:93;:::i;:::-;13331:2;13326:3;13322:12;13315:19;;12974:366;;;:::o;13346:419::-;13512:4;13550:2;13539:9;13535:18;13527:26;;13599:9;13593:4;13589:20;13585:1;13574:9;13570:17;13563:47;13627:131;13753:4;13627:131;:::i;:::-;13619:139;;13346:419;;;:::o;13771:182::-;13911:34;13907:1;13899:6;13895:14;13888:58;13771:182;:::o;13959:366::-;14101:3;14122:67;14186:2;14181:3;14122:67;:::i;:::-;14115:74;;14198:93;14287:3;14198:93;:::i;:::-;14316:2;14311:3;14307:12;14300:19;;13959:366;;;:::o;14331:419::-;14497:4;14535:2;14524:9;14520:18;14512:26;;14584:9;14578:4;14574:20;14570:1;14559:9;14555:17;14548:47;14612:131;14738:4;14612:131;:::i;:::-;14604:139;;14331:419;;;:::o;14756:166::-;14896:18;14892:1;14884:6;14880:14;14873:42;14756:166;:::o;14928:366::-;15070:3;15091:67;15155:2;15150:3;15091:67;:::i;:::-;15084:74;;15167:93;15256:3;15167:93;:::i;:::-;15285:2;15280:3;15276:12;15269:19;;14928:366;;;:::o;15300:419::-;15466:4;15504:2;15493:9;15489:18;15481:26;;15553:9;15547:4;15543:20;15539:1;15528:9;15524:17;15517:47;15581:131;15707:4;15581:131;:::i;:::-;15573:139;;15300:419;;;:::o;15725:114::-;;:::o;15845:364::-;15987:3;16008:66;16072:1;16067:3;16008:66;:::i;:::-;16001:73;;16083:93;16172:3;16083:93;:::i;:::-;16201:1;16196:3;16192:11;16185:18;;15845:364;;;:::o;16215:419::-;16381:4;16419:2;16408:9;16404:18;16396:26;;16468:9;16462:4;16458:20;16454:1;16443:9;16439:17;16432:47;16496:131;16622:4;16496:131;:::i;:::-;16488:139;;16215:419;;;:::o;16640:179::-;16780:31;16776:1;16768:6;16764:14;16757:55;16640:179;:::o;16825:366::-;16967:3;16988:67;17052:2;17047:3;16988:67;:::i;:::-;16981:74;;17064:93;17153:3;17064:93;:::i;:::-;17182:2;17177:3;17173:12;17166:19;;16825:366;;;:::o;17197:419::-;17363:4;17401:2;17390:9;17386:18;17378:26;;17450:9;17444:4;17440:20;17436:1;17425:9;17421:17;17414:47;17478:131;17604:4;17478:131;:::i;:::-;17470:139;;17197:419;;;:::o;17622:236::-;17762:34;17758:1;17750:6;17746:14;17739:58;17831:19;17826:2;17818:6;17814:15;17807:44;17622:236;:::o;17864:366::-;18006:3;18027:67;18091:2;18086:3;18027:67;:::i;:::-;18020:74;;18103:93;18192:3;18103:93;:::i;:::-;18221:2;18216:3;18212:12;18205:19;;17864:366;;;:::o;18236:419::-;18402:4;18440:2;18429:9;18425:18;18417:26;;18489:9;18483:4;18479:20;18475:1;18464:9;18460:17;18453:47;18517:131;18643:4;18517:131;:::i;:::-;18509:139;;18236:419;;;:::o;18661:242::-;18801:34;18797:1;18789:6;18785:14;18778:58;18870:25;18865:2;18857:6;18853:15;18846:50;18661:242;:::o;18909:366::-;19051:3;19072:67;19136:2;19131:3;19072:67;:::i;:::-;19065:74;;19148:93;19237:3;19148:93;:::i;:::-;19266:2;19261:3;19257:12;19250:19;;18909:366;;;:::o;19281:419::-;19447:4;19485:2;19474:9;19470:18;19462:26;;19534:9;19528:4;19524:20;19520:1;19509:9;19505:17;19498:47;19562:131;19688:4;19562:131;:::i;:::-;19554:139;;19281:419;;;:::o;19706:224::-;19846:34;19842:1;19834:6;19830:14;19823:58;19915:7;19910:2;19902:6;19898:15;19891:32;19706:224;:::o;19936:366::-;20078:3;20099:67;20163:2;20158:3;20099:67;:::i;:::-;20092:74;;20175:93;20264:3;20175:93;:::i;:::-;20293:2;20288:3;20284:12;20277:19;;19936:366;;;:::o;20308:419::-;20474:4;20512:2;20501:9;20497:18;20489:26;;20561:9;20555:4;20551:20;20547:1;20536:9;20532:17;20525:47;20589:131;20715:4;20589:131;:::i;:::-;20581:139;;20308:419;;;:::o;20733:222::-;20873:34;20869:1;20861:6;20857:14;20850:58;20942:5;20937:2;20929:6;20925:15;20918:30;20733:222;:::o;20961:366::-;21103:3;21124:67;21188:2;21183:3;21124:67;:::i;:::-;21117:74;;21200:93;21289:3;21200:93;:::i;:::-;21318:2;21313:3;21309:12;21302:19;;20961:366;;;:::o;21333:419::-;21499:4;21537:2;21526:9;21522:18;21514:26;;21586:9;21580:4;21576:20;21572:1;21561:9;21557:17;21550:47;21614:131;21740:4;21614:131;:::i;:::-;21606:139;;21333:419;;;:::o;21758:241::-;21898:34;21894:1;21886:6;21882:14;21875:58;21967:24;21962:2;21954:6;21950:15;21943:49;21758:241;:::o;22005:366::-;22147:3;22168:67;22232:2;22227:3;22168:67;:::i;:::-;22161:74;;22244:93;22333:3;22244:93;:::i;:::-;22362:2;22357:3;22353:12;22346:19;;22005:366;;;:::o;22377:419::-;22543:4;22581:2;22570:9;22566:18;22558:26;;22630:9;22624:4;22620:20;22616:1;22605:9;22601:17;22594:47;22658:131;22784:4;22658:131;:::i;:::-;22650:139;;22377:419;;;:::o;22802:167::-;22839:3;22862:22;22878:5;22862:22;:::i;:::-;22853:31;;22906:4;22899:5;22896:15;22893:41;;22914:18;;:::i;:::-;22893:41;22961:1;22954:5;22950:13;22943:20;;22802:167;;;:::o;22975:170::-;23115:22;23111:1;23103:6;23099:14;23092:46;22975:170;:::o;23151:366::-;23293:3;23314:67;23378:2;23373:3;23314:67;:::i;:::-;23307:74;;23390:93;23479:3;23390:93;:::i;:::-;23508:2;23503:3;23499:12;23492:19;;23151:366;;;:::o;23523:419::-;23689:4;23727:2;23716:9;23712:18;23704:26;;23776:9;23770:4;23766:20;23762:1;23751:9;23747:17;23740:47;23804:131;23930:4;23804:131;:::i;:::-;23796:139;;23523:419;;;:::o;23948:180::-;23996:77;23993:1;23986:88;24093:4;24090:1;24083:15;24117:4;24114:1;24107:15;24134:194;24174:4;24194:20;24212:1;24194:20;:::i;:::-;24189:25;;24228:20;24246:1;24228:20;:::i;:::-;24223:25;;24272:1;24269;24265:9;24257:17;;24296:1;24290:4;24287:11;24284:37;;;24301:18;;:::i;:::-;24284:37;24134:194;;;;:::o;24334:180::-;24382:77;24379:1;24372:88;24479:4;24476:1;24469:15;24503:4;24500:1;24493:15;24520:180;24568:77;24565:1;24558:88;24665:4;24662:1;24655:15;24689:4;24686:1;24679:15;24706:85;24751:7;24780:5;24769:16;;24706:85;;;:::o;24797:60::-;24825:3;24846:5;24839:12;;24797:60;;;:::o;24863:158::-;24921:9;24954:61;24972:42;24981:32;25007:5;24981:32;:::i;:::-;24972:42;:::i;:::-;24954:61;:::i;:::-;24941:74;;24863:158;;;:::o;25027:147::-;25122:45;25161:5;25122:45;:::i;:::-;25117:3;25110:58;25027:147;;:::o;25180:114::-;25247:6;25281:5;25275:12;25265:22;;25180:114;;;:::o;25300:184::-;25399:11;25433:6;25428:3;25421:19;25473:4;25468:3;25464:14;25449:29;;25300:184;;;;:::o;25490:132::-;25557:4;25580:3;25572:11;;25610:4;25605:3;25601:14;25593:22;;25490:132;;;:::o;25628:108::-;25705:24;25723:5;25705:24;:::i;:::-;25700:3;25693:37;25628:108;;:::o;25742:179::-;25811:10;25832:46;25874:3;25866:6;25832:46;:::i;:::-;25910:4;25905:3;25901:14;25887:28;;25742:179;;;;:::o;25927:113::-;25997:4;26029;26024:3;26020:14;26012:22;;25927:113;;;:::o;26076:732::-;26195:3;26224:54;26272:5;26224:54;:::i;:::-;26294:86;26373:6;26368:3;26294:86;:::i;:::-;26287:93;;26404:56;26454:5;26404:56;:::i;:::-;26483:7;26514:1;26499:284;26524:6;26521:1;26518:13;26499:284;;;26600:6;26594:13;26627:63;26686:3;26671:13;26627:63;:::i;:::-;26620:70;;26713:60;26766:6;26713:60;:::i;:::-;26703:70;;26559:224;26546:1;26543;26539:9;26534:14;;26499:284;;;26503:14;26799:3;26792:10;;26200:608;;;26076:732;;;;:::o;26814:831::-;27077:4;27115:3;27104:9;27100:19;27092:27;;27129:71;27197:1;27186:9;27182:17;27173:6;27129:71;:::i;:::-;27210:80;27286:2;27275:9;27271:18;27262:6;27210:80;:::i;:::-;27337:9;27331:4;27327:20;27322:2;27311:9;27307:18;27300:48;27365:108;27468:4;27459:6;27365:108;:::i;:::-;27357:116;;27483:72;27551:2;27540:9;27536:18;27527:6;27483:72;:::i;:::-;27565:73;27633:3;27622:9;27618:19;27609:6;27565:73;:::i;:::-;26814:831;;;;;;;;:::o;27651:225::-;27791:34;27787:1;27779:6;27775:14;27768:58;27860:8;27855:2;27847:6;27843:15;27836:33;27651:225;:::o;27882:366::-;28024:3;28045:67;28109:2;28104:3;28045:67;:::i;:::-;28038:74;;28121:93;28210:3;28121:93;:::i;:::-;28239:2;28234:3;28230:12;28223:19;;27882:366;;;:::o;28254:419::-;28420:4;28458:2;28447:9;28443:18;28435:26;;28507:9;28501:4;28497:20;28493:1;28482:9;28478:17;28471:47;28535:131;28661:4;28535:131;:::i;:::-;28527:139;;28254:419;;;:::o;28679:182::-;28819:34;28815:1;28807:6;28803:14;28796:58;28679:182;:::o;28867:366::-;29009:3;29030:67;29094:2;29089:3;29030:67;:::i;:::-;29023:74;;29106:93;29195:3;29106:93;:::i;:::-;29224:2;29219:3;29215:12;29208:19;;28867:366;;;:::o;29239:419::-;29405:4;29443:2;29432:9;29428:18;29420:26;;29492:9;29486:4;29482:20;29478:1;29467:9;29463:17;29456:47;29520:131;29646:4;29520:131;:::i;:::-;29512:139;;29239:419;;;:::o;29664:410::-;29704:7;29727:20;29745:1;29727:20;:::i;:::-;29722:25;;29761:20;29779:1;29761:20;:::i;:::-;29756:25;;29816:1;29813;29809:9;29838:30;29856:11;29838:30;:::i;:::-;29827:41;;30017:1;30008:7;30004:15;30001:1;29998:22;29978:1;29971:9;29951:83;29928:139;;30047:18;;:::i;:::-;29928:139;29712:362;29664:410;;;;:::o;30080:180::-;30128:77;30125:1;30118:88;30225:4;30222:1;30215:15;30249:4;30246:1;30239:15;30266:185;30306:1;30323:20;30341:1;30323:20;:::i;:::-;30318:25;;30357:20;30375:1;30357:20;:::i;:::-;30352:25;;30396:1;30386:35;;30401:18;;:::i;:::-;30386:35;30443:1;30440;30436:9;30431:14;;30266:185;;;;:::o

Swarm Source

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