ETH Price: $3,304.15 (-3.14%)
Gas: 12 Gwei

Token

Fake Market Cap (CAP)
 

Overview

Max Total Supply

67,357,265,955,819,730,717.531243925487167232 CAP

Holders

850

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
7,993.729653645604272786 CAP

Value
$0.00
0xa8cbbcc05a2b356a7580a372d3ee7c55bf4bbacc
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:
FakeMarketCap

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

//
//      Fake Market Cap
//      
//      @sterlingcrispin 
// 
//      NotAudited.xyz
//
//      no warranty expressed or implied
//
//      this is a social experiment and not an investment
//


// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

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

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

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

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @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: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @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 amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


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

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

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

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




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

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

    // yes that's right I just edited this variable to be public
    // yes I could have done this another way
    // if you are reading this, pllease tweet 
    // "I am an itty bitty baby, I am an itty bitty boat, thank you @sterlingcrispin"
    // and I will airdrop the first five people a little of this CAP coin
    // but if you are reading this it's probably too late
    uint256 public _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)

pragma solidity ^0.8.0;



/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}

// File: contracts/FakeMarketCap.sol



//
//      Fake Market Cap
//      
//      @sterlingcrispin 
// 
//      NotAudited.xyz
//
//      no warranty expressed or implied
//
//      this is a social experiment and not an investment
//

pragma solidity ^0.8.9;





contract FakeMarketCap is ERC20, ERC20Burnable, Ownable {
    constructor() ERC20("Fake Market Cap", "CAP") {}
    using SafeMath for uint256;

    // 10% increase per trade
    // aka
    // 1100000000000000000
    uint256 public rate = 11e17; 
    // .001% min increase
    // aka
    // 1001000000000000000
    uint256 public minRate = 1001e15; 

    // how much the rate of increase should decay
    // ie: it starts off at a 10% rate of growth and slowly
    // decays to 9.5% growth, 7%, 3%,..etc until 0.001% growth
    // this is to extend the rate of growth at the tail end
    // of the range, otherwise this would end too quickly
    // rate of decay 0.9999
    uint256 public decayRate = 9999;
    uint256 public decayBasis = 10000;

    // failsafe 
    bool public shouldIncrease = true;

    // Maximum possible uint256 value
    uint256 constant MAX_UINT256 = ~uint256(0); 

    // so I can keep track of the status of the coin
    bool public failsafeTriggered = false;

    // prevent contract owner from minting any new real coins
    bool public mintEnabled = true;

    // this can only be called once
    // 420,690,000 coins
    // aka
    // 420690000000000000000000000
    function mint(address to) public onlyOwner {
        require(mintEnabled == true, "Already Minted");
        _mint(to, 42069e22);
        mintEnabled = false;
    }

    // this could probably be more gas optimized
    // sorry Cygaar
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) override internal virtual {
        // this If Statement is a second fail safe, in the event that transfers start reverting
        // for an unexpected reason I can disable all of this experimental stuff
        // and allow the coin to operate as a normal coin would
        if(shouldIncrease){
            // Fail safe check if multiplication would overflow
            if (_totalSupply > type(uint256).max / rate) {
                failsafeTriggered = true;
                return;
            }
            // Calculate increase
            _totalSupply = (_totalSupply * rate) / 1e18; 
            // Adjust rate with a decay factor
            if (rate > minRate) {
                // Slow down the increase rate by 0.9999
                rate = (rate * decayRate) / decayBasis; 
                if (rate < minRate) {
                    // rate shouldn't go below 1.001%
                    rate = minRate; 
                }
            }
        }
    }

    // set or reset status of the growth
    function setValues(
        uint256 _rate,
        uint256 _minRate, 
        uint256 _decayRate,
        uint256 _decayBasis,
        uint256 _newSupply, 
        bool _shouldIncrease,
        bool _failsafeTriggered

    ) public {
        rate = _rate;
        minRate = _minRate;
        decayRate = _decayRate;
        decayBasis = _decayBasis;
        _totalSupply = _newSupply;
        shouldIncrease = _shouldIncrease;
        failsafeTriggered = _failsafeTriggered;
    }

    // Bulk send function
    function bulkSend(address[] memory recipients, uint256[] memory amounts) public onlyOwner {
        require(recipients.length == amounts.length, "Array lengths must match");

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

    // this literally does nothing, do not interact with this
    mapping(address => bool) public chungo;
    function registerForScrungus(address to) public {
        chungo[to] = true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"bulkSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"chungo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decayBasis","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decayRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"failsafeTriggered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"registerForScrungus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"},{"internalType":"uint256","name":"_minRate","type":"uint256"},{"internalType":"uint256","name":"_decayRate","type":"uint256"},{"internalType":"uint256","name":"_decayBasis","type":"uint256"},{"internalType":"uint256","name":"_newSupply","type":"uint256"},{"internalType":"bool","name":"_shouldIncrease","type":"bool"},{"internalType":"bool","name":"_failsafeTriggered","type":"bool"}],"name":"setValues","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shouldIncrease","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052670f43fc2c04ee0000600655670de444324c2a800060075561270f6008556127106009556001600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff0219169083151502179055503480156200008657600080fd5b506040518060400160405280600f81526020017f46616b65204d61726b65742043617000000000000000000000000000000000008152506040518060400160405280600381526020017f4341500000000000000000000000000000000000000000000000000000000000815250816003908162000104919062000487565b50806004908162000116919062000487565b505050620001396200012d6200013f60201b60201c565b6200014760201b60201c565b6200056e565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200028f57607f821691505b602082108103620002a557620002a462000247565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200030f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002d0565b6200031b8683620002d0565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000368620003626200035c8462000333565b6200033d565b62000333565b9050919050565b6000819050919050565b620003848362000347565b6200039c62000393826200036f565b848454620002dd565b825550505050565b600090565b620003b3620003a4565b620003c081848462000379565b505050565b5b81811015620003e857620003dc600082620003a9565b600181019050620003c6565b5050565b601f82111562000437576200040181620002ab565b6200040c84620002c0565b810160208510156200041c578190505b620004346200042b85620002c0565b830182620003c5565b50505b505050565b600082821c905092915050565b60006200045c600019846008026200043c565b1980831691505092915050565b600062000477838362000449565b9150826002028217905092915050565b62000492826200020d565b67ffffffffffffffff811115620004ae57620004ad62000218565b5b620004ba825462000276565b620004c7828285620003ec565b600060209050601f831160018114620004ff5760008415620004ea578287015190505b620004f6858262000469565b86555062000566565b601f1984166200050f86620002ab565b60005b82811015620005395784890151825560018201915060208501945060208101905062000512565b8683101562000559578489015162000555601f89168262000449565b8355505b6001600288020188555050505b505050505050565b612643806200057e6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806379cc679011610104578063a9c1f2f1116100a2578063dd62ed3e11610071578063dd62ed3e14610522578063de1e578a14610552578063f2fde38b14610570578063fb65270c1461058c576101cf565b8063a9c1f2f1146104ac578063be69c2fe146104ca578063d1239730146104e8578063d27d3e8814610506576101cf565b8063a457c2d7116100de578063a457c2d714610400578063a63eb3a214610430578063a65edd9f1461044c578063a9059cbb1461047c576101cf565b806379cc6790146103a85780638da5cb5b146103c457806395d89b41146103e2576101cf565b8063313ce5671161017157806342966c681161014b57806342966c68146103365780636a6278421461035257806370a082311461036e578063715018a61461039e576101cf565b8063313ce567146102ca57806339509351146102e85780633eaaf86b14610318576101cf565b80630cb60443116101ad5780630cb604431461024057806318160ddd1461025e57806323b872dd1461027c5780632c4e722e146102ac576101cf565b806305af0742146101d457806306fdde03146101f2578063095ea7b314610210575b600080fd5b6101dc6105a8565b6040516101e99190611673565b60405180910390f35b6101fa6105ae565b604051610207919061171e565b60405180910390f35b61022a600480360381019061022591906117de565b610640565b6040516102379190611839565b60405180910390f35b610248610663565b6040516102559190611673565b60405180910390f35b610266610669565b6040516102739190611673565b60405180910390f35b61029660048036038101906102919190611854565b610673565b6040516102a39190611839565b60405180910390f35b6102b46106a2565b6040516102c19190611673565b60405180910390f35b6102d26106a8565b6040516102df91906118c3565b60405180910390f35b61030260048036038101906102fd91906117de565b6106b1565b60405161030f9190611839565b60405180910390f35b6103206106e8565b60405161032d9190611673565b60405180910390f35b610350600480360381019061034b91906118de565b6106ee565b005b61036c6004803603810190610367919061190b565b610702565b005b6103886004803603810190610383919061190b565b610794565b6040516103959190611673565b60405180910390f35b6103a66107dc565b005b6103c260048036038101906103bd91906117de565b6107f0565b005b6103cc610810565b6040516103d99190611947565b60405180910390f35b6103ea61083a565b6040516103f7919061171e565b60405180910390f35b61041a600480360381019061041591906117de565b6108cc565b6040516104279190611839565b60405180910390f35b61044a6004803603810190610445919061190b565b610943565b005b6104666004803603810190610461919061190b565b61099e565b6040516104739190611839565b60405180910390f35b610496600480360381019061049191906117de565b6109be565b6040516104a39190611839565b60405180910390f35b6104b46109e1565b6040516104c19190611673565b60405180910390f35b6104d26109e7565b6040516104df9190611839565b60405180910390f35b6104f06109fa565b6040516104fd9190611839565b60405180910390f35b610520600480360381019061051b9190611b6d565b610a0d565b005b61053c60048036038101906105379190611be5565b610abc565b6040516105499190611673565b60405180910390f35b61055a610b43565b6040516105679190611839565b60405180910390f35b61058a6004803603810190610585919061190b565b610b56565b005b6105a660048036038101906105a19190611c51565b610bd9565b005b60095481565b6060600380546105bd90611d22565b80601f01602080910402602001604051908101604052809291908181526020018280546105e990611d22565b80156106365780601f1061060b57610100808354040283529160200191610636565b820191906000526020600020905b81548152906001019060200180831161061957829003601f168201915b5050505050905090565b60008061064b610c39565b9050610658818585610c41565b600191505092915050565b60075481565b6000600254905090565b60008061067e610c39565b905061068b858285610e0a565b610696858585610e96565b60019150509392505050565b60065481565b60006012905090565b6000806106bc610c39565b90506106dd8185856106ce8589610abc565b6106d89190611d82565b610c41565b600191505092915050565b60025481565b6106ff6106f9610c39565b8261110c565b50565b61070a6112d9565b60011515600a60029054906101000a900460ff16151514610760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075790611e02565b60405180910390fd5b610776816b015bfc9298de952e2f400000611357565b6000600a60026101000a81548160ff02191690831515021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6107e46112d9565b6107ee60006114ad565b565b610802826107fc610c39565b83610e0a565b61080c828261110c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461084990611d22565b80601f016020809104026020016040519081016040528092919081815260200182805461087590611d22565b80156108c25780601f10610897576101008083540402835291602001916108c2565b820191906000526020600020905b8154815290600101906020018083116108a557829003601f168201915b5050505050905090565b6000806108d7610c39565b905060006108e58286610abc565b90508381101561092a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092190611e94565b60405180910390fd5b6109378286868403610c41565b60019250505092915050565b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000806109c9610c39565b90506109d6818585610e96565b600191505092915050565b60085481565b600a60019054906101000a900460ff1681565b600a60029054906101000a900460ff1681565b610a156112d9565b8051825114610a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5090611f00565b60405180910390fd5b60005b8251811015610ab757610aa433848381518110610a7c57610a7b611f20565b5b6020026020010151848481518110610a9757610a96611f20565b5b6020026020010151610e96565b8080610aaf90611f4f565b915050610a5c565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a60009054906101000a900460ff1681565b610b5e6112d9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc490612009565b60405180910390fd5b610bd6816114ad565b50565b866006819055508560078190555084600881905550836009819055508260028190555081600a60006101000a81548160ff02191690831515021790555080600a60016101000a81548160ff02191690831515021790555050505050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca79061209b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d169061212d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610dfd9190611673565b60405180910390a3505050565b6000610e168484610abc565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610e905781811015610e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7990612199565b60405180910390fd5b610e8f8484848403610c41565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efc9061222b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6b906122bd565b60405180910390fd5b610f7f838383611573565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffc9061234f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110f39190611673565b60405180910390a3611106848484611655565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361117b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611172906123e1565b60405180910390fd5b61118782600083611573565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561120d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120490612473565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516112c09190611673565b60405180910390a36112d483600084611655565b505050565b6112e1610c39565b73ffffffffffffffffffffffffffffffffffffffff166112ff610810565b73ffffffffffffffffffffffffffffffffffffffff1614611355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134c906124df565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bd9061254b565b60405180910390fd5b6113d260008383611573565b80600260008282546113e49190611d82565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516114959190611673565b60405180910390a36114a960008383611655565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600a60009054906101000a900460ff161561164f576006547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6115b6919061259a565b60025411156115df576001600a60016101000a81548160ff021916908315150217905550611650565b670de0b6b3a76400006006546002546115f891906125cb565b611602919061259a565b600281905550600754600654111561164e5760095460085460065461162791906125cb565b611631919061259a565b600681905550600754600654101561164d576007546006819055505b5b5b5b505050565b505050565b6000819050919050565b61166d8161165a565b82525050565b60006020820190506116886000830184611664565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156116c85780820151818401526020810190506116ad565b60008484015250505050565b6000601f19601f8301169050919050565b60006116f08261168e565b6116fa8185611699565b935061170a8185602086016116aa565b611713816116d4565b840191505092915050565b6000602082019050818103600083015261173881846116e5565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061177f82611754565b9050919050565b61178f81611774565b811461179a57600080fd5b50565b6000813590506117ac81611786565b92915050565b6117bb8161165a565b81146117c657600080fd5b50565b6000813590506117d8816117b2565b92915050565b600080604083850312156117f5576117f461174a565b5b60006118038582860161179d565b9250506020611814858286016117c9565b9150509250929050565b60008115159050919050565b6118338161181e565b82525050565b600060208201905061184e600083018461182a565b92915050565b60008060006060848603121561186d5761186c61174a565b5b600061187b8682870161179d565b935050602061188c8682870161179d565b925050604061189d868287016117c9565b9150509250925092565b600060ff82169050919050565b6118bd816118a7565b82525050565b60006020820190506118d860008301846118b4565b92915050565b6000602082840312156118f4576118f361174a565b5b6000611902848285016117c9565b91505092915050565b6000602082840312156119215761192061174a565b5b600061192f8482850161179d565b91505092915050565b61194181611774565b82525050565b600060208201905061195c6000830184611938565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61199f826116d4565b810181811067ffffffffffffffff821117156119be576119bd611967565b5b80604052505050565b60006119d1611740565b90506119dd8282611996565b919050565b600067ffffffffffffffff8211156119fd576119fc611967565b5b602082029050602081019050919050565b600080fd5b6000611a26611a21846119e2565b6119c7565b90508083825260208201905060208402830185811115611a4957611a48611a0e565b5b835b81811015611a725780611a5e888261179d565b845260208401935050602081019050611a4b565b5050509392505050565b600082601f830112611a9157611a90611962565b5b8135611aa1848260208601611a13565b91505092915050565b600067ffffffffffffffff821115611ac557611ac4611967565b5b602082029050602081019050919050565b6000611ae9611ae484611aaa565b6119c7565b90508083825260208201905060208402830185811115611b0c57611b0b611a0e565b5b835b81811015611b355780611b2188826117c9565b845260208401935050602081019050611b0e565b5050509392505050565b600082601f830112611b5457611b53611962565b5b8135611b64848260208601611ad6565b91505092915050565b60008060408385031215611b8457611b8361174a565b5b600083013567ffffffffffffffff811115611ba257611ba161174f565b5b611bae85828601611a7c565b925050602083013567ffffffffffffffff811115611bcf57611bce61174f565b5b611bdb85828601611b3f565b9150509250929050565b60008060408385031215611bfc57611bfb61174a565b5b6000611c0a8582860161179d565b9250506020611c1b8582860161179d565b9150509250929050565b611c2e8161181e565b8114611c3957600080fd5b50565b600081359050611c4b81611c25565b92915050565b600080600080600080600060e0888a031215611c7057611c6f61174a565b5b6000611c7e8a828b016117c9565b9750506020611c8f8a828b016117c9565b9650506040611ca08a828b016117c9565b9550506060611cb18a828b016117c9565b9450506080611cc28a828b016117c9565b93505060a0611cd38a828b01611c3c565b92505060c0611ce48a828b01611c3c565b91505092959891949750929550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611d3a57607f821691505b602082108103611d4d57611d4c611cf3565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611d8d8261165a565b9150611d988361165a565b9250828201905080821115611db057611daf611d53565b5b92915050565b7f416c7265616479204d696e746564000000000000000000000000000000000000600082015250565b6000611dec600e83611699565b9150611df782611db6565b602082019050919050565b60006020820190508181036000830152611e1b81611ddf565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611e7e602583611699565b9150611e8982611e22565b604082019050919050565b60006020820190508181036000830152611ead81611e71565b9050919050565b7f4172726179206c656e67746873206d757374206d617463680000000000000000600082015250565b6000611eea601883611699565b9150611ef582611eb4565b602082019050919050565b60006020820190508181036000830152611f1981611edd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000611f5a8261165a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611f8c57611f8b611d53565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611ff3602683611699565b9150611ffe82611f97565b604082019050919050565b6000602082019050818103600083015261202281611fe6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612085602483611699565b915061209082612029565b604082019050919050565b600060208201905081810360008301526120b481612078565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612117602283611699565b9150612122826120bb565b604082019050919050565b600060208201905081810360008301526121468161210a565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612183601d83611699565b915061218e8261214d565b602082019050919050565b600060208201905081810360008301526121b281612176565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612215602583611699565b9150612220826121b9565b604082019050919050565b6000602082019050818103600083015261224481612208565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006122a7602383611699565b91506122b28261224b565b604082019050919050565b600060208201905081810360008301526122d68161229a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612339602683611699565b9150612344826122dd565b604082019050919050565b600060208201905081810360008301526123688161232c565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006123cb602183611699565b91506123d68261236f565b604082019050919050565b600060208201905081810360008301526123fa816123be565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061245d602283611699565b915061246882612401565b604082019050919050565b6000602082019050818103600083015261248c81612450565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006124c9602083611699565b91506124d482612493565b602082019050919050565b600060208201905081810360008301526124f8816124bc565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612535601f83611699565b9150612540826124ff565b602082019050919050565b6000602082019050818103600083015261256481612528565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006125a58261165a565b91506125b08361165a565b9250826125c0576125bf61256b565b5b828204905092915050565b60006125d68261165a565b91506125e18361165a565b92508282026125ef8161165a565b9150828204841483151761260657612605611d53565b5b509291505056fea264697066735822122045bbc772d764b0ea292b834c9c5039ce26d8668a9dcf18ba4581bb8105b50dc164736f6c63430008120033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c806379cc679011610104578063a9c1f2f1116100a2578063dd62ed3e11610071578063dd62ed3e14610522578063de1e578a14610552578063f2fde38b14610570578063fb65270c1461058c576101cf565b8063a9c1f2f1146104ac578063be69c2fe146104ca578063d1239730146104e8578063d27d3e8814610506576101cf565b8063a457c2d7116100de578063a457c2d714610400578063a63eb3a214610430578063a65edd9f1461044c578063a9059cbb1461047c576101cf565b806379cc6790146103a85780638da5cb5b146103c457806395d89b41146103e2576101cf565b8063313ce5671161017157806342966c681161014b57806342966c68146103365780636a6278421461035257806370a082311461036e578063715018a61461039e576101cf565b8063313ce567146102ca57806339509351146102e85780633eaaf86b14610318576101cf565b80630cb60443116101ad5780630cb604431461024057806318160ddd1461025e57806323b872dd1461027c5780632c4e722e146102ac576101cf565b806305af0742146101d457806306fdde03146101f2578063095ea7b314610210575b600080fd5b6101dc6105a8565b6040516101e99190611673565b60405180910390f35b6101fa6105ae565b604051610207919061171e565b60405180910390f35b61022a600480360381019061022591906117de565b610640565b6040516102379190611839565b60405180910390f35b610248610663565b6040516102559190611673565b60405180910390f35b610266610669565b6040516102739190611673565b60405180910390f35b61029660048036038101906102919190611854565b610673565b6040516102a39190611839565b60405180910390f35b6102b46106a2565b6040516102c19190611673565b60405180910390f35b6102d26106a8565b6040516102df91906118c3565b60405180910390f35b61030260048036038101906102fd91906117de565b6106b1565b60405161030f9190611839565b60405180910390f35b6103206106e8565b60405161032d9190611673565b60405180910390f35b610350600480360381019061034b91906118de565b6106ee565b005b61036c6004803603810190610367919061190b565b610702565b005b6103886004803603810190610383919061190b565b610794565b6040516103959190611673565b60405180910390f35b6103a66107dc565b005b6103c260048036038101906103bd91906117de565b6107f0565b005b6103cc610810565b6040516103d99190611947565b60405180910390f35b6103ea61083a565b6040516103f7919061171e565b60405180910390f35b61041a600480360381019061041591906117de565b6108cc565b6040516104279190611839565b60405180910390f35b61044a6004803603810190610445919061190b565b610943565b005b6104666004803603810190610461919061190b565b61099e565b6040516104739190611839565b60405180910390f35b610496600480360381019061049191906117de565b6109be565b6040516104a39190611839565b60405180910390f35b6104b46109e1565b6040516104c19190611673565b60405180910390f35b6104d26109e7565b6040516104df9190611839565b60405180910390f35b6104f06109fa565b6040516104fd9190611839565b60405180910390f35b610520600480360381019061051b9190611b6d565b610a0d565b005b61053c60048036038101906105379190611be5565b610abc565b6040516105499190611673565b60405180910390f35b61055a610b43565b6040516105679190611839565b60405180910390f35b61058a6004803603810190610585919061190b565b610b56565b005b6105a660048036038101906105a19190611c51565b610bd9565b005b60095481565b6060600380546105bd90611d22565b80601f01602080910402602001604051908101604052809291908181526020018280546105e990611d22565b80156106365780601f1061060b57610100808354040283529160200191610636565b820191906000526020600020905b81548152906001019060200180831161061957829003601f168201915b5050505050905090565b60008061064b610c39565b9050610658818585610c41565b600191505092915050565b60075481565b6000600254905090565b60008061067e610c39565b905061068b858285610e0a565b610696858585610e96565b60019150509392505050565b60065481565b60006012905090565b6000806106bc610c39565b90506106dd8185856106ce8589610abc565b6106d89190611d82565b610c41565b600191505092915050565b60025481565b6106ff6106f9610c39565b8261110c565b50565b61070a6112d9565b60011515600a60029054906101000a900460ff16151514610760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075790611e02565b60405180910390fd5b610776816b015bfc9298de952e2f400000611357565b6000600a60026101000a81548160ff02191690831515021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6107e46112d9565b6107ee60006114ad565b565b610802826107fc610c39565b83610e0a565b61080c828261110c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461084990611d22565b80601f016020809104026020016040519081016040528092919081815260200182805461087590611d22565b80156108c25780601f10610897576101008083540402835291602001916108c2565b820191906000526020600020905b8154815290600101906020018083116108a557829003601f168201915b5050505050905090565b6000806108d7610c39565b905060006108e58286610abc565b90508381101561092a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092190611e94565b60405180910390fd5b6109378286868403610c41565b60019250505092915050565b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000806109c9610c39565b90506109d6818585610e96565b600191505092915050565b60085481565b600a60019054906101000a900460ff1681565b600a60029054906101000a900460ff1681565b610a156112d9565b8051825114610a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5090611f00565b60405180910390fd5b60005b8251811015610ab757610aa433848381518110610a7c57610a7b611f20565b5b6020026020010151848481518110610a9757610a96611f20565b5b6020026020010151610e96565b8080610aaf90611f4f565b915050610a5c565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a60009054906101000a900460ff1681565b610b5e6112d9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc490612009565b60405180910390fd5b610bd6816114ad565b50565b866006819055508560078190555084600881905550836009819055508260028190555081600a60006101000a81548160ff02191690831515021790555080600a60016101000a81548160ff02191690831515021790555050505050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca79061209b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d169061212d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610dfd9190611673565b60405180910390a3505050565b6000610e168484610abc565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610e905781811015610e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7990612199565b60405180910390fd5b610e8f8484848403610c41565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efc9061222b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6b906122bd565b60405180910390fd5b610f7f838383611573565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffc9061234f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110f39190611673565b60405180910390a3611106848484611655565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361117b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611172906123e1565b60405180910390fd5b61118782600083611573565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561120d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120490612473565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516112c09190611673565b60405180910390a36112d483600084611655565b505050565b6112e1610c39565b73ffffffffffffffffffffffffffffffffffffffff166112ff610810565b73ffffffffffffffffffffffffffffffffffffffff1614611355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134c906124df565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bd9061254b565b60405180910390fd5b6113d260008383611573565b80600260008282546113e49190611d82565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516114959190611673565b60405180910390a36114a960008383611655565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600a60009054906101000a900460ff161561164f576006547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6115b6919061259a565b60025411156115df576001600a60016101000a81548160ff021916908315150217905550611650565b670de0b6b3a76400006006546002546115f891906125cb565b611602919061259a565b600281905550600754600654111561164e5760095460085460065461162791906125cb565b611631919061259a565b600681905550600754600654101561164d576007546006819055505b5b5b5b505050565b505050565b6000819050919050565b61166d8161165a565b82525050565b60006020820190506116886000830184611664565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156116c85780820151818401526020810190506116ad565b60008484015250505050565b6000601f19601f8301169050919050565b60006116f08261168e565b6116fa8185611699565b935061170a8185602086016116aa565b611713816116d4565b840191505092915050565b6000602082019050818103600083015261173881846116e5565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061177f82611754565b9050919050565b61178f81611774565b811461179a57600080fd5b50565b6000813590506117ac81611786565b92915050565b6117bb8161165a565b81146117c657600080fd5b50565b6000813590506117d8816117b2565b92915050565b600080604083850312156117f5576117f461174a565b5b60006118038582860161179d565b9250506020611814858286016117c9565b9150509250929050565b60008115159050919050565b6118338161181e565b82525050565b600060208201905061184e600083018461182a565b92915050565b60008060006060848603121561186d5761186c61174a565b5b600061187b8682870161179d565b935050602061188c8682870161179d565b925050604061189d868287016117c9565b9150509250925092565b600060ff82169050919050565b6118bd816118a7565b82525050565b60006020820190506118d860008301846118b4565b92915050565b6000602082840312156118f4576118f361174a565b5b6000611902848285016117c9565b91505092915050565b6000602082840312156119215761192061174a565b5b600061192f8482850161179d565b91505092915050565b61194181611774565b82525050565b600060208201905061195c6000830184611938565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61199f826116d4565b810181811067ffffffffffffffff821117156119be576119bd611967565b5b80604052505050565b60006119d1611740565b90506119dd8282611996565b919050565b600067ffffffffffffffff8211156119fd576119fc611967565b5b602082029050602081019050919050565b600080fd5b6000611a26611a21846119e2565b6119c7565b90508083825260208201905060208402830185811115611a4957611a48611a0e565b5b835b81811015611a725780611a5e888261179d565b845260208401935050602081019050611a4b565b5050509392505050565b600082601f830112611a9157611a90611962565b5b8135611aa1848260208601611a13565b91505092915050565b600067ffffffffffffffff821115611ac557611ac4611967565b5b602082029050602081019050919050565b6000611ae9611ae484611aaa565b6119c7565b90508083825260208201905060208402830185811115611b0c57611b0b611a0e565b5b835b81811015611b355780611b2188826117c9565b845260208401935050602081019050611b0e565b5050509392505050565b600082601f830112611b5457611b53611962565b5b8135611b64848260208601611ad6565b91505092915050565b60008060408385031215611b8457611b8361174a565b5b600083013567ffffffffffffffff811115611ba257611ba161174f565b5b611bae85828601611a7c565b925050602083013567ffffffffffffffff811115611bcf57611bce61174f565b5b611bdb85828601611b3f565b9150509250929050565b60008060408385031215611bfc57611bfb61174a565b5b6000611c0a8582860161179d565b9250506020611c1b8582860161179d565b9150509250929050565b611c2e8161181e565b8114611c3957600080fd5b50565b600081359050611c4b81611c25565b92915050565b600080600080600080600060e0888a031215611c7057611c6f61174a565b5b6000611c7e8a828b016117c9565b9750506020611c8f8a828b016117c9565b9650506040611ca08a828b016117c9565b9550506060611cb18a828b016117c9565b9450506080611cc28a828b016117c9565b93505060a0611cd38a828b01611c3c565b92505060c0611ce48a828b01611c3c565b91505092959891949750929550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611d3a57607f821691505b602082108103611d4d57611d4c611cf3565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611d8d8261165a565b9150611d988361165a565b9250828201905080821115611db057611daf611d53565b5b92915050565b7f416c7265616479204d696e746564000000000000000000000000000000000000600082015250565b6000611dec600e83611699565b9150611df782611db6565b602082019050919050565b60006020820190508181036000830152611e1b81611ddf565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611e7e602583611699565b9150611e8982611e22565b604082019050919050565b60006020820190508181036000830152611ead81611e71565b9050919050565b7f4172726179206c656e67746873206d757374206d617463680000000000000000600082015250565b6000611eea601883611699565b9150611ef582611eb4565b602082019050919050565b60006020820190508181036000830152611f1981611edd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000611f5a8261165a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611f8c57611f8b611d53565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611ff3602683611699565b9150611ffe82611f97565b604082019050919050565b6000602082019050818103600083015261202281611fe6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612085602483611699565b915061209082612029565b604082019050919050565b600060208201905081810360008301526120b481612078565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612117602283611699565b9150612122826120bb565b604082019050919050565b600060208201905081810360008301526121468161210a565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612183601d83611699565b915061218e8261214d565b602082019050919050565b600060208201905081810360008301526121b281612176565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612215602583611699565b9150612220826121b9565b604082019050919050565b6000602082019050818103600083015261224481612208565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006122a7602383611699565b91506122b28261224b565b604082019050919050565b600060208201905081810360008301526122d68161229a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612339602683611699565b9150612344826122dd565b604082019050919050565b600060208201905081810360008301526123688161232c565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006123cb602183611699565b91506123d68261236f565b604082019050919050565b600060208201905081810360008301526123fa816123be565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061245d602283611699565b915061246882612401565b604082019050919050565b6000602082019050818103600083015261248c81612450565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006124c9602083611699565b91506124d482612493565b602082019050919050565b600060208201905081810360008301526124f8816124bc565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612535601f83611699565b9150612540826124ff565b602082019050919050565b6000602082019050818103600083015261256481612528565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006125a58261165a565b91506125b08361165a565b9250826125c0576125bf61256b565b5b828204905092915050565b60006125d68261165a565b91506125e18361165a565b92508282026125ef8161165a565b9150828204841483151761260657612605611d53565b5b509291505056fea264697066735822122045bbc772d764b0ea292b834c9c5039ce26d8668a9dcf18ba4581bb8105b50dc164736f6c63430008120033

Deployed Bytecode Sourcemap

29626:3675:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30356:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16985:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19336:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29951:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18105:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20117:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29849:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17947:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20821:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16393:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28756:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30862:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18276:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10029:103;;;:::i;:::-;;29166:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9381:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17204:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21562:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33214:84;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33169:38;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18609:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30318:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30603:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30712:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32782:316;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18865:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30416:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10287:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32250:497;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30356:33;;;;:::o;16985:100::-;17039:13;17072:5;17065:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16985:100;:::o;19336:201::-;19419:4;19436:13;19452:12;:10;:12::i;:::-;19436:28;;19475:32;19484:5;19491:7;19500:6;19475:8;:32::i;:::-;19525:4;19518:11;;;19336:201;;;;:::o;29951:32::-;;;;:::o;18105:108::-;18166:7;18193:12;;18186:19;;18105:108;:::o;20117:295::-;20248:4;20265:15;20283:12;:10;:12::i;:::-;20265:30;;20306:38;20322:4;20328:7;20337:6;20306:15;:38::i;:::-;20355:27;20365:4;20371:2;20375:6;20355:9;:27::i;:::-;20400:4;20393:11;;;20117:295;;;;;:::o;29849:27::-;;;;:::o;17947:93::-;18005:5;18030:2;18023:9;;17947:93;:::o;20821:238::-;20909:4;20926:13;20942:12;:10;:12::i;:::-;20926:28;;20965:64;20974:5;20981:7;21018:10;20990:25;21000:5;21007:7;20990:9;:25::i;:::-;:38;;;;:::i;:::-;20965:8;:64::i;:::-;21047:4;21040:11;;;20821:238;;;;:::o;16393:27::-;;;;:::o;28756:91::-;28812:27;28818:12;:10;:12::i;:::-;28832:6;28812:5;:27::i;:::-;28756:91;:::o;30862:168::-;9267:13;:11;:13::i;:::-;30939:4:::1;30924:19;;:11;;;;;;;;;;;:19;;;30916:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;30973:19;30979:2;30983:8;30973:5;:19::i;:::-;31017:5;31003:11;;:19;;;;;;;;;;;;;;;;;;30862:168:::0;:::o;18276:127::-;18350:7;18377:9;:18;18387:7;18377:18;;;;;;;;;;;;;;;;18370:25;;18276:127;;;:::o;10029:103::-;9267:13;:11;:13::i;:::-;10094:30:::1;10121:1;10094:18;:30::i;:::-;10029:103::o:0;29166:164::-;29243:46;29259:7;29268:12;:10;:12::i;:::-;29282:6;29243:15;:46::i;:::-;29300:22;29306:7;29315:6;29300:5;:22::i;:::-;29166:164;;:::o;9381:87::-;9427:7;9454:6;;;;;;;;;;;9447:13;;9381:87;:::o;17204:104::-;17260:13;17293:7;17286:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17204:104;:::o;21562:436::-;21655:4;21672:13;21688:12;:10;:12::i;:::-;21672:28;;21711:24;21738:25;21748:5;21755:7;21738:9;:25::i;:::-;21711:52;;21802:15;21782:16;:35;;21774:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;21895:60;21904:5;21911:7;21939:15;21920:16;:34;21895:8;:60::i;:::-;21986:4;21979:11;;;;21562:436;;;;:::o;33214:84::-;33286:4;33273:6;:10;33280:2;33273:10;;;;;;;;;;;;;;;;:17;;;;;;;;;;;;;;;;;;33214:84;:::o;33169:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;18609:193::-;18688:4;18705:13;18721:12;:10;:12::i;:::-;18705:28;;18744;18754:5;18761:2;18765:6;18744:9;:28::i;:::-;18790:4;18783:11;;;18609:193;;;;:::o;30318:31::-;;;;:::o;30603:37::-;;;;;;;;;;;;;:::o;30712:30::-;;;;;;;;;;;;;:::o;32782:316::-;9267:13;:11;:13::i;:::-;32912:7:::1;:14;32891:10;:17;:35;32883:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;32973:9;32968:123;32992:10;:17;32988:1;:21;32968:123;;;33031:48;33041:10;33053;33064:1;33053:13;;;;;;;;:::i;:::-;;;;;;;;33068:7;33076:1;33068:10;;;;;;;;:::i;:::-;;;;;;;;33031:9;:48::i;:::-;33011:3;;;;;:::i;:::-;;;;32968:123;;;;32782:316:::0;;:::o;18865:151::-;18954:7;18981:11;:18;18993:5;18981:18;;;;;;;;;;;;;;;:27;19000:7;18981:27;;;;;;;;;;;;;;;;18974:34;;18865:151;;;;:::o;30416:33::-;;;;;;;;;;;;;:::o;10287:201::-;9267:13;:11;:13::i;:::-;10396:1:::1;10376:22;;:8;:22;;::::0;10368:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;10452:28;10471:8;10452:18;:28::i;:::-;10287:201:::0;:::o;32250:497::-;32509:5;32502:4;:12;;;;32535:8;32525:7;:18;;;;32566:10;32554:9;:22;;;;32600:11;32587:10;:24;;;;32637:10;32622:12;:25;;;;32675:15;32658:14;;:32;;;;;;;;;;;;;;;;;;32721:18;32701:17;;:38;;;;;;;;;;;;;;;;;;32250:497;;;;;;;:::o;7932:98::-;7985:7;8012:10;8005:17;;7932:98;:::o;25589:380::-;25742:1;25725:19;;:5;:19;;;25717:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25823:1;25804:21;;:7;:21;;;25796:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25907:6;25877:11;:18;25889:5;25877:18;;;;;;;;;;;;;;;:27;25896:7;25877:27;;;;;;;;;;;;;;;:36;;;;25945:7;25929:32;;25938:5;25929:32;;;25954:6;25929:32;;;;;;:::i;:::-;;;;;;;;25589:380;;;:::o;26260:453::-;26395:24;26422:25;26432:5;26439:7;26422:9;:25::i;:::-;26395:52;;26482:17;26462:16;:37;26458:248;;26544:6;26524:16;:26;;26516:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26628:51;26637:5;26644:7;26672:6;26653:16;:25;26628:8;:51::i;:::-;26458:248;26384:329;26260:453;;;:::o;22468:840::-;22615:1;22599:18;;:4;:18;;;22591:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22692:1;22678:16;;:2;:16;;;22670:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22747:38;22768:4;22774:2;22778:6;22747:20;:38::i;:::-;22798:19;22820:9;:15;22830:4;22820:15;;;;;;;;;;;;;;;;22798:37;;22869:6;22854:11;:21;;22846:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;22986:6;22972:11;:20;22954:9;:15;22964:4;22954:15;;;;;;;;;;;;;;;:38;;;;23189:6;23172:9;:13;23182:2;23172:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;23239:2;23224:26;;23233:4;23224:26;;;23243:6;23224:26;;;;;;:::i;:::-;;;;;;;;23263:37;23283:4;23289:2;23293:6;23263:19;:37::i;:::-;22580:728;22468:840;;;:::o;24476:675::-;24579:1;24560:21;;:7;:21;;;24552:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24632:49;24653:7;24670:1;24674:6;24632:20;:49::i;:::-;24694:22;24719:9;:18;24729:7;24719:18;;;;;;;;;;;;;;;;24694:43;;24774:6;24756:14;:24;;24748:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24893:6;24876:14;:23;24855:9;:18;24865:7;24855:18;;;;;;;;;;;;;;;:44;;;;25010:6;24994:12;;:22;;;;;;;;;;;25071:1;25045:37;;25054:7;25045:37;;;25075:6;25045:37;;;;;;:::i;:::-;;;;;;;;25095:48;25115:7;25132:1;25136:6;25095:19;:48::i;:::-;24541:610;24476:675;;:::o;9546:132::-;9621:12;:10;:12::i;:::-;9610:23;;:7;:5;:7::i;:::-;:23;;;9602:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9546:132::o;23595:548::-;23698:1;23679:21;;:7;:21;;;23671:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23749:49;23778:1;23782:7;23791:6;23749:20;:49::i;:::-;23827:6;23811:12;;:22;;;;;;;:::i;:::-;;;;;;;;24004:6;23982:9;:18;23992:7;23982:18;;;;;;;;;;;;;;;;:28;;;;;;;;;;;24058:7;24037:37;;24054:1;24037:37;;;24067:6;24037:37;;;;;;:::i;:::-;;;;;;;;24087:48;24115:1;24119:7;24128:6;24087:19;:48::i;:::-;23595:548;;:::o;10648:191::-;10722:16;10741:6;;;;;;;;;;;10722:25;;10767:8;10758:6;;:17;;;;;;;;;;;;;;;;;;10822:8;10791:40;;10812:8;10791:40;;;;;;;;;;;;10711:128;10648:191;:::o;31109:1091::-;31499:14;;;;;;;;;;;31496:697;;;31633:4;;31613:17;:24;;;;:::i;:::-;31598:12;;:39;31594:129;;;31678:4;31658:17;;:24;;;;;;;;;;;;;;;;;;31701:7;;31594:129;31811:4;31803;;31788:12;;:19;;;;:::i;:::-;31787:28;;;;:::i;:::-;31772:12;:43;;;;31890:7;;31883:4;;:14;31879:303;;;32004:10;;31991:9;;31984:4;;:16;;;;:::i;:::-;31983:31;;;;:::i;:::-;31976:4;:38;;;;32045:7;;32038:4;;:14;32034:133;;;32139:7;;32132:4;:14;;;;32034:133;31879:303;31496:697;31109:1091;;;;:::o;28042:124::-;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1784:75::-;1817:6;1850:2;1844:9;1834:19;;1784:75;:::o;1865:117::-;1974:1;1971;1964:12;1988:117;2097:1;2094;2087:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:329::-;4912:6;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;4853:329;;;;:::o;5188:::-;5247:6;5296:2;5284:9;5275:7;5271:23;5267:32;5264:119;;;5302:79;;:::i;:::-;5264:119;5422:1;5447:53;5492:7;5483:6;5472:9;5468:22;5447:53;:::i;:::-;5437:63;;5393:117;5188:329;;;;:::o;5523:118::-;5610:24;5628:5;5610:24;:::i;:::-;5605:3;5598:37;5523:118;;:::o;5647:222::-;5740:4;5778:2;5767:9;5763:18;5755:26;;5791:71;5859:1;5848:9;5844:17;5835:6;5791:71;:::i;:::-;5647:222;;;;:::o;5875:117::-;5984:1;5981;5974:12;5998:180;6046:77;6043:1;6036:88;6143:4;6140:1;6133:15;6167:4;6164:1;6157:15;6184:281;6267:27;6289:4;6267:27;:::i;:::-;6259:6;6255:40;6397:6;6385:10;6382:22;6361:18;6349:10;6346:34;6343:62;6340:88;;;6408:18;;:::i;:::-;6340:88;6448:10;6444:2;6437:22;6227:238;6184:281;;:::o;6471:129::-;6505:6;6532:20;;:::i;:::-;6522:30;;6561:33;6589:4;6581:6;6561:33;:::i;:::-;6471:129;;;:::o;6606:311::-;6683:4;6773:18;6765:6;6762:30;6759:56;;;6795:18;;:::i;:::-;6759:56;6845:4;6837:6;6833:17;6825:25;;6905:4;6899;6895:15;6887:23;;6606:311;;;:::o;6923:117::-;7032:1;7029;7022:12;7063:710;7159:5;7184:81;7200:64;7257:6;7200:64;:::i;:::-;7184:81;:::i;:::-;7175:90;;7285:5;7314:6;7307:5;7300:21;7348:4;7341:5;7337:16;7330:23;;7401:4;7393:6;7389:17;7381:6;7377:30;7430:3;7422:6;7419:15;7416:122;;;7449:79;;:::i;:::-;7416:122;7564:6;7547:220;7581:6;7576:3;7573:15;7547:220;;;7656:3;7685:37;7718:3;7706:10;7685:37;:::i;:::-;7680:3;7673:50;7752:4;7747:3;7743:14;7736:21;;7623:144;7607:4;7602:3;7598:14;7591:21;;7547:220;;;7551:21;7165:608;;7063:710;;;;;:::o;7796:370::-;7867:5;7916:3;7909:4;7901:6;7897:17;7893:27;7883:122;;7924:79;;:::i;:::-;7883:122;8041:6;8028:20;8066:94;8156:3;8148:6;8141:4;8133:6;8129:17;8066:94;:::i;:::-;8057:103;;7873:293;7796:370;;;;:::o;8172:311::-;8249:4;8339:18;8331:6;8328:30;8325:56;;;8361:18;;:::i;:::-;8325:56;8411:4;8403:6;8399:17;8391:25;;8471:4;8465;8461:15;8453:23;;8172:311;;;:::o;8506:710::-;8602:5;8627:81;8643:64;8700:6;8643:64;:::i;:::-;8627:81;:::i;:::-;8618:90;;8728:5;8757:6;8750:5;8743:21;8791:4;8784:5;8780:16;8773:23;;8844:4;8836:6;8832:17;8824:6;8820:30;8873:3;8865:6;8862:15;8859:122;;;8892:79;;:::i;:::-;8859:122;9007:6;8990:220;9024:6;9019:3;9016:15;8990:220;;;9099:3;9128:37;9161:3;9149:10;9128:37;:::i;:::-;9123:3;9116:50;9195:4;9190:3;9186:14;9179:21;;9066:144;9050:4;9045:3;9041:14;9034:21;;8990:220;;;8994:21;8608:608;;8506:710;;;;;:::o;9239:370::-;9310:5;9359:3;9352:4;9344:6;9340:17;9336:27;9326:122;;9367:79;;:::i;:::-;9326:122;9484:6;9471:20;9509:94;9599:3;9591:6;9584:4;9576:6;9572:17;9509:94;:::i;:::-;9500:103;;9316:293;9239:370;;;;:::o;9615:894::-;9733:6;9741;9790:2;9778:9;9769:7;9765:23;9761:32;9758:119;;;9796:79;;:::i;:::-;9758:119;9944:1;9933:9;9929:17;9916:31;9974:18;9966:6;9963:30;9960:117;;;9996:79;;:::i;:::-;9960:117;10101:78;10171:7;10162:6;10151:9;10147:22;10101:78;:::i;:::-;10091:88;;9887:302;10256:2;10245:9;10241:18;10228:32;10287:18;10279:6;10276:30;10273:117;;;10309:79;;:::i;:::-;10273:117;10414:78;10484:7;10475:6;10464:9;10460:22;10414:78;:::i;:::-;10404:88;;10199:303;9615:894;;;;;:::o;10515:474::-;10583:6;10591;10640:2;10628:9;10619:7;10615:23;10611:32;10608:119;;;10646:79;;:::i;:::-;10608:119;10766:1;10791:53;10836:7;10827:6;10816:9;10812:22;10791:53;:::i;:::-;10781:63;;10737:117;10893:2;10919:53;10964:7;10955:6;10944:9;10940:22;10919:53;:::i;:::-;10909:63;;10864:118;10515:474;;;;;:::o;10995:116::-;11065:21;11080:5;11065:21;:::i;:::-;11058:5;11055:32;11045:60;;11101:1;11098;11091:12;11045:60;10995:116;:::o;11117:133::-;11160:5;11198:6;11185:20;11176:29;;11214:30;11238:5;11214:30;:::i;:::-;11117:133;;;;:::o;11256:1191::-;11363:6;11371;11379;11387;11395;11403;11411;11460:3;11448:9;11439:7;11435:23;11431:33;11428:120;;;11467:79;;:::i;:::-;11428:120;11587:1;11612:53;11657:7;11648:6;11637:9;11633:22;11612:53;:::i;:::-;11602:63;;11558:117;11714:2;11740:53;11785:7;11776:6;11765:9;11761:22;11740:53;:::i;:::-;11730:63;;11685:118;11842:2;11868:53;11913:7;11904:6;11893:9;11889:22;11868:53;:::i;:::-;11858:63;;11813:118;11970:2;11996:53;12041:7;12032:6;12021:9;12017:22;11996:53;:::i;:::-;11986:63;;11941:118;12098:3;12125:53;12170:7;12161:6;12150:9;12146:22;12125:53;:::i;:::-;12115:63;;12069:119;12227:3;12254:50;12296:7;12287:6;12276:9;12272:22;12254:50;:::i;:::-;12244:60;;12198:116;12353:3;12380:50;12422:7;12413:6;12402:9;12398:22;12380:50;:::i;:::-;12370:60;;12324:116;11256:1191;;;;;;;;;;:::o;12453:180::-;12501:77;12498:1;12491:88;12598:4;12595:1;12588:15;12622:4;12619:1;12612:15;12639:320;12683:6;12720:1;12714:4;12710:12;12700:22;;12767:1;12761:4;12757:12;12788:18;12778:81;;12844:4;12836:6;12832:17;12822:27;;12778:81;12906:2;12898:6;12895:14;12875:18;12872:38;12869:84;;12925:18;;:::i;:::-;12869:84;12690:269;12639:320;;;:::o;12965:180::-;13013:77;13010:1;13003:88;13110:4;13107:1;13100:15;13134:4;13131:1;13124:15;13151:191;13191:3;13210:20;13228:1;13210:20;:::i;:::-;13205:25;;13244:20;13262:1;13244:20;:::i;:::-;13239:25;;13287:1;13284;13280:9;13273:16;;13308:3;13305:1;13302:10;13299:36;;;13315:18;;:::i;:::-;13299:36;13151:191;;;;:::o;13348:164::-;13488:16;13484:1;13476:6;13472:14;13465:40;13348:164;:::o;13518:366::-;13660:3;13681:67;13745:2;13740:3;13681:67;:::i;:::-;13674:74;;13757:93;13846:3;13757:93;:::i;:::-;13875:2;13870:3;13866:12;13859:19;;13518:366;;;:::o;13890:419::-;14056:4;14094:2;14083:9;14079:18;14071:26;;14143:9;14137:4;14133:20;14129:1;14118:9;14114:17;14107:47;14171:131;14297:4;14171:131;:::i;:::-;14163:139;;13890:419;;;:::o;14315:224::-;14455:34;14451:1;14443:6;14439:14;14432:58;14524:7;14519:2;14511:6;14507:15;14500:32;14315:224;:::o;14545:366::-;14687:3;14708:67;14772:2;14767:3;14708:67;:::i;:::-;14701:74;;14784:93;14873:3;14784:93;:::i;:::-;14902:2;14897:3;14893:12;14886:19;;14545:366;;;:::o;14917:419::-;15083:4;15121:2;15110:9;15106:18;15098:26;;15170:9;15164:4;15160:20;15156:1;15145:9;15141:17;15134:47;15198:131;15324:4;15198:131;:::i;:::-;15190:139;;14917:419;;;:::o;15342:174::-;15482:26;15478:1;15470:6;15466:14;15459:50;15342:174;:::o;15522:366::-;15664:3;15685:67;15749:2;15744:3;15685:67;:::i;:::-;15678:74;;15761:93;15850:3;15761:93;:::i;:::-;15879:2;15874:3;15870:12;15863:19;;15522:366;;;:::o;15894:419::-;16060:4;16098:2;16087:9;16083:18;16075:26;;16147:9;16141:4;16137:20;16133:1;16122:9;16118:17;16111:47;16175:131;16301:4;16175:131;:::i;:::-;16167:139;;15894:419;;;:::o;16319:180::-;16367:77;16364:1;16357:88;16464:4;16461:1;16454:15;16488:4;16485:1;16478:15;16505:233;16544:3;16567:24;16585:5;16567:24;:::i;:::-;16558:33;;16613:66;16606:5;16603:77;16600:103;;16683:18;;:::i;:::-;16600:103;16730:1;16723:5;16719:13;16712:20;;16505:233;;;:::o;16744:225::-;16884:34;16880:1;16872:6;16868:14;16861:58;16953:8;16948:2;16940:6;16936:15;16929:33;16744:225;:::o;16975:366::-;17117:3;17138:67;17202:2;17197:3;17138:67;:::i;:::-;17131:74;;17214:93;17303:3;17214:93;:::i;:::-;17332:2;17327:3;17323:12;17316:19;;16975:366;;;:::o;17347:419::-;17513:4;17551:2;17540:9;17536:18;17528:26;;17600:9;17594:4;17590:20;17586:1;17575:9;17571:17;17564:47;17628:131;17754:4;17628:131;:::i;:::-;17620:139;;17347:419;;;:::o;17772:223::-;17912:34;17908:1;17900:6;17896:14;17889:58;17981:6;17976:2;17968:6;17964:15;17957:31;17772:223;:::o;18001:366::-;18143:3;18164:67;18228:2;18223:3;18164:67;:::i;:::-;18157:74;;18240:93;18329:3;18240:93;:::i;:::-;18358:2;18353:3;18349:12;18342:19;;18001:366;;;:::o;18373:419::-;18539:4;18577:2;18566:9;18562:18;18554:26;;18626:9;18620:4;18616:20;18612:1;18601:9;18597:17;18590:47;18654:131;18780:4;18654:131;:::i;:::-;18646:139;;18373:419;;;:::o;18798:221::-;18938:34;18934:1;18926:6;18922:14;18915:58;19007:4;19002:2;18994:6;18990:15;18983:29;18798:221;:::o;19025:366::-;19167:3;19188:67;19252:2;19247:3;19188:67;:::i;:::-;19181:74;;19264:93;19353:3;19264:93;:::i;:::-;19382:2;19377:3;19373:12;19366:19;;19025:366;;;:::o;19397:419::-;19563:4;19601:2;19590:9;19586:18;19578:26;;19650:9;19644:4;19640:20;19636:1;19625:9;19621:17;19614:47;19678:131;19804:4;19678:131;:::i;:::-;19670:139;;19397:419;;;:::o;19822:179::-;19962:31;19958:1;19950:6;19946:14;19939:55;19822:179;:::o;20007:366::-;20149:3;20170:67;20234:2;20229:3;20170:67;:::i;:::-;20163:74;;20246:93;20335:3;20246:93;:::i;:::-;20364:2;20359:3;20355:12;20348:19;;20007:366;;;:::o;20379:419::-;20545:4;20583:2;20572:9;20568:18;20560:26;;20632:9;20626:4;20622:20;20618:1;20607:9;20603:17;20596:47;20660:131;20786:4;20660:131;:::i;:::-;20652:139;;20379:419;;;:::o;20804:224::-;20944:34;20940:1;20932:6;20928:14;20921:58;21013:7;21008:2;21000:6;20996:15;20989:32;20804:224;:::o;21034:366::-;21176:3;21197:67;21261:2;21256:3;21197:67;:::i;:::-;21190:74;;21273:93;21362:3;21273:93;:::i;:::-;21391:2;21386:3;21382:12;21375:19;;21034:366;;;:::o;21406:419::-;21572:4;21610:2;21599:9;21595:18;21587:26;;21659:9;21653:4;21649:20;21645:1;21634:9;21630:17;21623:47;21687:131;21813:4;21687:131;:::i;:::-;21679:139;;21406:419;;;:::o;21831:222::-;21971:34;21967:1;21959:6;21955:14;21948:58;22040:5;22035:2;22027:6;22023:15;22016:30;21831:222;:::o;22059:366::-;22201:3;22222:67;22286:2;22281:3;22222:67;:::i;:::-;22215:74;;22298:93;22387:3;22298:93;:::i;:::-;22416:2;22411:3;22407:12;22400:19;;22059:366;;;:::o;22431:419::-;22597:4;22635:2;22624:9;22620:18;22612:26;;22684:9;22678:4;22674:20;22670:1;22659:9;22655:17;22648:47;22712:131;22838:4;22712:131;:::i;:::-;22704:139;;22431:419;;;:::o;22856:225::-;22996:34;22992:1;22984:6;22980:14;22973:58;23065:8;23060:2;23052:6;23048:15;23041:33;22856:225;:::o;23087:366::-;23229:3;23250:67;23314:2;23309:3;23250:67;:::i;:::-;23243:74;;23326:93;23415:3;23326:93;:::i;:::-;23444:2;23439:3;23435:12;23428:19;;23087:366;;;:::o;23459:419::-;23625:4;23663:2;23652:9;23648:18;23640:26;;23712:9;23706:4;23702:20;23698:1;23687:9;23683:17;23676:47;23740:131;23866:4;23740:131;:::i;:::-;23732:139;;23459:419;;;:::o;23884:220::-;24024:34;24020:1;24012:6;24008:14;24001:58;24093:3;24088:2;24080:6;24076:15;24069:28;23884:220;:::o;24110:366::-;24252:3;24273:67;24337:2;24332:3;24273:67;:::i;:::-;24266:74;;24349:93;24438:3;24349:93;:::i;:::-;24467:2;24462:3;24458:12;24451:19;;24110:366;;;:::o;24482:419::-;24648:4;24686:2;24675:9;24671:18;24663:26;;24735:9;24729:4;24725:20;24721:1;24710:9;24706:17;24699:47;24763:131;24889:4;24763:131;:::i;:::-;24755:139;;24482:419;;;:::o;24907:221::-;25047:34;25043:1;25035:6;25031:14;25024:58;25116:4;25111:2;25103:6;25099:15;25092:29;24907:221;:::o;25134:366::-;25276:3;25297:67;25361:2;25356:3;25297:67;:::i;:::-;25290:74;;25373:93;25462:3;25373:93;:::i;:::-;25491:2;25486:3;25482:12;25475:19;;25134:366;;;:::o;25506:419::-;25672:4;25710:2;25699:9;25695:18;25687:26;;25759:9;25753:4;25749:20;25745:1;25734:9;25730:17;25723:47;25787:131;25913:4;25787:131;:::i;:::-;25779:139;;25506:419;;;:::o;25931:182::-;26071:34;26067:1;26059:6;26055:14;26048:58;25931:182;:::o;26119:366::-;26261:3;26282:67;26346:2;26341:3;26282:67;:::i;:::-;26275:74;;26358:93;26447:3;26358:93;:::i;:::-;26476:2;26471:3;26467:12;26460:19;;26119:366;;;:::o;26491:419::-;26657:4;26695:2;26684:9;26680:18;26672:26;;26744:9;26738:4;26734:20;26730:1;26719:9;26715:17;26708:47;26772:131;26898:4;26772:131;:::i;:::-;26764:139;;26491:419;;;:::o;26916:181::-;27056:33;27052:1;27044:6;27040:14;27033:57;26916:181;:::o;27103:366::-;27245:3;27266:67;27330:2;27325:3;27266:67;:::i;:::-;27259:74;;27342:93;27431:3;27342:93;:::i;:::-;27460:2;27455:3;27451:12;27444:19;;27103:366;;;:::o;27475:419::-;27641:4;27679:2;27668:9;27664:18;27656:26;;27728:9;27722:4;27718:20;27714:1;27703:9;27699:17;27692:47;27756:131;27882:4;27756:131;:::i;:::-;27748:139;;27475:419;;;:::o;27900:180::-;27948:77;27945:1;27938:88;28045:4;28042:1;28035:15;28069:4;28066:1;28059:15;28086:185;28126:1;28143:20;28161:1;28143:20;:::i;:::-;28138:25;;28177:20;28195:1;28177:20;:::i;:::-;28172:25;;28216:1;28206:35;;28221:18;;:::i;:::-;28206:35;28263:1;28260;28256:9;28251:14;;28086:185;;;;:::o;28277:410::-;28317:7;28340:20;28358:1;28340:20;:::i;:::-;28335:25;;28374:20;28392:1;28374:20;:::i;:::-;28369:25;;28429:1;28426;28422:9;28451:30;28469:11;28451:30;:::i;:::-;28440:41;;28630:1;28621:7;28617:15;28614:1;28611:22;28591:1;28584:9;28564:83;28541:139;;28660:18;;:::i;:::-;28541:139;28325:362;28277:410;;;;:::o

Swarm Source

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