ETH Price: $3,465.11 (+0.03%)

Token

RICE (RICE)
 

Overview

Max Total Supply

10,000,000,000 RICE

Holders

72

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.353720839070325772 RICE

Value
$0.00
0x4C65b06a49c7d17A4373DF12fc3060A8457E7499
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:
RICE

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license
File 1 of 7 : RICE.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;


import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";


interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
        function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to
    ) external;

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

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



contract RICE is Ownable, ERC20 {
    mapping(address => bool) public blacklists;
    address public marketing = 0x3F993182341542D090ef926242FDeBc49F80FaCA;
    address public beneficence = 0x065d6b1f7D007B16910D9D273575C3F58f643409;
    address public WETH;
    uint256 public tax = 2;
    uint256 public limitNumber;
    uint256 public swapNumber;
    bool public blimit = false;
    bool public swapEth = true;
    address public uniswapV2Pair;
    IRouter public _router;


    constructor() ERC20("RICE", "RICE") Ownable(msg.sender) {
        _mint(msg.sender, 10000000000 * 10**18);

        _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());
        WETH = _router.WETH();

        limitNumber = (10000000000 * 10**18) / 100;
        swapNumber = (30000000 * 10**18);

        ERC20(WETH).approve(address(_router), type(uint256).max);
        _approve(address(this), address(_router), type(uint256).max);
        _approve(owner(), address(_router), type(uint256).max);
    }

    function _transfer(address from, address to, uint256 amount) internal override {
        require(!blacklists[to] && !blacklists[from], "Blacklisted");

        if(from == owner() 
        || from == marketing
        || from == address(_router)
        || from == beneficence
        || to == owner() 
        || to == marketing
        || to == beneficence
        || to == address(_router)
        || from == address(this)
        || to == address(this)) {
            super._transfer(from, to, amount);
            return;
        }

        if(uniswapV2Pair ==  from || uniswapV2Pair ==  to) {
            if(blimit && uniswapV2Pair ==  from && address(_router) != to){
                require((amount + balanceOf(to)) < limitNumber, "limit");
            }
            uint256 t = tax * amount / 100;
            super._transfer(from, address(this), t);
            if(!inSwap) {
                swapfee();
            }
            super._transfer(from, to, amount - t);
            return;
        }
        super._transfer(from, to, amount);
    }

    bool private inSwap;
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    function swapfee() private lockTheSwap {
        uint256 balance = balanceOf(address(this));
        if(balance > swapNumber) {
            address[] memory path = new address[](2);
            path[0] = address(this);
            path[1] = WETH;
            uint256 b = balance / 2;
            _router.swapExactTokensForTokensSupportingFeeOnTransferTokens(b, 0, path, marketing, block.timestamp);
            _router.swapExactTokensForTokensSupportingFeeOnTransferTokens(balance - b, 0, path, beneficence, block.timestamp);
        }
    }

    function setlimit(bool _limit, uint256 _limitNumber) external onlyOwner {
        blimit = _limit;
        limitNumber = _limitNumber;
    }

    function setTax(uint256 _tax) external onlyOwner {
        tax = _tax;   
    }

    function setSwapEth(bool isSwapEth) public onlyOwner {
        swapEth = isSwapEth;
    }

    function setSwapNumber(uint256 _swapNumber)  external onlyOwner {
        swapNumber = _swapNumber;
    }

    function blacklist(address _address, bool _isBlacklisting) external onlyOwner {
        blacklists[_address] = _isBlacklisting;
    }

    function setblacklist(address[] calldata addresses, bool _isBlacklisting) public onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            blacklists[addresses[i]] = _isBlacklisting;
        }
    }

    function multiTransfer(address[] calldata addresses, uint256[] calldata amounts) public {
        require(addresses.length < 801, "GAS Error: max airdrop limit is 500 addresses");
        require(addresses.length == amounts.length, "Mismatch between Address and token count");

        uint256 sum = 0;
        for (uint256 i = 0; i < addresses.length; i++) {
            sum = sum + amounts[i];
        }

        require(balanceOf(msg.sender) >= sum, "Not enough amount in wallet");
        for (uint256 i = 0; i < addresses.length; i++) {
            _transfer(msg.sender, addresses[i], amounts[i]);
        }
    }

    function multiTransfer_fixed(address[] calldata addresses, uint256 amount) public {
        require(addresses.length < 2001, "GAS Error: max airdrop limit is 2000 addresses");

        uint256 sum = amount * addresses.length;
        require(balanceOf(msg.sender) >= sum, "Not enough amount in wallet");

        for (uint256 i = 0; i < addresses.length; i++) {
            _transfer(msg.sender, addresses[i], amount);
        }
    }

    function errorToken(address _token) external onlyOwner {
        ERC20(_token).transfer(msg.sender, IERC20(_token).balanceOf(address(this)));
    }
    
    function withdawOwner(uint256 amount) public onlyOwner {
        payable(msg.sender).transfer(amount);
    }

    receive () external payable  {
    }
}

File 2 of 7 : ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.20;

import {IERC20} from "./IERC20.sol";
import {IERC20Metadata} from "./extensions/IERC20Metadata.sol";
import {Context} from "../../utils/Context.sol";
import {IERC20Errors} from "../../interfaces/draft-IERC6093.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 */
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * 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 returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual 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 default value returned by this function, unless
     * it's 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 returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual 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 `value`.
     */
    function transfer(address to, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, value);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `value` 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 value) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        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 `value`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `value`.
     */
    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    /**
     * @dev Moves a `value` 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.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` 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.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
     * true using the following override:
     * ```
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `value`.
     *
     * Does not update the allowance value in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Does not emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}

File 3 of 7 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

import {Context} from "../utils/Context.sol";

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

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @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 {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

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

File 4 of 7 : draft-IERC6093.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;

/**
 * @dev Standard ERC20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
 */
interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a `spender` is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}

/**
 * @dev Standard ERC721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.
     * Used in balance queries.
     * @param owner Address of the current owner of a token.
     */
    error ERC721InvalidOwner(address owner);

    /**
     * @dev Indicates a `tokenId` whose `owner` is the zero address.
     * @param tokenId Identifier number of a token.
     */
    error ERC721NonexistentToken(uint256 tokenId);

    /**
     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param tokenId Identifier number of a token.
     * @param owner Address of the current owner of a token.
     */
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC721InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC721InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param tokenId Identifier number of a token.
     */
    error ERC721InsufficientApproval(address operator, uint256 tokenId);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC721InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC721InvalidOperator(address operator);
}

/**
 * @dev Standard ERC1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.
 */
interface IERC1155Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     * @param tokenId Identifier number of a token.
     */
    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC1155InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC1155InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param owner Address of the current owner of a token.
     */
    error ERC1155MissingApprovalForAll(address operator, address owner);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC1155InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC1155InvalidOperator(address operator);

    /**
     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
     * Used in batch transfers.
     * @param idsLength Length of the array of token identifiers
     * @param valuesLength Length of the array of token amounts
     */
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

File 5 of 7 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/Context.sol)

pragma solidity ^0.8.20;

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

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

File 6 of 7 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;

import {IERC20} from "../IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 */
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);
}

File 7 of 7 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

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

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

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

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

    /**
     * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` 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 value) external returns (bool);
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","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":"beneficence","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isBlacklisting","type":"bool"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"errorToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketing","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"multiTransfer_fixed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isSwapEth","type":"bool"}],"name":"setSwapEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapNumber","type":"uint256"}],"name":"setSwapNumber","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"setTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"_isBlacklisting","type":"bool"}],"name":"setblacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_limit","type":"bool"},{"internalType":"uint256","name":"_limitNumber","type":"uint256"}],"name":"setlimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"value","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":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdawOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052733f993182341542d090ef926242fdebc49f80faca60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073065d6b1f7d007b16910d9d273575c3f58f64340960085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506002600a555f600d5f6101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff021916908315150217905550348015620000f1575f80fd5b506040518060400160405280600481526020017f52494345000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f5249434500000000000000000000000000000000000000000000000000000000815250335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620001d2575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620001c9919062000cbe565b60405180910390fd5b620001e381620006f060201b60201c565b508160049081620001f5919062000f3d565b50806005908162000207919062000f3d565b50505062000228336b204fce5e3e25026110000000620007b160201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200030d919062001054565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000394573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003ba919062001054565b6040518363ffffffff1660e01b8152600401620003d992919062001084565b6020604051808303815f875af1158015620003f6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200041c919062001054565b600d60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004c7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004ed919062001054565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506a52b7d2dcc80cd2e4000000600b819055506a18d0bf423c03d8de000000600c8190555060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401620005ef929190620010c0565b6020604051808303815f875af11580156200060c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000632919062001125565b506200068730600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200083b60201b60201c565b620006ea6200069b6200085560201b60201c565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200083b60201b60201c565b62001212565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000824575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016200081b919062000cbe565b60405180910390fd5b620008375f83836200087c60201b60201c565b5050565b62000850838383600162000aa360201b60201c565b505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620008d0578060035f828254620008c3919062001182565b92505081905550620009a3565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156200095d578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016200095493929190620011bc565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009ec578060035f828254039250508190555062000a37565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a969190620011f7565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160362000b16575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040162000b0d919062000cbe565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000b89575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040162000b80919062000cbe565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801562000c75578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405162000c6c9190620011f7565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000ca68262000c7b565b9050919050565b62000cb88162000c9a565b82525050565b5f60208201905062000cd35f83018462000cad565b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000d5557607f821691505b60208210810362000d6b5762000d6a62000d10565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000dcf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d92565b62000ddb868362000d92565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000e2562000e1f62000e198462000df3565b62000dfc565b62000df3565b9050919050565b5f819050919050565b62000e408362000e05565b62000e5862000e4f8262000e2c565b84845462000d9e565b825550505050565b5f90565b62000e6e62000e60565b62000e7b81848462000e35565b505050565b5b8181101562000ea25762000e965f8262000e64565b60018101905062000e81565b5050565b601f82111562000ef15762000ebb8162000d71565b62000ec68462000d83565b8101602085101562000ed6578190505b62000eee62000ee58562000d83565b83018262000e80565b50505b505050565b5f82821c905092915050565b5f62000f135f198460080262000ef6565b1980831691505092915050565b5f62000f2d838362000f02565b9150826002028217905092915050565b62000f488262000cd9565b67ffffffffffffffff81111562000f645762000f6362000ce3565b5b62000f70825462000d3d565b62000f7d82828562000ea6565b5f60209050601f83116001811462000fb3575f841562000f9e578287015190505b62000faa858262000f20565b86555062001019565b601f19841662000fc38662000d71565b5f5b8281101562000fec5784890151825560018201915060208501945060208101905062000fc5565b868310156200100c578489015162001008601f89168262000f02565b8355505b6001600288020188555050505b505050505050565b5f80fd5b620010308162000c9a565b81146200103b575f80fd5b50565b5f815190506200104e8162001025565b92915050565b5f602082840312156200106c576200106b62001021565b5b5f6200107b848285016200103e565b91505092915050565b5f604082019050620010995f83018562000cad565b620010a8602083018462000cad565b9392505050565b620010ba8162000df3565b82525050565b5f604082019050620010d55f83018562000cad565b620010e46020830184620010af565b9392505050565b5f8115159050919050565b6200110181620010eb565b81146200110c575f80fd5b50565b5f815190506200111f81620010f6565b92915050565b5f602082840312156200113d576200113c62001021565b5b5f6200114c848285016200110f565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200118e8262000df3565b91506200119b8362000df3565b9250828201905080821115620011b657620011b562001155565b5b92915050565b5f606082019050620011d15f83018662000cad565b620011e06020830185620010af565b620011ef6040830184620010af565b949350505050565b5f6020820190506200120c5f830184620010af565b92915050565b612eaf80620012205f395ff3fe6080604052600436106101f1575f3560e01c80635be89fbd1161010c578063967123cd1161009f578063d99274481161006e578063d9927448146106c8578063dd62ed3e146106f0578063e75707331461072c578063edae876f14610756578063f2fde38b14610780576101f8565b8063967123cd1461061057806399c8d55614610638578063a9059cbb14610662578063ad5c46481461069e576101f8565b8063715018a6116100db578063715018a61461057c5780638648c6a6146105925780638da5cb5b146105bc57806395d89b41146105e6576101f8565b80635be89fbd146104c6578063632e5442146104ee5780636e4ad4ba1461051657806370a0823114610540576101f8565b806323b872dd11610184578063313ce56711610153578063313ce56714610420578063404e51291461044a57806349bd5a5e146104725780635384f2461461049c576101f8565b806323b872dd146103685780632b216cc6146103a45780632d3e474a146103ce5780632e5bb6ff146103f8576101f8565b806316c02129116101c057806316c02129146102b257806318160ddd146102ee5780631c6a0c4c146103185780631e89d54514610340576101f8565b806306fdde03146101fc578063095ea7b3146102265780630a3ccb231461026257806314aec7481461028a576101f8565b366101f857005b5f80fd5b348015610207575f80fd5b506102106107a8565b60405161021d9190612185565b60405180910390f35b348015610231575f80fd5b5061024c6004803603810190610247919061223a565b610838565b6040516102599190612292565b60405180910390f35b34801561026d575f80fd5b50610288600480360381019061028391906122d5565b61085a565b005b348015610295575f80fd5b506102b060048036038101906102ab9190612300565b61087f565b005b3480156102bd575f80fd5b506102d860048036038101906102d3919061233e565b6108ab565b6040516102e59190612292565b60405180910390f35b3480156102f9575f80fd5b506103026108c8565b60405161030f9190612378565b60405180910390f35b348015610323575f80fd5b5061033e60048036038101906103399190612391565b6108d1565b005b34801561034b575f80fd5b5061036660048036038101906103619190612472565b610920565b005b348015610373575f80fd5b5061038e600480360381019061038991906124f0565b610ab6565b60405161039b9190612292565b60405180910390f35b3480156103af575f80fd5b506103b8610ae4565b6040516103c59190612292565b60405180910390f35b3480156103d9575f80fd5b506103e2610af6565b6040516103ef919061254f565b60405180910390f35b348015610403575f80fd5b5061041e60048036038101906104199190612391565b610b1b565b005b34801561042b575f80fd5b50610434610b2d565b6040516104419190612583565b60405180910390f35b348015610455575f80fd5b50610470600480360381019061046b919061259c565b610b35565b005b34801561047d575f80fd5b50610486610b95565b604051610493919061254f565b60405180910390f35b3480156104a7575f80fd5b506104b0610bbb565b6040516104bd9190612292565b60405180910390f35b3480156104d1575f80fd5b506104ec60048036038101906104e79190612391565b610bce565b005b3480156104f9575f80fd5b50610514600480360381019061050f91906125da565b610be0565b005b348015610521575f80fd5b5061052a610cdd565b6040516105379190612378565b60405180910390f35b34801561054b575f80fd5b506105666004803603810190610561919061233e565b610ce3565b6040516105739190612378565b60405180910390f35b348015610587575f80fd5b50610590610d29565b005b34801561059d575f80fd5b506105a6610d3c565b6040516105b39190612378565b60405180910390f35b3480156105c7575f80fd5b506105d0610d42565b6040516105dd919061254f565b60405180910390f35b3480156105f1575f80fd5b506105fa610d69565b6040516106079190612185565b60405180910390f35b34801561061b575f80fd5b5061063660048036038101906106319190612637565b610df9565b005b348015610643575f80fd5b5061064c610ea2565b6040516106599190612378565b60405180910390f35b34801561066d575f80fd5b506106886004803603810190610683919061223a565b610ea8565b6040516106959190612292565b60405180910390f35b3480156106a9575f80fd5b506106b2610eca565b6040516106bf919061254f565b60405180910390f35b3480156106d3575f80fd5b506106ee60048036038101906106e9919061233e565b610eef565b005b3480156106fb575f80fd5b5061071660048036038101906107119190612694565b610fed565b6040516107239190612378565b60405180910390f35b348015610737575f80fd5b5061074061106f565b60405161074d919061254f565b60405180910390f35b348015610761575f80fd5b5061076a611094565b604051610777919061272d565b60405180910390f35b34801561078b575f80fd5b506107a660048036038101906107a1919061233e565b6110b9565b005b6060600480546107b790612773565b80601f01602080910402602001604051908101604052809291908181526020018280546107e390612773565b801561082e5780601f106108055761010080835404028352916020019161082e565b820191905f5260205f20905b81548152906001019060200180831161081157829003601f168201915b5050505050905090565b5f8061084261113d565b905061084f818585611144565b600191505092915050565b610862611156565b80600d60016101000a81548160ff02191690831515021790555050565b610887611156565b81600d5f6101000a81548160ff02191690831515021790555080600b819055505050565b6006602052805f5260405f205f915054906101000a900460ff1681565b5f600354905090565b6108d9611156565b3373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561091c573d5f803e3d5ffd5b5050565b6103218484905010610967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095e90612813565b60405180910390fd5b8181905084849050146109af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a6906128a1565b60405180910390fd5b5f805b858590508110156109f7578383828181106109d0576109cf6128bf565b5b90506020020135826109e29190612919565b915080806109ef9061294c565b9150506109b2565b5080610a0233610ce3565b1015610a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3a906129dd565b60405180910390fd5b5f5b85859050811015610aae57610a9b33878784818110610a6757610a666128bf565b5b9050602002016020810190610a7c919061233e565b868685818110610a8f57610a8e6128bf565b5b905060200201356111dd565b8080610aa69061294c565b915050610a45565b505050505050565b5f80610ac061113d565b9050610acd8582856117f6565b610ad88585856111dd565b60019150509392505050565b600d5f9054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b23611156565b80600a8190555050565b5f6012905090565b610b3d611156565b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60019054906101000a900460ff1681565b610bd6611156565b80600c8190555050565b6107d18383905010610c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1e90612a6b565b60405180910390fd5b5f8383905082610c379190612a89565b905080610c4333610ce3565b1015610c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7b906129dd565b60405180910390fd5b5f5b84849050811015610cd657610cc333868684818110610ca857610ca76128bf565b5b9050602002016020810190610cbd919061233e565b856111dd565b8080610cce9061294c565b915050610c86565b5050505050565b600b5481565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610d31611156565b610d3a5f611888565b565b600c5481565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610d7890612773565b80601f0160208091040260200160405190810160405280929190818152602001828054610da490612773565b8015610def5780601f10610dc657610100808354040283529160200191610def565b820191905f5260205f20905b815481529060010190602001808311610dd257829003601f168201915b5050505050905090565b610e01611156565b5f5b83839050811015610e9c578160065f868685818110610e2557610e246128bf565b5b9050602002016020810190610e3a919061233e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080610e949061294c565b915050610e03565b50505050565b600a5481565b5f80610eb261113d565b9050610ebf8185856111dd565b600191505092915050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ef7611156565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f4d919061254f565b602060405180830381865afa158015610f68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8c9190612ade565b6040518363ffffffff1660e01b8152600401610fa9929190612b09565b6020604051808303815f875af1158015610fc5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fe99190612b44565b5050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110c1611156565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611131575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611128919061254f565b60405180910390fd5b61113a81611888565b50565b5f33905090565b6111518383836001611949565b505050565b61115e61113d565b73ffffffffffffffffffffffffffffffffffffffff1661117c610d42565b73ffffffffffffffffffffffffffffffffffffffff16146111db5761119f61113d565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016111d2919061254f565b60405180910390fd5b565b60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561127b575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b6112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b190612bb9565b60405180910390fd5b6112c2610d42565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611347575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061139e5750600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806113f5575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806114325750611403610d42565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80611489575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806114e0575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806115375750600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061156d57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806115a357503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156115b8576115b3838383611b18565b6117f1565b8273ffffffffffffffffffffffffffffffffffffffff16600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061166157508173ffffffffffffffffffffffffffffffffffffffff16600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b156117e557600d5f9054906101000a900460ff1680156116ce57508273ffffffffffffffffffffffffffffffffffffffff16600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b801561172757508173ffffffffffffffffffffffffffffffffffffffff16600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561178457600b5461173883610ce3565b826117439190612919565b10611783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177a90612c21565b60405180910390fd5b5b5f606482600a546117959190612a89565b61179f9190612c6c565b90506117ac843083611b18565b600e60149054906101000a900460ff166117c9576117c8611c08565b5b6117df848483856117da9190612c9c565b611b18565b506117f1565b6117f0838383611b18565b5b505050565b5f6118018484610fed565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118825781811015611873578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161186a93929190612ccf565b60405180910390fd5b61188184848484035f611949565b5b50505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036119b9575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016119b0919061254f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a29575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611a20919061254f565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611b12578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611b099190612378565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b88575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611b7f919061254f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bf8575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611bef919061254f565b60405180910390fd5b611c03838383611edf565b505050565b6001600e60146101000a81548160ff0219169083151502179055505f611c2d30610ce3565b9050600c54811115611ec2575f600267ffffffffffffffff811115611c5557611c54612d04565b5b604051908082528060200260200182016040528015611c835781602001602082028036833780820191505090505b50905030815f81518110611c9a57611c996128bf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110611d0a57611d096128bf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f600283611d529190612c6c565b9050600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795825f8560075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611dd7959493929190612e21565b5f604051808303815f87803b158015611dee575f80fd5b505af1158015611e00573d5f803e3d5ffd5b50505050600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d7958285611e4d9190612c9c565b5f8560085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611e92959493929190612e21565b5f604051808303815f87803b158015611ea9575f80fd5b505af1158015611ebb573d5f803e3d5ffd5b5050505050505b505f600e60146101000a81548160ff021916908315150217905550565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f2f578060035f828254611f239190612919565b92505081905550611fff565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611fb9578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611fb093929190612ccf565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612046578060035f8282540392505081905550612091565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516120ee9190612378565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612132578082015181840152602081019050612117565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612157826120fb565b6121618185612105565b9350612171818560208601612115565b61217a8161213d565b840191505092915050565b5f6020820190508181035f83015261219d818461214d565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6121d6826121ad565b9050919050565b6121e6816121cc565b81146121f0575f80fd5b50565b5f81359050612201816121dd565b92915050565b5f819050919050565b61221981612207565b8114612223575f80fd5b50565b5f8135905061223481612210565b92915050565b5f80604083850312156122505761224f6121a5565b5b5f61225d858286016121f3565b925050602061226e85828601612226565b9150509250929050565b5f8115159050919050565b61228c81612278565b82525050565b5f6020820190506122a55f830184612283565b92915050565b6122b481612278565b81146122be575f80fd5b50565b5f813590506122cf816122ab565b92915050565b5f602082840312156122ea576122e96121a5565b5b5f6122f7848285016122c1565b91505092915050565b5f8060408385031215612316576123156121a5565b5b5f612323858286016122c1565b925050602061233485828601612226565b9150509250929050565b5f60208284031215612353576123526121a5565b5b5f612360848285016121f3565b91505092915050565b61237281612207565b82525050565b5f60208201905061238b5f830184612369565b92915050565b5f602082840312156123a6576123a56121a5565b5b5f6123b384828501612226565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126123dd576123dc6123bc565b5b8235905067ffffffffffffffff8111156123fa576123f96123c0565b5b602083019150836020820283011115612416576124156123c4565b5b9250929050565b5f8083601f840112612432576124316123bc565b5b8235905067ffffffffffffffff81111561244f5761244e6123c0565b5b60208301915083602082028301111561246b5761246a6123c4565b5b9250929050565b5f805f806040858703121561248a576124896121a5565b5b5f85013567ffffffffffffffff8111156124a7576124a66121a9565b5b6124b3878288016123c8565b9450945050602085013567ffffffffffffffff8111156124d6576124d56121a9565b5b6124e28782880161241d565b925092505092959194509250565b5f805f60608486031215612507576125066121a5565b5b5f612514868287016121f3565b9350506020612525868287016121f3565b925050604061253686828701612226565b9150509250925092565b612549816121cc565b82525050565b5f6020820190506125625f830184612540565b92915050565b5f60ff82169050919050565b61257d81612568565b82525050565b5f6020820190506125965f830184612574565b92915050565b5f80604083850312156125b2576125b16121a5565b5b5f6125bf858286016121f3565b92505060206125d0858286016122c1565b9150509250929050565b5f805f604084860312156125f1576125f06121a5565b5b5f84013567ffffffffffffffff81111561260e5761260d6121a9565b5b61261a868287016123c8565b9350935050602061262d86828701612226565b9150509250925092565b5f805f6040848603121561264e5761264d6121a5565b5b5f84013567ffffffffffffffff81111561266b5761266a6121a9565b5b612677868287016123c8565b9350935050602061268a868287016122c1565b9150509250925092565b5f80604083850312156126aa576126a96121a5565b5b5f6126b7858286016121f3565b92505060206126c8858286016121f3565b9150509250929050565b5f819050919050565b5f6126f56126f06126eb846121ad565b6126d2565b6121ad565b9050919050565b5f612706826126db565b9050919050565b5f612717826126fc565b9050919050565b6127278161270d565b82525050565b5f6020820190506127405f83018461271e565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061278a57607f821691505b60208210810361279d5761279c612746565b5b50919050565b7f474153204572726f723a206d61782061697264726f70206c696d6974206973205f8201527f3530302061646472657373657300000000000000000000000000000000000000602082015250565b5f6127fd602d83612105565b9150612808826127a3565b604082019050919050565b5f6020820190508181035f83015261282a816127f1565b9050919050565b7f4d69736d61746368206265747765656e204164647265737320616e6420746f6b5f8201527f656e20636f756e74000000000000000000000000000000000000000000000000602082015250565b5f61288b602883612105565b915061289682612831565b604082019050919050565b5f6020820190508181035f8301526128b88161287f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61292382612207565b915061292e83612207565b9250828201905080821115612946576129456128ec565b5b92915050565b5f61295682612207565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612988576129876128ec565b5b600182019050919050565b7f4e6f7420656e6f75676820616d6f756e7420696e2077616c6c657400000000005f82015250565b5f6129c7601b83612105565b91506129d282612993565b602082019050919050565b5f6020820190508181035f8301526129f4816129bb565b9050919050565b7f474153204572726f723a206d61782061697264726f70206c696d6974206973205f8201527f3230303020616464726573736573000000000000000000000000000000000000602082015250565b5f612a55602e83612105565b9150612a60826129fb565b604082019050919050565b5f6020820190508181035f830152612a8281612a49565b9050919050565b5f612a9382612207565b9150612a9e83612207565b9250828202612aac81612207565b91508282048414831517612ac357612ac26128ec565b5b5092915050565b5f81519050612ad881612210565b92915050565b5f60208284031215612af357612af26121a5565b5b5f612b0084828501612aca565b91505092915050565b5f604082019050612b1c5f830185612540565b612b296020830184612369565b9392505050565b5f81519050612b3e816122ab565b92915050565b5f60208284031215612b5957612b586121a5565b5b5f612b6684828501612b30565b91505092915050565b7f426c61636b6c69737465640000000000000000000000000000000000000000005f82015250565b5f612ba3600b83612105565b9150612bae82612b6f565b602082019050919050565b5f6020820190508181035f830152612bd081612b97565b9050919050565b7f6c696d69740000000000000000000000000000000000000000000000000000005f82015250565b5f612c0b600583612105565b9150612c1682612bd7565b602082019050919050565b5f6020820190508181035f830152612c3881612bff565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612c7682612207565b9150612c8183612207565b925082612c9157612c90612c3f565b5b828204905092915050565b5f612ca682612207565b9150612cb183612207565b9250828203905081811115612cc957612cc86128ec565b5b92915050565b5f606082019050612ce25f830186612540565b612cef6020830185612369565b612cfc6040830184612369565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050919050565b5f612d54612d4f612d4a84612d31565b6126d2565b612207565b9050919050565b612d6481612d3a565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612d9c816121cc565b82525050565b5f612dad8383612d93565b60208301905092915050565b5f602082019050919050565b5f612dcf82612d6a565b612dd98185612d74565b9350612de483612d84565b805f5b83811015612e14578151612dfb8882612da2565b9750612e0683612db9565b925050600181019050612de7565b5085935050505092915050565b5f60a082019050612e345f830188612369565b612e416020830187612d5b565b8181036040830152612e538186612dc5565b9050612e626060830185612540565b612e6f6080830184612369565b969550505050505056fea2646970667358221220a4b362e18045e1587e60a8f469fbae260c46953882155b0c8d368e3ac08b007964736f6c63430008140033

Deployed Bytecode

0x6080604052600436106101f1575f3560e01c80635be89fbd1161010c578063967123cd1161009f578063d99274481161006e578063d9927448146106c8578063dd62ed3e146106f0578063e75707331461072c578063edae876f14610756578063f2fde38b14610780576101f8565b8063967123cd1461061057806399c8d55614610638578063a9059cbb14610662578063ad5c46481461069e576101f8565b8063715018a6116100db578063715018a61461057c5780638648c6a6146105925780638da5cb5b146105bc57806395d89b41146105e6576101f8565b80635be89fbd146104c6578063632e5442146104ee5780636e4ad4ba1461051657806370a0823114610540576101f8565b806323b872dd11610184578063313ce56711610153578063313ce56714610420578063404e51291461044a57806349bd5a5e146104725780635384f2461461049c576101f8565b806323b872dd146103685780632b216cc6146103a45780632d3e474a146103ce5780632e5bb6ff146103f8576101f8565b806316c02129116101c057806316c02129146102b257806318160ddd146102ee5780631c6a0c4c146103185780631e89d54514610340576101f8565b806306fdde03146101fc578063095ea7b3146102265780630a3ccb231461026257806314aec7481461028a576101f8565b366101f857005b5f80fd5b348015610207575f80fd5b506102106107a8565b60405161021d9190612185565b60405180910390f35b348015610231575f80fd5b5061024c6004803603810190610247919061223a565b610838565b6040516102599190612292565b60405180910390f35b34801561026d575f80fd5b50610288600480360381019061028391906122d5565b61085a565b005b348015610295575f80fd5b506102b060048036038101906102ab9190612300565b61087f565b005b3480156102bd575f80fd5b506102d860048036038101906102d3919061233e565b6108ab565b6040516102e59190612292565b60405180910390f35b3480156102f9575f80fd5b506103026108c8565b60405161030f9190612378565b60405180910390f35b348015610323575f80fd5b5061033e60048036038101906103399190612391565b6108d1565b005b34801561034b575f80fd5b5061036660048036038101906103619190612472565b610920565b005b348015610373575f80fd5b5061038e600480360381019061038991906124f0565b610ab6565b60405161039b9190612292565b60405180910390f35b3480156103af575f80fd5b506103b8610ae4565b6040516103c59190612292565b60405180910390f35b3480156103d9575f80fd5b506103e2610af6565b6040516103ef919061254f565b60405180910390f35b348015610403575f80fd5b5061041e60048036038101906104199190612391565b610b1b565b005b34801561042b575f80fd5b50610434610b2d565b6040516104419190612583565b60405180910390f35b348015610455575f80fd5b50610470600480360381019061046b919061259c565b610b35565b005b34801561047d575f80fd5b50610486610b95565b604051610493919061254f565b60405180910390f35b3480156104a7575f80fd5b506104b0610bbb565b6040516104bd9190612292565b60405180910390f35b3480156104d1575f80fd5b506104ec60048036038101906104e79190612391565b610bce565b005b3480156104f9575f80fd5b50610514600480360381019061050f91906125da565b610be0565b005b348015610521575f80fd5b5061052a610cdd565b6040516105379190612378565b60405180910390f35b34801561054b575f80fd5b506105666004803603810190610561919061233e565b610ce3565b6040516105739190612378565b60405180910390f35b348015610587575f80fd5b50610590610d29565b005b34801561059d575f80fd5b506105a6610d3c565b6040516105b39190612378565b60405180910390f35b3480156105c7575f80fd5b506105d0610d42565b6040516105dd919061254f565b60405180910390f35b3480156105f1575f80fd5b506105fa610d69565b6040516106079190612185565b60405180910390f35b34801561061b575f80fd5b5061063660048036038101906106319190612637565b610df9565b005b348015610643575f80fd5b5061064c610ea2565b6040516106599190612378565b60405180910390f35b34801561066d575f80fd5b506106886004803603810190610683919061223a565b610ea8565b6040516106959190612292565b60405180910390f35b3480156106a9575f80fd5b506106b2610eca565b6040516106bf919061254f565b60405180910390f35b3480156106d3575f80fd5b506106ee60048036038101906106e9919061233e565b610eef565b005b3480156106fb575f80fd5b5061071660048036038101906107119190612694565b610fed565b6040516107239190612378565b60405180910390f35b348015610737575f80fd5b5061074061106f565b60405161074d919061254f565b60405180910390f35b348015610761575f80fd5b5061076a611094565b604051610777919061272d565b60405180910390f35b34801561078b575f80fd5b506107a660048036038101906107a1919061233e565b6110b9565b005b6060600480546107b790612773565b80601f01602080910402602001604051908101604052809291908181526020018280546107e390612773565b801561082e5780601f106108055761010080835404028352916020019161082e565b820191905f5260205f20905b81548152906001019060200180831161081157829003601f168201915b5050505050905090565b5f8061084261113d565b905061084f818585611144565b600191505092915050565b610862611156565b80600d60016101000a81548160ff02191690831515021790555050565b610887611156565b81600d5f6101000a81548160ff02191690831515021790555080600b819055505050565b6006602052805f5260405f205f915054906101000a900460ff1681565b5f600354905090565b6108d9611156565b3373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561091c573d5f803e3d5ffd5b5050565b6103218484905010610967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095e90612813565b60405180910390fd5b8181905084849050146109af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a6906128a1565b60405180910390fd5b5f805b858590508110156109f7578383828181106109d0576109cf6128bf565b5b90506020020135826109e29190612919565b915080806109ef9061294c565b9150506109b2565b5080610a0233610ce3565b1015610a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3a906129dd565b60405180910390fd5b5f5b85859050811015610aae57610a9b33878784818110610a6757610a666128bf565b5b9050602002016020810190610a7c919061233e565b868685818110610a8f57610a8e6128bf565b5b905060200201356111dd565b8080610aa69061294c565b915050610a45565b505050505050565b5f80610ac061113d565b9050610acd8582856117f6565b610ad88585856111dd565b60019150509392505050565b600d5f9054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b23611156565b80600a8190555050565b5f6012905090565b610b3d611156565b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60019054906101000a900460ff1681565b610bd6611156565b80600c8190555050565b6107d18383905010610c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1e90612a6b565b60405180910390fd5b5f8383905082610c379190612a89565b905080610c4333610ce3565b1015610c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7b906129dd565b60405180910390fd5b5f5b84849050811015610cd657610cc333868684818110610ca857610ca76128bf565b5b9050602002016020810190610cbd919061233e565b856111dd565b8080610cce9061294c565b915050610c86565b5050505050565b600b5481565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610d31611156565b610d3a5f611888565b565b600c5481565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610d7890612773565b80601f0160208091040260200160405190810160405280929190818152602001828054610da490612773565b8015610def5780601f10610dc657610100808354040283529160200191610def565b820191905f5260205f20905b815481529060010190602001808311610dd257829003601f168201915b5050505050905090565b610e01611156565b5f5b83839050811015610e9c578160065f868685818110610e2557610e246128bf565b5b9050602002016020810190610e3a919061233e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080610e949061294c565b915050610e03565b50505050565b600a5481565b5f80610eb261113d565b9050610ebf8185856111dd565b600191505092915050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ef7611156565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f4d919061254f565b602060405180830381865afa158015610f68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8c9190612ade565b6040518363ffffffff1660e01b8152600401610fa9929190612b09565b6020604051808303815f875af1158015610fc5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fe99190612b44565b5050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110c1611156565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611131575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611128919061254f565b60405180910390fd5b61113a81611888565b50565b5f33905090565b6111518383836001611949565b505050565b61115e61113d565b73ffffffffffffffffffffffffffffffffffffffff1661117c610d42565b73ffffffffffffffffffffffffffffffffffffffff16146111db5761119f61113d565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016111d2919061254f565b60405180910390fd5b565b60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561127b575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b6112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b190612bb9565b60405180910390fd5b6112c2610d42565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611347575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061139e5750600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806113f5575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806114325750611403610d42565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80611489575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806114e0575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806115375750600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061156d57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806115a357503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156115b8576115b3838383611b18565b6117f1565b8273ffffffffffffffffffffffffffffffffffffffff16600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061166157508173ffffffffffffffffffffffffffffffffffffffff16600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b156117e557600d5f9054906101000a900460ff1680156116ce57508273ffffffffffffffffffffffffffffffffffffffff16600d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b801561172757508173ffffffffffffffffffffffffffffffffffffffff16600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561178457600b5461173883610ce3565b826117439190612919565b10611783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177a90612c21565b60405180910390fd5b5b5f606482600a546117959190612a89565b61179f9190612c6c565b90506117ac843083611b18565b600e60149054906101000a900460ff166117c9576117c8611c08565b5b6117df848483856117da9190612c9c565b611b18565b506117f1565b6117f0838383611b18565b5b505050565b5f6118018484610fed565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118825781811015611873578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161186a93929190612ccf565b60405180910390fd5b61188184848484035f611949565b5b50505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036119b9575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016119b0919061254f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a29575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611a20919061254f565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611b12578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611b099190612378565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b88575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611b7f919061254f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bf8575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611bef919061254f565b60405180910390fd5b611c03838383611edf565b505050565b6001600e60146101000a81548160ff0219169083151502179055505f611c2d30610ce3565b9050600c54811115611ec2575f600267ffffffffffffffff811115611c5557611c54612d04565b5b604051908082528060200260200182016040528015611c835781602001602082028036833780820191505090505b50905030815f81518110611c9a57611c996128bf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110611d0a57611d096128bf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f600283611d529190612c6c565b9050600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795825f8560075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611dd7959493929190612e21565b5f604051808303815f87803b158015611dee575f80fd5b505af1158015611e00573d5f803e3d5ffd5b50505050600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d7958285611e4d9190612c9c565b5f8560085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611e92959493929190612e21565b5f604051808303815f87803b158015611ea9575f80fd5b505af1158015611ebb573d5f803e3d5ffd5b5050505050505b505f600e60146101000a81548160ff021916908315150217905550565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f2f578060035f828254611f239190612919565b92505081905550611fff565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611fb9578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611fb093929190612ccf565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612046578060035f8282540392505081905550612091565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516120ee9190612378565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612132578082015181840152602081019050612117565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612157826120fb565b6121618185612105565b9350612171818560208601612115565b61217a8161213d565b840191505092915050565b5f6020820190508181035f83015261219d818461214d565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6121d6826121ad565b9050919050565b6121e6816121cc565b81146121f0575f80fd5b50565b5f81359050612201816121dd565b92915050565b5f819050919050565b61221981612207565b8114612223575f80fd5b50565b5f8135905061223481612210565b92915050565b5f80604083850312156122505761224f6121a5565b5b5f61225d858286016121f3565b925050602061226e85828601612226565b9150509250929050565b5f8115159050919050565b61228c81612278565b82525050565b5f6020820190506122a55f830184612283565b92915050565b6122b481612278565b81146122be575f80fd5b50565b5f813590506122cf816122ab565b92915050565b5f602082840312156122ea576122e96121a5565b5b5f6122f7848285016122c1565b91505092915050565b5f8060408385031215612316576123156121a5565b5b5f612323858286016122c1565b925050602061233485828601612226565b9150509250929050565b5f60208284031215612353576123526121a5565b5b5f612360848285016121f3565b91505092915050565b61237281612207565b82525050565b5f60208201905061238b5f830184612369565b92915050565b5f602082840312156123a6576123a56121a5565b5b5f6123b384828501612226565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126123dd576123dc6123bc565b5b8235905067ffffffffffffffff8111156123fa576123f96123c0565b5b602083019150836020820283011115612416576124156123c4565b5b9250929050565b5f8083601f840112612432576124316123bc565b5b8235905067ffffffffffffffff81111561244f5761244e6123c0565b5b60208301915083602082028301111561246b5761246a6123c4565b5b9250929050565b5f805f806040858703121561248a576124896121a5565b5b5f85013567ffffffffffffffff8111156124a7576124a66121a9565b5b6124b3878288016123c8565b9450945050602085013567ffffffffffffffff8111156124d6576124d56121a9565b5b6124e28782880161241d565b925092505092959194509250565b5f805f60608486031215612507576125066121a5565b5b5f612514868287016121f3565b9350506020612525868287016121f3565b925050604061253686828701612226565b9150509250925092565b612549816121cc565b82525050565b5f6020820190506125625f830184612540565b92915050565b5f60ff82169050919050565b61257d81612568565b82525050565b5f6020820190506125965f830184612574565b92915050565b5f80604083850312156125b2576125b16121a5565b5b5f6125bf858286016121f3565b92505060206125d0858286016122c1565b9150509250929050565b5f805f604084860312156125f1576125f06121a5565b5b5f84013567ffffffffffffffff81111561260e5761260d6121a9565b5b61261a868287016123c8565b9350935050602061262d86828701612226565b9150509250925092565b5f805f6040848603121561264e5761264d6121a5565b5b5f84013567ffffffffffffffff81111561266b5761266a6121a9565b5b612677868287016123c8565b9350935050602061268a868287016122c1565b9150509250925092565b5f80604083850312156126aa576126a96121a5565b5b5f6126b7858286016121f3565b92505060206126c8858286016121f3565b9150509250929050565b5f819050919050565b5f6126f56126f06126eb846121ad565b6126d2565b6121ad565b9050919050565b5f612706826126db565b9050919050565b5f612717826126fc565b9050919050565b6127278161270d565b82525050565b5f6020820190506127405f83018461271e565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061278a57607f821691505b60208210810361279d5761279c612746565b5b50919050565b7f474153204572726f723a206d61782061697264726f70206c696d6974206973205f8201527f3530302061646472657373657300000000000000000000000000000000000000602082015250565b5f6127fd602d83612105565b9150612808826127a3565b604082019050919050565b5f6020820190508181035f83015261282a816127f1565b9050919050565b7f4d69736d61746368206265747765656e204164647265737320616e6420746f6b5f8201527f656e20636f756e74000000000000000000000000000000000000000000000000602082015250565b5f61288b602883612105565b915061289682612831565b604082019050919050565b5f6020820190508181035f8301526128b88161287f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61292382612207565b915061292e83612207565b9250828201905080821115612946576129456128ec565b5b92915050565b5f61295682612207565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612988576129876128ec565b5b600182019050919050565b7f4e6f7420656e6f75676820616d6f756e7420696e2077616c6c657400000000005f82015250565b5f6129c7601b83612105565b91506129d282612993565b602082019050919050565b5f6020820190508181035f8301526129f4816129bb565b9050919050565b7f474153204572726f723a206d61782061697264726f70206c696d6974206973205f8201527f3230303020616464726573736573000000000000000000000000000000000000602082015250565b5f612a55602e83612105565b9150612a60826129fb565b604082019050919050565b5f6020820190508181035f830152612a8281612a49565b9050919050565b5f612a9382612207565b9150612a9e83612207565b9250828202612aac81612207565b91508282048414831517612ac357612ac26128ec565b5b5092915050565b5f81519050612ad881612210565b92915050565b5f60208284031215612af357612af26121a5565b5b5f612b0084828501612aca565b91505092915050565b5f604082019050612b1c5f830185612540565b612b296020830184612369565b9392505050565b5f81519050612b3e816122ab565b92915050565b5f60208284031215612b5957612b586121a5565b5b5f612b6684828501612b30565b91505092915050565b7f426c61636b6c69737465640000000000000000000000000000000000000000005f82015250565b5f612ba3600b83612105565b9150612bae82612b6f565b602082019050919050565b5f6020820190508181035f830152612bd081612b97565b9050919050565b7f6c696d69740000000000000000000000000000000000000000000000000000005f82015250565b5f612c0b600583612105565b9150612c1682612bd7565b602082019050919050565b5f6020820190508181035f830152612c3881612bff565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612c7682612207565b9150612c8183612207565b925082612c9157612c90612c3f565b5b828204905092915050565b5f612ca682612207565b9150612cb183612207565b9250828203905081811115612cc957612cc86128ec565b5b92915050565b5f606082019050612ce25f830186612540565b612cef6020830185612369565b612cfc6040830184612369565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050919050565b5f612d54612d4f612d4a84612d31565b6126d2565b612207565b9050919050565b612d6481612d3a565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612d9c816121cc565b82525050565b5f612dad8383612d93565b60208301905092915050565b5f602082019050919050565b5f612dcf82612d6a565b612dd98185612d74565b9350612de483612d84565b805f5b83811015612e14578151612dfb8882612da2565b9750612e0683612db9565b925050600181019050612de7565b5085935050505092915050565b5f60a082019050612e345f830188612369565b612e416020830187612d5b565b8181036040830152612e538186612dc5565b9050612e626060830185612540565b612e6f6080830184612369565b969550505050505056fea2646970667358221220a4b362e18045e1587e60a8f469fbae260c46953882155b0c8d368e3ac08b007964736f6c63430008140033

Deployed Bytecode Sourcemap

1033:5138:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:89:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4293:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4172:91:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3932:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1072:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3144:97:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6013:110:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4762:631;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5039:244:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1395:26:6;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1121:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4083:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3002:82:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4386:135:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1461:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1428:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4271:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5401:443;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1330:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3299:116:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2293:101:0;;;;;;;;;;;;;:::i;:::-;;1363:25:6;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1638:85:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2276:93:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4529:225:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1301:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3610:178:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1275:19:6;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5852:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3846:140:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1197:71:6;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1496:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2543:215:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2074:89:2;2119:13;2151:5;2144:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:89;:::o;4293:186::-;4366:4;4382:13;4398:12;:10;:12::i;:::-;4382:28;;4420:31;4429:5;4436:7;4445:5;4420:8;:31::i;:::-;4468:4;4461:11;;;4293:186;;;;:::o;4172:91:6:-;1531:13:0;:11;:13::i;:::-;4246:9:6::1;4236:7;;:19;;;;;;;;;;;;;;;;;;4172:91:::0;:::o;3932:143::-;1531:13:0;:11;:13::i;:::-;4024:6:6::1;4015;;:15;;;;;;;;;;;;;;;;;;4055:12;4041:11;:26;;;;3932:143:::0;;:::o;1072:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;3144:97:2:-;3196:7;3222:12;;3215:19;;3144:97;:::o;6013:110:6:-;1531:13:0;:11;:13::i;:::-;6087:10:6::1;6079:28;;:36;6108:6;6079:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;6013:110:::0;:::o;4762:631::-;4888:3;4869:9;;:16;;:22;4861:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;4980:7;;:14;;4960:9;;:16;;:34;4952:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;5052:11;5083:9;5078:96;5102:9;;:16;;5098:1;:20;5078:96;;;5152:7;;5160:1;5152:10;;;;;;;:::i;:::-;;;;;;;;5146:3;:16;;;;:::i;:::-;5140:22;;5120:3;;;;;:::i;:::-;;;;5078:96;;;;5219:3;5194:21;5204:10;5194:9;:21::i;:::-;:28;;5186:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5270:9;5265:121;5289:9;;:16;;5285:1;:20;5265:121;;;5327:47;5337:10;5349:9;;5359:1;5349:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;5363:7;;5371:1;5363:10;;;;;;;:::i;:::-;;;;;;;;5327:9;:47::i;:::-;5307:3;;;;;:::i;:::-;;;;5265:121;;;;4850:543;4762:631;;;;:::o;5039:244:2:-;5126:4;5142:15;5160:12;:10;:12::i;:::-;5142:30;;5182:37;5198:4;5204:7;5213:5;5182:15;:37::i;:::-;5229:26;5239:4;5245:2;5249:5;5229:9;:26::i;:::-;5272:4;5265:11;;;5039:244;;;;;:::o;1395:26:6:-;;;;;;;;;;;;;:::o;1121:69::-;;;;;;;;;;;;;:::o;4083:81::-;1531:13:0;:11;:13::i;:::-;4149:4:6::1;4143:3;:10;;;;4083:81:::0;:::o;3002:82:2:-;3051:5;3075:2;3068:9;;3002:82;:::o;4386:135:6:-;1531:13:0;:11;:13::i;:::-;4498:15:6::1;4475:10;:20;4486:8;4475:20;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;4386:135:::0;;:::o;1461:28::-;;;;;;;;;;;;;:::o;1428:26::-;;;;;;;;;;;;;:::o;4271:107::-;1531:13:0;:11;:13::i;:::-;4359:11:6::1;4346:10;:24;;;;4271:107:::0;:::o;5401:443::-;5521:4;5502:9;;:16;;:23;5494:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;5589:11;5612:9;;:16;;5603:6;:25;;;;:::i;:::-;5589:39;;5672:3;5647:21;5657:10;5647:9;:21::i;:::-;:28;;5639:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5725:9;5720:117;5744:9;;:16;;5740:1;:20;5720:117;;;5782:43;5792:10;5804:9;;5814:1;5804:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;5818:6;5782:9;:43::i;:::-;5762:3;;;;;:::i;:::-;;;;5720:117;;;;5483:361;5401:443;;;:::o;1330:26::-;;;;:::o;3299:116:2:-;3364:7;3390:9;:18;3400:7;3390:18;;;;;;;;;;;;;;;;3383:25;;3299:116;;;:::o;2293:101:0:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;1363:25:6:-;;;;:::o;1638:85:0:-;1684:7;1710:6;;;;;;;;;;;1703:13;;1638:85;:::o;2276:93:2:-;2323:13;2355:7;2348:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2276:93;:::o;4529:225:6:-;1531:13:0;:11;:13::i;:::-;4636:9:6::1;4631:116;4655:9;;:16;;4651:1;:20;4631:116;;;4720:15;4693:10;:24;4704:9;;4714:1;4704:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;4693:24;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;4673:3;;;;;:::i;:::-;;;;4631:116;;;;4529:225:::0;;;:::o;1301:22::-;;;;:::o;3610:178:2:-;3679:4;3695:13;3711:12;:10;:12::i;:::-;3695:28;;3733:27;3743:5;3750:2;3754:5;3733:9;:27::i;:::-;3777:4;3770:11;;;3610:178;;;;:::o;1275:19:6:-;;;;;;;;;;;;;:::o;5852:149::-;1531:13:0;:11;:13::i;:::-;5924:6:6::1;5918:22;;;5941:10;5960:6;5953:24;;;5986:4;5953:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5918:75;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5852:149:::0;:::o;3846:140:2:-;3926:7;3952:11;:18;3964:5;3952:18;;;;;;;;;;;;;;;:27;3971:7;3952:27;;;;;;;;;;;;;;;;3945:34;;3846:140;;;;:::o;1197:71:6:-;;;;;;;;;;;;;:::o;1496:22::-;;;;;;;;;;;;;:::o;2543:215:0:-;1531:13;:11;:13::i;:::-;2647:1:::1;2627:22;;:8;:22;;::::0;2623:91:::1;;2700:1;2672:31;;;;;;;;;;;:::i;:::-;;;;;;;;2623:91;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;656:96:5:-;709:7;735:10;728:17;;656:96;:::o;8997:128:2:-;9081:37;9090:5;9097:7;9106:5;9113:4;9081:8;:37::i;:::-;8997:128;;;:::o;1796:162:0:-;1866:12;:10;:12::i;:::-;1855:23;;:7;:5;:7::i;:::-;:23;;;1851:101;;1928:12;:10;:12::i;:::-;1901:40;;;;;;;;;;;:::i;:::-;;;;;;;;1851:101;1796:162::o;2156:1085:6:-;2255:10;:14;2266:2;2255:14;;;;;;;;;;;;;;;;;;;;;;;;;2254:15;:36;;;;;2274:10;:16;2285:4;2274:16;;;;;;;;;;;;;;;;;;;;;;;;;2273:17;2254:36;2246:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;2330:7;:5;:7::i;:::-;2322:15;;:4;:15;;;:46;;;;2359:9;;;;;;;;;;;2351:17;;:4;:17;;;2322:46;:83;;;;2397:7;;;;;;;;;;;2381:24;;:4;:24;;;2322:83;:115;;;;2426:11;;;;;;;;;;;2418:19;;:4;:19;;;2322:115;:141;;;;2456:7;:5;:7::i;:::-;2450:13;;:2;:13;;;2322:141;:170;;;;2483:9;;;;;;;;;;;2477:15;;:2;:15;;;2322:170;:200;;;;2511:11;;;;;;;;;;;2505:17;;:2;:17;;;2322:200;:235;;;;2549:7;;;;;;;;;;;2535:22;;:2;:22;;;2322:235;:269;;;;2586:4;2570:21;;:4;:21;;;2322:269;:301;;;;2618:4;2604:19;;:2;:19;;;2322:301;2319:387;;;2640:33;2656:4;2662:2;2666:6;2640:15;:33::i;:::-;2688:7;;2319:387;2739:4;2721:22;;:13;;;;;;;;;;;:22;;;:46;;;;2765:2;2747:20;;:13;;;;;;;;;;;:20;;;2721:46;2718:472;;;2787:6;;;;;;;;;;;:32;;;;;2815:4;2797:22;;:13;;;;;;;;;;;:22;;;2787:32;:58;;;;;2843:2;2823:22;;2831:7;;;;;;;;;;;2823:22;;;;2787:58;2784:153;;;2900:11;;2883:13;2893:2;2883:9;:13::i;:::-;2874:6;:22;;;;:::i;:::-;2873:38;2865:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2784:153;2951:9;2978:3;2969:6;2963:3;;:12;;;;:::i;:::-;:18;;;;:::i;:::-;2951:30;;2996:39;3012:4;3026;3033:1;2996:15;:39::i;:::-;3054:6;;;;;;;;;;;3050:56;;3081:9;:7;:9::i;:::-;3050:56;3120:37;3136:4;3142:2;3155:1;3146:6;:10;;;;:::i;:::-;3120:15;:37::i;:::-;3172:7;;;2718:472;3200:33;3216:4;3222:2;3226:6;3200:15;:33::i;:::-;2156:1085;;;;:::o;10671:477:2:-;10770:24;10797:25;10807:5;10814:7;10797:9;:25::i;:::-;10770:52;;10856:17;10836:16;:37;10832:310;;10912:5;10893:16;:24;10889:130;;;10971:7;10980:16;10998:5;10944:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;10889:130;11060:57;11069:5;11076:7;11104:5;11085:16;:24;11111:5;11060:8;:57::i;:::-;10832:310;10760:388;10671:477;;;:::o;2912:187:0:-;2985:16;3004:6;;;;;;;;;;;2985:25;;3029:8;3020:6;;:17;;;;;;;;;;;;;;;;;;3083:8;3052:40;;3073:8;3052:40;;;;;;;;;;;;2975:124;2912:187;:::o;9957:432:2:-;10086:1;10069:19;;:5;:19;;;10065:89;;10140:1;10111:32;;;;;;;;;;;:::i;:::-;;;;;;;;10065:89;10186:1;10167:21;;:7;:21;;;10163:90;;10239:1;10211:31;;;;;;;;;;;:::i;:::-;;;;;;;;10163:90;10292:5;10262:11;:18;10274:5;10262:18;;;;;;;;;;;;;;;:27;10281:7;10262:27;;;;;;;;;;;;;;;:35;;;;10311:9;10307:76;;;10357:7;10341:31;;10350:5;10341:31;;;10366:5;10341:31;;;;;;:::i;:::-;;;;;;;;10307:76;9957:432;;;;:::o;5656:308::-;5763:1;5747:18;;:4;:18;;;5743:86;;5815:1;5788:30;;;;;;;;;;;:::i;:::-;;;;;;;;5743:86;5856:1;5842:16;;:2;:16;;;5838:86;;5910:1;5881:32;;;;;;;;;;;:::i;:::-;;;;;;;;5838:86;5933:24;5941:4;5947:2;5951:5;5933:7;:24::i;:::-;5656:308;;;:::o;3373:551:6:-;3316:4;3307:6;;:13;;;;;;;;;;;;;;;;;;3423:15:::1;3441:24;3459:4;3441:9;:24::i;:::-;3423:42;;3489:10;;3479:7;:20;3476:441;;;3516:21;3554:1;3540:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3516:40;;3589:4;3571;3576:1;3571:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;3619:4;;;;;;;;;;;3609;3614:1;3609:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;3638:9;3660:1;3650:7;:11;;;;:::i;:::-;3638:23;;3676:7;;;;;;;;;;;:61;;;3738:1;3741;3744:4;3750:9;;;;;;;;;;;3761:15;3676:101;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3792:7;;;;;;;;;;;:61;;;3864:1;3854:7;:11;;;;:::i;:::-;3867:1;3870:4;3876:11;;;;;;;;;;;3889:15;3792:113;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3501:416;;3476:441;3412:512;3352:5:::0;3343:6;;:14;;;;;;;;;;;;;;;;;;3373:551::o;6279:1107:2:-;6384:1;6368:18;;:4;:18;;;6364:540;;6520:5;6504:12;;:21;;;;;;;:::i;:::-;;;;;;;;6364:540;;;6556:19;6578:9;:15;6588:4;6578:15;;;;;;;;;;;;;;;;6556:37;;6625:5;6611:11;:19;6607:115;;;6682:4;6688:11;6701:5;6657:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;6607:115;6874:5;6860:11;:19;6842:9;:15;6852:4;6842:15;;;;;;;;;;;;;;;:37;;;;6542:362;6364:540;6932:1;6918:16;;:2;:16;;;6914:425;;7097:5;7081:12;;:21;;;;;;;;;;;6914:425;;;7309:5;7292:9;:13;7302:2;7292:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;6914:425;7369:2;7354:25;;7363:4;7354:25;;;7373:5;7354:25;;;;;;:::i;:::-;;;;;;;;6279:1107;;;:::o;7:99:7:-;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;1553:117;1662:1;1659;1652: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:116::-;3516:21;3531:5;3516:21;:::i;:::-;3509:5;3506:32;3496:60;;3552:1;3549;3542:12;3496:60;3446:116;:::o;3568:133::-;3611:5;3649:6;3636:20;3627:29;;3665:30;3689:5;3665:30;:::i;:::-;3568:133;;;;:::o;3707:323::-;3763:6;3812:2;3800:9;3791:7;3787:23;3783:32;3780:119;;;3818:79;;:::i;:::-;3780:119;3938:1;3963:50;4005:7;3996:6;3985:9;3981:22;3963:50;:::i;:::-;3953:60;;3909:114;3707:323;;;;:::o;4036:468::-;4101:6;4109;4158:2;4146:9;4137:7;4133:23;4129:32;4126:119;;;4164:79;;:::i;:::-;4126:119;4284:1;4309:50;4351:7;4342:6;4331:9;4327:22;4309:50;:::i;:::-;4299:60;;4255:114;4408:2;4434:53;4479:7;4470:6;4459:9;4455:22;4434:53;:::i;:::-;4424:63;;4379:118;4036:468;;;;;:::o;4510:329::-;4569:6;4618:2;4606:9;4597:7;4593:23;4589:32;4586:119;;;4624:79;;:::i;:::-;4586:119;4744:1;4769:53;4814:7;4805:6;4794:9;4790:22;4769:53;:::i;:::-;4759:63;;4715:117;4510:329;;;;:::o;4845:118::-;4932:24;4950:5;4932:24;:::i;:::-;4927:3;4920:37;4845:118;;:::o;4969:222::-;5062:4;5100:2;5089:9;5085:18;5077:26;;5113:71;5181:1;5170:9;5166:17;5157:6;5113:71;:::i;:::-;4969:222;;;;:::o;5197:329::-;5256:6;5305:2;5293:9;5284:7;5280:23;5276:32;5273:119;;;5311:79;;:::i;:::-;5273:119;5431:1;5456:53;5501:7;5492:6;5481:9;5477:22;5456:53;:::i;:::-;5446:63;;5402:117;5197:329;;;;:::o;5532:117::-;5641:1;5638;5631:12;5655:117;5764:1;5761;5754:12;5778:117;5887:1;5884;5877:12;5918:568;5991:8;6001:6;6051:3;6044:4;6036:6;6032:17;6028:27;6018:122;;6059:79;;:::i;:::-;6018:122;6172:6;6159:20;6149:30;;6202:18;6194:6;6191:30;6188:117;;;6224:79;;:::i;:::-;6188:117;6338:4;6330:6;6326:17;6314:29;;6392:3;6384:4;6376:6;6372:17;6362:8;6358:32;6355:41;6352:128;;;6399:79;;:::i;:::-;6352:128;5918:568;;;;;:::o;6509:::-;6582:8;6592:6;6642:3;6635:4;6627:6;6623:17;6619:27;6609:122;;6650:79;;:::i;:::-;6609:122;6763:6;6750:20;6740:30;;6793:18;6785:6;6782:30;6779:117;;;6815:79;;:::i;:::-;6779:117;6929:4;6921:6;6917:17;6905:29;;6983:3;6975:4;6967:6;6963:17;6953:8;6949:32;6946:41;6943:128;;;6990:79;;:::i;:::-;6943:128;6509:568;;;;;:::o;7083:934::-;7205:6;7213;7221;7229;7278:2;7266:9;7257:7;7253:23;7249:32;7246:119;;;7284:79;;:::i;:::-;7246:119;7432:1;7421:9;7417:17;7404:31;7462:18;7454:6;7451:30;7448:117;;;7484:79;;:::i;:::-;7448:117;7597:80;7669:7;7660:6;7649:9;7645:22;7597:80;:::i;:::-;7579:98;;;;7375:312;7754:2;7743:9;7739:18;7726:32;7785:18;7777:6;7774:30;7771:117;;;7807:79;;:::i;:::-;7771:117;7920:80;7992:7;7983:6;7972:9;7968:22;7920:80;:::i;:::-;7902:98;;;;7697:313;7083:934;;;;;;;:::o;8023:619::-;8100:6;8108;8116;8165:2;8153:9;8144:7;8140:23;8136:32;8133:119;;;8171:79;;:::i;:::-;8133:119;8291:1;8316:53;8361:7;8352:6;8341:9;8337:22;8316:53;:::i;:::-;8306:63;;8262:117;8418:2;8444:53;8489:7;8480:6;8469:9;8465:22;8444:53;:::i;:::-;8434:63;;8389:118;8546:2;8572:53;8617:7;8608:6;8597:9;8593:22;8572:53;:::i;:::-;8562:63;;8517:118;8023:619;;;;;:::o;8648:118::-;8735:24;8753:5;8735:24;:::i;:::-;8730:3;8723:37;8648:118;;:::o;8772:222::-;8865:4;8903:2;8892:9;8888:18;8880:26;;8916:71;8984:1;8973:9;8969:17;8960:6;8916:71;:::i;:::-;8772:222;;;;:::o;9000:86::-;9035:7;9075:4;9068:5;9064:16;9053:27;;9000:86;;;:::o;9092:112::-;9175:22;9191:5;9175:22;:::i;:::-;9170:3;9163:35;9092:112;;:::o;9210:214::-;9299:4;9337:2;9326:9;9322:18;9314:26;;9350:67;9414:1;9403:9;9399:17;9390:6;9350:67;:::i;:::-;9210:214;;;;:::o;9430:468::-;9495:6;9503;9552:2;9540:9;9531:7;9527:23;9523:32;9520:119;;;9558:79;;:::i;:::-;9520:119;9678:1;9703:53;9748:7;9739:6;9728:9;9724:22;9703:53;:::i;:::-;9693:63;;9649:117;9805:2;9831:50;9873:7;9864:6;9853:9;9849:22;9831:50;:::i;:::-;9821:60;;9776:115;9430:468;;;;;:::o;9904:704::-;9999:6;10007;10015;10064:2;10052:9;10043:7;10039:23;10035:32;10032:119;;;10070:79;;:::i;:::-;10032:119;10218:1;10207:9;10203:17;10190:31;10248:18;10240:6;10237:30;10234:117;;;10270:79;;:::i;:::-;10234:117;10383:80;10455:7;10446:6;10435:9;10431:22;10383:80;:::i;:::-;10365:98;;;;10161:312;10512:2;10538:53;10583:7;10574:6;10563:9;10559:22;10538:53;:::i;:::-;10528:63;;10483:118;9904:704;;;;;:::o;10614:698::-;10706:6;10714;10722;10771:2;10759:9;10750:7;10746:23;10742:32;10739:119;;;10777:79;;:::i;:::-;10739:119;10925:1;10914:9;10910:17;10897:31;10955:18;10947:6;10944:30;10941:117;;;10977:79;;:::i;:::-;10941:117;11090:80;11162:7;11153:6;11142:9;11138:22;11090:80;:::i;:::-;11072:98;;;;10868:312;11219:2;11245:50;11287:7;11278:6;11267:9;11263:22;11245:50;:::i;:::-;11235:60;;11190:115;10614:698;;;;;:::o;11318:474::-;11386:6;11394;11443:2;11431:9;11422:7;11418:23;11414:32;11411:119;;;11449:79;;:::i;:::-;11411:119;11569:1;11594:53;11639:7;11630:6;11619:9;11615:22;11594:53;:::i;:::-;11584:63;;11540:117;11696:2;11722:53;11767:7;11758:6;11747:9;11743:22;11722:53;:::i;:::-;11712:63;;11667:118;11318:474;;;;;:::o;11798:60::-;11826:3;11847:5;11840:12;;11798:60;;;:::o;11864:142::-;11914:9;11947:53;11965:34;11974:24;11992:5;11974:24;:::i;:::-;11965:34;:::i;:::-;11947:53;:::i;:::-;11934:66;;11864:142;;;:::o;12012:126::-;12062:9;12095:37;12126:5;12095:37;:::i;:::-;12082:50;;12012:126;;;:::o;12144:141::-;12209:9;12242:37;12273:5;12242:37;:::i;:::-;12229:50;;12144:141;;;:::o;12291:161::-;12393:52;12439:5;12393:52;:::i;:::-;12388:3;12381:65;12291:161;;:::o;12458:252::-;12566:4;12604:2;12593:9;12589:18;12581:26;;12617:86;12700:1;12689:9;12685:17;12676:6;12617:86;:::i;:::-;12458:252;;;;:::o;12716:180::-;12764:77;12761:1;12754:88;12861:4;12858:1;12851:15;12885:4;12882:1;12875:15;12902:320;12946:6;12983:1;12977:4;12973:12;12963:22;;13030:1;13024:4;13020:12;13051:18;13041:81;;13107:4;13099:6;13095:17;13085:27;;13041:81;13169:2;13161:6;13158:14;13138:18;13135:38;13132:84;;13188:18;;:::i;:::-;13132:84;12953:269;12902:320;;;:::o;13228:232::-;13368:34;13364:1;13356:6;13352:14;13345:58;13437:15;13432:2;13424:6;13420:15;13413:40;13228:232;:::o;13466:366::-;13608:3;13629:67;13693:2;13688:3;13629:67;:::i;:::-;13622:74;;13705:93;13794:3;13705:93;:::i;:::-;13823:2;13818:3;13814:12;13807:19;;13466:366;;;:::o;13838:419::-;14004:4;14042:2;14031:9;14027:18;14019:26;;14091:9;14085:4;14081:20;14077:1;14066:9;14062:17;14055:47;14119:131;14245:4;14119:131;:::i;:::-;14111:139;;13838:419;;;:::o;14263:227::-;14403:34;14399:1;14391:6;14387:14;14380:58;14472:10;14467:2;14459:6;14455:15;14448:35;14263:227;:::o;14496:366::-;14638:3;14659:67;14723:2;14718:3;14659:67;:::i;:::-;14652:74;;14735:93;14824:3;14735:93;:::i;:::-;14853:2;14848:3;14844:12;14837:19;;14496:366;;;:::o;14868:419::-;15034:4;15072:2;15061:9;15057:18;15049:26;;15121:9;15115:4;15111:20;15107:1;15096:9;15092:17;15085:47;15149:131;15275:4;15149:131;:::i;:::-;15141:139;;14868:419;;;:::o;15293:180::-;15341:77;15338:1;15331:88;15438:4;15435:1;15428:15;15462:4;15459:1;15452:15;15479:180;15527:77;15524:1;15517:88;15624:4;15621:1;15614:15;15648:4;15645:1;15638:15;15665:191;15705:3;15724:20;15742:1;15724:20;:::i;:::-;15719:25;;15758:20;15776:1;15758:20;:::i;:::-;15753:25;;15801:1;15798;15794:9;15787:16;;15822:3;15819:1;15816:10;15813:36;;;15829:18;;:::i;:::-;15813:36;15665:191;;;;:::o;15862:233::-;15901:3;15924:24;15942:5;15924:24;:::i;:::-;15915:33;;15970:66;15963:5;15960:77;15957:103;;16040:18;;:::i;:::-;15957:103;16087:1;16080:5;16076:13;16069:20;;15862:233;;;:::o;16101:177::-;16241:29;16237:1;16229:6;16225:14;16218:53;16101:177;:::o;16284:366::-;16426:3;16447:67;16511:2;16506:3;16447:67;:::i;:::-;16440:74;;16523:93;16612:3;16523:93;:::i;:::-;16641:2;16636:3;16632:12;16625:19;;16284:366;;;:::o;16656:419::-;16822:4;16860:2;16849:9;16845:18;16837:26;;16909:9;16903:4;16899:20;16895:1;16884:9;16880:17;16873:47;16937:131;17063:4;16937:131;:::i;:::-;16929:139;;16656:419;;;:::o;17081:233::-;17221:34;17217:1;17209:6;17205:14;17198:58;17290:16;17285:2;17277:6;17273:15;17266:41;17081:233;:::o;17320:366::-;17462:3;17483:67;17547:2;17542:3;17483:67;:::i;:::-;17476:74;;17559:93;17648:3;17559:93;:::i;:::-;17677:2;17672:3;17668:12;17661:19;;17320:366;;;:::o;17692:419::-;17858:4;17896:2;17885:9;17881:18;17873:26;;17945:9;17939:4;17935:20;17931:1;17920:9;17916:17;17909:47;17973:131;18099:4;17973:131;:::i;:::-;17965:139;;17692:419;;;:::o;18117:410::-;18157:7;18180:20;18198:1;18180:20;:::i;:::-;18175:25;;18214:20;18232:1;18214:20;:::i;:::-;18209:25;;18269:1;18266;18262:9;18291:30;18309:11;18291:30;:::i;:::-;18280:41;;18470:1;18461:7;18457:15;18454:1;18451:22;18431:1;18424:9;18404:83;18381:139;;18500:18;;:::i;:::-;18381:139;18165:362;18117:410;;;;:::o;18533:143::-;18590:5;18621:6;18615:13;18606:22;;18637:33;18664:5;18637:33;:::i;:::-;18533:143;;;;:::o;18682:351::-;18752:6;18801:2;18789:9;18780:7;18776:23;18772:32;18769:119;;;18807:79;;:::i;:::-;18769:119;18927:1;18952:64;19008:7;18999:6;18988:9;18984:22;18952:64;:::i;:::-;18942:74;;18898:128;18682:351;;;;:::o;19039:332::-;19160:4;19198:2;19187:9;19183:18;19175:26;;19211:71;19279:1;19268:9;19264:17;19255:6;19211:71;:::i;:::-;19292:72;19360:2;19349:9;19345:18;19336:6;19292:72;:::i;:::-;19039:332;;;;;:::o;19377:137::-;19431:5;19462:6;19456:13;19447:22;;19478:30;19502:5;19478:30;:::i;:::-;19377:137;;;;:::o;19520:345::-;19587:6;19636:2;19624:9;19615:7;19611:23;19607:32;19604:119;;;19642:79;;:::i;:::-;19604:119;19762:1;19787:61;19840:7;19831:6;19820:9;19816:22;19787:61;:::i;:::-;19777:71;;19733:125;19520:345;;;;:::o;19871:161::-;20011:13;20007:1;19999:6;19995:14;19988:37;19871:161;:::o;20038:366::-;20180:3;20201:67;20265:2;20260:3;20201:67;:::i;:::-;20194:74;;20277:93;20366:3;20277:93;:::i;:::-;20395:2;20390:3;20386:12;20379:19;;20038:366;;;:::o;20410:419::-;20576:4;20614:2;20603:9;20599:18;20591:26;;20663:9;20657:4;20653:20;20649:1;20638:9;20634:17;20627:47;20691:131;20817:4;20691:131;:::i;:::-;20683:139;;20410:419;;;:::o;20835:155::-;20975:7;20971:1;20963:6;20959:14;20952:31;20835:155;:::o;20996:365::-;21138:3;21159:66;21223:1;21218:3;21159:66;:::i;:::-;21152:73;;21234:93;21323:3;21234:93;:::i;:::-;21352:2;21347:3;21343:12;21336:19;;20996:365;;;:::o;21367:419::-;21533:4;21571:2;21560:9;21556:18;21548:26;;21620:9;21614:4;21610:20;21606:1;21595:9;21591:17;21584:47;21648:131;21774:4;21648:131;:::i;:::-;21640:139;;21367:419;;;:::o;21792:180::-;21840:77;21837:1;21830:88;21937:4;21934:1;21927:15;21961:4;21958:1;21951:15;21978:185;22018:1;22035:20;22053:1;22035:20;:::i;:::-;22030:25;;22069:20;22087:1;22069:20;:::i;:::-;22064:25;;22108:1;22098:35;;22113:18;;:::i;:::-;22098:35;22155:1;22152;22148:9;22143:14;;21978:185;;;;:::o;22169:194::-;22209:4;22229:20;22247:1;22229:20;:::i;:::-;22224:25;;22263:20;22281:1;22263:20;:::i;:::-;22258:25;;22307:1;22304;22300:9;22292:17;;22331:1;22325:4;22322:11;22319:37;;;22336:18;;:::i;:::-;22319:37;22169:194;;;;:::o;22369:442::-;22518:4;22556:2;22545:9;22541:18;22533:26;;22569:71;22637:1;22626:9;22622:17;22613:6;22569:71;:::i;:::-;22650:72;22718:2;22707:9;22703:18;22694:6;22650:72;:::i;:::-;22732;22800:2;22789:9;22785:18;22776:6;22732:72;:::i;:::-;22369:442;;;;;;:::o;22817:180::-;22865:77;22862:1;22855:88;22962:4;22959:1;22952:15;22986:4;22983:1;22976:15;23003:85;23048:7;23077:5;23066:16;;23003:85;;;:::o;23094:158::-;23152:9;23185:61;23203:42;23212:32;23238:5;23212:32;:::i;:::-;23203:42;:::i;:::-;23185:61;:::i;:::-;23172:74;;23094:158;;;:::o;23258:147::-;23353:45;23392:5;23353:45;:::i;:::-;23348:3;23341:58;23258:147;;:::o;23411:114::-;23478:6;23512:5;23506:12;23496:22;;23411:114;;;:::o;23531:184::-;23630:11;23664:6;23659:3;23652:19;23704:4;23699:3;23695:14;23680:29;;23531:184;;;;:::o;23721:132::-;23788:4;23811:3;23803:11;;23841:4;23836:3;23832:14;23824:22;;23721:132;;;:::o;23859:108::-;23936:24;23954:5;23936:24;:::i;:::-;23931:3;23924:37;23859:108;;:::o;23973:179::-;24042:10;24063:46;24105:3;24097:6;24063:46;:::i;:::-;24141:4;24136:3;24132:14;24118:28;;23973:179;;;;:::o;24158:113::-;24228:4;24260;24255:3;24251:14;24243:22;;24158:113;;;:::o;24307:732::-;24426:3;24455:54;24503:5;24455:54;:::i;:::-;24525:86;24604:6;24599:3;24525:86;:::i;:::-;24518:93;;24635:56;24685:5;24635:56;:::i;:::-;24714:7;24745:1;24730:284;24755:6;24752:1;24749:13;24730:284;;;24831:6;24825:13;24858:63;24917:3;24902:13;24858:63;:::i;:::-;24851:70;;24944:60;24997:6;24944:60;:::i;:::-;24934:70;;24790:224;24777:1;24774;24770:9;24765:14;;24730:284;;;24734:14;25030:3;25023:10;;24431:608;;;24307:732;;;;:::o;25045:831::-;25308:4;25346:3;25335:9;25331:19;25323:27;;25360:71;25428:1;25417:9;25413:17;25404:6;25360:71;:::i;:::-;25441:80;25517:2;25506:9;25502:18;25493:6;25441:80;:::i;:::-;25568:9;25562:4;25558:20;25553:2;25542:9;25538:18;25531:48;25596:108;25699:4;25690:6;25596:108;:::i;:::-;25588:116;;25714:72;25782:2;25771:9;25767:18;25758:6;25714:72;:::i;:::-;25796:73;25864:3;25853:9;25849:19;25840:6;25796:73;:::i;:::-;25045:831;;;;;;;;:::o

Swarm Source

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