Token PrimezToken

 

Overview [ERC-20]

Max Total Supply:
1,000,000,000 PRX

Holders:
86

Transfers:
-

 
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PrimezToken

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-22
*/

// SPDX-License-Identifier: MIT
// File: ILocker.sol



pragma solidity ^0.8.0;

interface ILocker {
    function isLocked(address _user, uint256 volume) external view returns (bool);
}
// 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 v4.4.1 (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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

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

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

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

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

// 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.6.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.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `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 `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `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;
        }
        _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;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

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

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

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

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

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

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

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

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

    /**
     * @dev 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: PRX.sol


pragma solidity ^0.8.0;





contract PrimezToken is Ownable, ERC20, ERC20Burnable {

    ILocker private locker;

    constructor() ERC20("PrimezToken", "PRX") {
        _mint(msg.sender, 1000000000 * 10 ** decimals());
    }

    function setLocker(address _locker) public onlyOwner {
        locker = ILocker(_locker);
    }

    function _transfer(
    address sender,
    address recipient,
    uint256 amount
  ) internal virtual override {
    // check lock before transfer
    if (address(locker) != address(0)) {
        if (locker.isLocked(sender, balanceOf(sender) - amount))
            revert("Your token has been locked");
    }
    return ERC20._transfer(sender, recipient, amount);
  }

  function getLocker() public view returns (address){
      return address(locker);
  }
}

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":[{"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":"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":[],"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":"getLocker","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_locker","type":"address"}],"name":"setLocker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040518060400160405280600b81526020017f5072696d657a546f6b656e0000000000000000000000000000000000000000008152506040518060400160405280600381526020017f50525800000000000000000000000000000000000000000000000000000000008152506200009e620000926200011860201b60201c565b6200012060201b60201c565b8160049080519060200190620000b692919062000371565b508060059080519060200190620000cf92919062000371565b5050506200011233620000e7620001e460201b60201c565b600a620000f591906200057c565b633b9aca00620001069190620006b9565b620001ed60201b60201c565b620007d2565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000260576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002579062000474565b60405180910390fd5b62000274600083836200036760201b60201c565b8060036000828254620002889190620004c4565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620002e09190620004c4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000347919062000496565b60405180910390a362000363600083836200036c60201b60201c565b5050565b505050565b505050565b8280546200037f9062000731565b90600052602060002090601f016020900481019282620003a35760008555620003ef565b82601f10620003be57805160ff1916838001178555620003ef565b82800160010185558215620003ef579182015b82811115620003ee578251825591602001919060010190620003d1565b5b509050620003fe919062000402565b5090565b5b808211156200041d57600081600090555060010162000403565b5090565b600062000430601f83620004b3565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b6200046e816200071a565b82525050565b600060208201905081810360008301526200048f8162000421565b9050919050565b6000602082019050620004ad600083018462000463565b92915050565b600082825260208201905092915050565b6000620004d1826200071a565b9150620004de836200071a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000516576200051562000767565b5b828201905092915050565b6000808291508390505b600185111562000573578086048111156200054b576200054a62000767565b5b60018516156200055b5780820291505b80810290506200056b85620007c5565b94506200052b565b94509492505050565b600062000589826200071a565b9150620005968362000724565b9250620005c57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620005cd565b905092915050565b600082620005df5760019050620006b2565b81620005ef5760009050620006b2565b8160018114620006085760028114620006135762000649565b6001915050620006b2565b60ff84111562000628576200062762000767565b5b8360020a91508482111562000642576200064162000767565b5b50620006b2565b5060208310610133831016604e8410600b8410161715620006835782820a9050838111156200067d576200067c62000767565b5b620006b2565b62000692848484600162000521565b92509050818404811115620006ac57620006ab62000767565b5b81810290505b9392505050565b6000620006c6826200071a565b9150620006d3836200071a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200070f576200070e62000767565b5b828202905092915050565b6000819050919050565b600060ff82169050919050565b600060028204905060018216806200074a57607f821691505b6020821081141562000761576200076062000796565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b611d4880620007e26000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806370a08231116100a257806395d89b411161007157806395d89b41146102cf578063a457c2d7146102ed578063a9059cbb1461031d578063dd62ed3e1461034d578063f2fde38b1461037d57610116565b806370a082311461025b578063715018a61461028b57806379cc6790146102955780638da5cb5b146102b157610116565b806323b872dd116100e957806323b872dd146101a3578063313ce567146101d357806339509351146101f157806342966c68146102215780635d4e0ced1461023d57610116565b806306fdde031461011b578063095ea7b314610139578063171060ec1461016957806318160ddd14610185575b600080fd5b610123610399565b6040516101309190611926565b60405180910390f35b610153600480360381019061014e919061136e565b61042b565b604051610160919061190b565b60405180910390f35b610183600480360381019061017e91906112ba565b61044e565b005b61018d61050e565b60405161019a9190611ac8565b60405180910390f35b6101bd60048036038101906101b8919061131f565b610518565b6040516101ca919061190b565b60405180910390f35b6101db610547565b6040516101e89190611ae3565b60405180910390f35b61020b6004803603810190610206919061136e565b610550565b604051610218919061190b565b60405180910390f35b61023b600480360381019061023691906113d3565b610587565b005b61024561059b565b60405161025291906118c7565b60405180910390f35b610275600480360381019061027091906112ba565b6105c5565b6040516102829190611ac8565b60405180910390f35b61029361060e565b005b6102af60048036038101906102aa919061136e565b610696565b005b6102b96106b6565b6040516102c691906118c7565b60405180910390f35b6102d76106df565b6040516102e49190611926565b60405180910390f35b6103076004803603810190610302919061136e565b610771565b604051610314919061190b565b60405180910390f35b6103376004803603810190610332919061136e565b6107e8565b604051610344919061190b565b60405180910390f35b610367600480360381019061036291906112e3565b61080b565b6040516103749190611ac8565b60405180910390f35b610397600480360381019061039291906112ba565b610892565b005b6060600480546103a890611c2c565b80601f01602080910402602001604051908101604052809291908181526020018280546103d490611c2c565b80156104215780601f106103f657610100808354040283529160200191610421565b820191906000526020600020905b81548152906001019060200180831161040457829003601f168201915b5050505050905090565b60008061043661098a565b9050610443818585610992565b600191505092915050565b61045661098a565b73ffffffffffffffffffffffffffffffffffffffff166104746106b6565b73ffffffffffffffffffffffffffffffffffffffff16146104ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c190611a28565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600354905090565b60008061052361098a565b9050610530858285610b5d565b61053b858585610be9565b60019150509392505050565b60006012905090565b60008061055b61098a565b905061057c81858561056d858961080b565b6105779190611b1a565b610992565b600191505092915050565b61059861059261098a565b82610d50565b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61061661098a565b73ffffffffffffffffffffffffffffffffffffffff166106346106b6565b73ffffffffffffffffffffffffffffffffffffffff161461068a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068190611a28565b60405180910390fd5b6106946000610f29565b565b6106a8826106a261098a565b83610b5d565b6106b28282610d50565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600580546106ee90611c2c565b80601f016020809104026020016040519081016040528092919081815260200182805461071a90611c2c565b80156107675780601f1061073c57610100808354040283529160200191610767565b820191906000526020600020905b81548152906001019060200180831161074a57829003601f168201915b5050505050905090565b60008061077c61098a565b9050600061078a828661080b565b9050838110156107cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c690611aa8565b60405180910390fd5b6107dc8286868403610992565b60019250505092915050565b6000806107f361098a565b9050610800818585610be9565b600191505092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61089a61098a565b73ffffffffffffffffffffffffffffffffffffffff166108b86106b6565b73ffffffffffffffffffffffffffffffffffffffff161461090e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090590611a28565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561097e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097590611988565b60405180910390fd5b61098781610f29565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f990611a88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a69906119a8565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610b509190611ac8565b60405180910390a3505050565b6000610b69848461080b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610be35781811015610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc906119c8565b60405180910390fd5b610be28484848403610992565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d4057600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166399cca36c8483610c88876105c5565b610c929190611b70565b6040518363ffffffff1660e01b8152600401610caf9291906118e2565b60206040518083038186803b158015610cc757600080fd5b505afa158015610cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cff91906113aa565b15610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3690611a08565b60405180910390fd5b5b610d4b838383610fed565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db790611a48565b60405180910390fd5b610dcc82600083611271565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4a90611968565b60405180910390fd5b818103600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160036000828254610eab9190611b70565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f109190611ac8565b60405180910390a3610f2483600084611276565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561105d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105490611a68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c490611948565b60405180910390fd5b6110d8838383611271565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561115f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611156906119e8565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111f49190611b1a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516112589190611ac8565b60405180910390a361126b848484611276565b50505050565b505050565b505050565b60008135905061128a81611ccd565b92915050565b60008151905061129f81611ce4565b92915050565b6000813590506112b481611cfb565b92915050565b6000602082840312156112cc57600080fd5b60006112da8482850161127b565b91505092915050565b600080604083850312156112f657600080fd5b60006113048582860161127b565b92505060206113158582860161127b565b9150509250929050565b60008060006060848603121561133457600080fd5b60006113428682870161127b565b93505060206113538682870161127b565b9250506040611364868287016112a5565b9150509250925092565b6000806040838503121561138157600080fd5b600061138f8582860161127b565b92505060206113a0858286016112a5565b9150509250929050565b6000602082840312156113bc57600080fd5b60006113ca84828501611290565b91505092915050565b6000602082840312156113e557600080fd5b60006113f3848285016112a5565b91505092915050565b61140581611ba4565b82525050565b61141481611bb6565b82525050565b600061142582611afe565b61142f8185611b09565b935061143f818560208601611bf9565b61144881611cbc565b840191505092915050565b6000611460602383611b09565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006114c6602283611b09565b91507f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008301527f63650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061152c602683611b09565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611592602283611b09565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006115f8601d83611b09565b91507f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006000830152602082019050919050565b6000611638602683611b09565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061169e601a83611b09565b91507f596f757220746f6b656e20686173206265656e206c6f636b65640000000000006000830152602082019050919050565b60006116de602083611b09565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061171e602183611b09565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611784602583611b09565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006117ea602483611b09565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611850602583611b09565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6118b281611be2565b82525050565b6118c181611bec565b82525050565b60006020820190506118dc60008301846113fc565b92915050565b60006040820190506118f760008301856113fc565b61190460208301846118a9565b9392505050565b6000602082019050611920600083018461140b565b92915050565b60006020820190508181036000830152611940818461141a565b905092915050565b6000602082019050818103600083015261196181611453565b9050919050565b60006020820190508181036000830152611981816114b9565b9050919050565b600060208201905081810360008301526119a18161151f565b9050919050565b600060208201905081810360008301526119c181611585565b9050919050565b600060208201905081810360008301526119e1816115eb565b9050919050565b60006020820190508181036000830152611a018161162b565b9050919050565b60006020820190508181036000830152611a2181611691565b9050919050565b60006020820190508181036000830152611a41816116d1565b9050919050565b60006020820190508181036000830152611a6181611711565b9050919050565b60006020820190508181036000830152611a8181611777565b9050919050565b60006020820190508181036000830152611aa1816117dd565b9050919050565b60006020820190508181036000830152611ac181611843565b9050919050565b6000602082019050611add60008301846118a9565b92915050565b6000602082019050611af860008301846118b8565b92915050565b600081519050919050565b600082825260208201905092915050565b6000611b2582611be2565b9150611b3083611be2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611b6557611b64611c5e565b5b828201905092915050565b6000611b7b82611be2565b9150611b8683611be2565b925082821015611b9957611b98611c5e565b5b828203905092915050565b6000611baf82611bc2565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015611c17578082015181840152602081019050611bfc565b83811115611c26576000848401525b50505050565b60006002820490506001821680611c4457607f821691505b60208210811415611c5857611c57611c8d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b611cd681611ba4565b8114611ce157600080fd5b50565b611ced81611bb6565b8114611cf857600080fd5b50565b611d0481611be2565b8114611d0f57600080fd5b5056fea264697066735822122015967709a0ec005990e6886534a488debe9d7fc57e14c222f0f224c363135b4164736f6c63430008000033

Deployed ByteCode Sourcemap

21395:791:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9379:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11730:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21606:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10499:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12511:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10341:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13215:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20757:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22096:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10670:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2802:103;;;:::i;:::-;;21167:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2151:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9598:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13956:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11003:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11259:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3060:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9379:100;9433:13;9466:5;9459:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9379:100;:::o;11730:201::-;11813:4;11830:13;11846:12;:10;:12::i;:::-;11830:28;;11869:32;11878:5;11885:7;11894:6;11869:8;:32::i;:::-;11919:4;11912:11;;;11730:201;;;;:::o;21606:97::-;2382:12;:10;:12::i;:::-;2371:23;;:7;:5;:7::i;:::-;:23;;;2363:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21687:7:::1;21670:6;;:25;;;;;;;;;;;;;;;;;;21606:97:::0;:::o;10499:108::-;10560:7;10587:12;;10580:19;;10499:108;:::o;12511:295::-;12642:4;12659:15;12677:12;:10;:12::i;:::-;12659:30;;12700:38;12716:4;12722:7;12731:6;12700:15;:38::i;:::-;12749:27;12759:4;12765:2;12769:6;12749:9;:27::i;:::-;12794:4;12787:11;;;12511:295;;;;;:::o;10341:93::-;10399:5;10424:2;10417:9;;10341:93;:::o;13215:238::-;13303:4;13320:13;13336:12;:10;:12::i;:::-;13320:28;;13359:64;13368:5;13375:7;13412:10;13384:25;13394:5;13401:7;13384:9;:25::i;:::-;:38;;;;:::i;:::-;13359:8;:64::i;:::-;13441:4;13434:11;;;13215:238;;;;:::o;20757:91::-;20813:27;20819:12;:10;:12::i;:::-;20833:6;20813:5;:27::i;:::-;20757:91;:::o;22096:87::-;22138:7;22170:6;;;;;;;;;;;22155:22;;22096:87;:::o;10670:127::-;10744:7;10771:9;:18;10781:7;10771:18;;;;;;;;;;;;;;;;10764:25;;10670:127;;;:::o;2802:103::-;2382:12;:10;:12::i;:::-;2371:23;;:7;:5;:7::i;:::-;:23;;;2363:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2867:30:::1;2894:1;2867:18;:30::i;:::-;2802:103::o:0;21167:164::-;21244:46;21260:7;21269:12;:10;:12::i;:::-;21283:6;21244:15;:46::i;:::-;21301:22;21307:7;21316:6;21301:5;:22::i;:::-;21167:164;;:::o;2151:87::-;2197:7;2224:6;;;;;;;;;;;2217:13;;2151:87;:::o;9598:104::-;9654:13;9687:7;9680:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9598:104;:::o;13956:436::-;14049:4;14066:13;14082:12;:10;:12::i;:::-;14066:28;;14105:24;14132:25;14142:5;14149:7;14132:9;:25::i;:::-;14105:52;;14196:15;14176:16;:35;;14168:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14289:60;14298:5;14305:7;14333:15;14314:16;:34;14289:8;:60::i;:::-;14380:4;14373:11;;;;13956:436;;;;:::o;11003:193::-;11082:4;11099:13;11115:12;:10;:12::i;:::-;11099:28;;11138;11148:5;11155:2;11159:6;11138:9;:28::i;:::-;11184:4;11177:11;;;11003:193;;;;:::o;11259:151::-;11348:7;11375:11;:18;11387:5;11375:18;;;;;;;;;;;;;;;:27;11394:7;11375:27;;;;;;;;;;;;;;;;11368:34;;11259:151;;;;:::o;3060:201::-;2382:12;:10;:12::i;:::-;2371:23;;:7;:5;:7::i;:::-;:23;;;2363:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3169:1:::1;3149:22;;:8;:22;;;;3141:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3225:28;3244:8;3225:18;:28::i;:::-;3060:201:::0;:::o;875:98::-;928:7;955:10;948:17;;875:98;:::o;17590:380::-;17743:1;17726:19;;:5;:19;;;;17718:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17824:1;17805:21;;:7;:21;;;;17797:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17908:6;17878:11;:18;17890:5;17878:18;;;;;;;;;;;;;;;:27;17897:7;17878:27;;;;;;;;;;;;;;;:36;;;;17946:7;17930:32;;17939:5;17930:32;;;17955:6;17930:32;;;;;;:::i;:::-;;;;;;;;17590:380;;;:::o;18261:453::-;18396:24;18423:25;18433:5;18440:7;18423:9;:25::i;:::-;18396:52;;18483:17;18463:16;:37;18459:248;;18545:6;18525:16;:26;;18517:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18629:51;18638:5;18645:7;18673:6;18654:16;:25;18629:8;:51::i;:::-;18459:248;18261:453;;;;:::o;21711:379::-;21900:1;21873:29;;21881:6;;;;;;;;;;;21873:29;;;21869:160;;21919:6;;;;;;;;;;;:15;;;21935:6;21963;21943:17;21953:6;21943:9;:17::i;:::-;:26;;;;:::i;:::-;21919:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21915:106;;;21985:36;;;;;;;;;;:::i;:::-;;;;;;;;21915:106;21869:160;22042:42;22058:6;22066:9;22077:6;22042:15;:42::i;:::-;21711:379;;;:::o;16561:591::-;16664:1;16645:21;;:7;:21;;;;16637:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16717:49;16738:7;16755:1;16759:6;16717:20;:49::i;:::-;16779:22;16804:9;:18;16814:7;16804:18;;;;;;;;;;;;;;;;16779:43;;16859:6;16841:14;:24;;16833:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16978:6;16961:14;:23;16940:9;:18;16950:7;16940:18;;;;;;;;;;;;;;;:44;;;;17022:6;17006:12;;:22;;;;;;;:::i;:::-;;;;;;;;17072:1;17046:37;;17055:7;17046:37;;;17076:6;17046:37;;;;;;:::i;:::-;;;;;;;;17096:48;17116:7;17133:1;17137:6;17096:19;:48::i;:::-;16561:591;;;:::o;3421:191::-;3495:16;3514:6;;;;;;;;;;;3495:25;;3540:8;3531:6;;:17;;;;;;;;;;;;;;;;;;3595:8;3564:40;;3585:8;3564:40;;;;;;;;;;;;3421:191;;:::o;14871:671::-;15018:1;15002:18;;:4;:18;;;;14994:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15095:1;15081:16;;:2;:16;;;;15073:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15150:38;15171:4;15177:2;15181:6;15150:20;:38::i;:::-;15201:19;15223:9;:15;15233:4;15223:15;;;;;;;;;;;;;;;;15201:37;;15272:6;15257:11;:21;;15249:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;15389:6;15375:11;:20;15357:9;:15;15367:4;15357:15;;;;;;;;;;;;;;;:38;;;;15434:6;15417:9;:13;15427:2;15417:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;15473:2;15458:26;;15467:4;15458:26;;;15477:6;15458:26;;;;;;:::i;:::-;;;;;;;;15497:37;15517:4;15523:2;15527:6;15497:19;:37::i;:::-;14871:671;;;;:::o;19314:125::-;;;;:::o;20043:124::-;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:137::-;;237:6;231:13;222:22;;253:30;277:5;253:30;:::i;:::-;212:77;;;;:::o;295:139::-;;379:6;366:20;357:29;;395:33;422:5;395:33;:::i;:::-;347:87;;;;:::o;440:262::-;;548:2;536:9;527:7;523:23;519:32;516:2;;;564:1;561;554:12;516:2;607:1;632:53;677:7;668:6;657:9;653:22;632:53;:::i;:::-;622:63;;578:117;506:196;;;;:::o;708:407::-;;;833:2;821:9;812:7;808:23;804:32;801:2;;;849:1;846;839:12;801:2;892:1;917:53;962:7;953:6;942:9;938:22;917:53;:::i;:::-;907:63;;863:117;1019:2;1045:53;1090:7;1081:6;1070:9;1066:22;1045:53;:::i;:::-;1035:63;;990:118;791:324;;;;;:::o;1121:552::-;;;;1263:2;1251:9;1242:7;1238:23;1234:32;1231:2;;;1279:1;1276;1269:12;1231:2;1322:1;1347:53;1392:7;1383:6;1372:9;1368:22;1347:53;:::i;:::-;1337:63;;1293:117;1449:2;1475:53;1520:7;1511:6;1500:9;1496:22;1475:53;:::i;:::-;1465:63;;1420:118;1577:2;1603:53;1648:7;1639:6;1628:9;1624:22;1603:53;:::i;:::-;1593:63;;1548:118;1221:452;;;;;:::o;1679:407::-;;;1804:2;1792:9;1783:7;1779:23;1775:32;1772:2;;;1820:1;1817;1810:12;1772:2;1863:1;1888:53;1933:7;1924:6;1913:9;1909:22;1888:53;:::i;:::-;1878:63;;1834:117;1990:2;2016:53;2061:7;2052:6;2041:9;2037:22;2016:53;:::i;:::-;2006:63;;1961:118;1762:324;;;;;:::o;2092:278::-;;2208:2;2196:9;2187:7;2183:23;2179:32;2176:2;;;2224:1;2221;2214:12;2176:2;2267:1;2292:61;2345:7;2336:6;2325:9;2321:22;2292:61;:::i;:::-;2282:71;;2238:125;2166:204;;;;:::o;2376:262::-;;2484:2;2472:9;2463:7;2459:23;2455:32;2452:2;;;2500:1;2497;2490:12;2452:2;2543:1;2568:53;2613:7;2604:6;2593:9;2589:22;2568:53;:::i;:::-;2558:63;;2514:117;2442:196;;;;:::o;2644:118::-;2731:24;2749:5;2731:24;:::i;:::-;2726:3;2719:37;2709:53;;:::o;2768:109::-;2849:21;2864:5;2849:21;:::i;:::-;2844:3;2837:34;2827:50;;:::o;2883:364::-;;2999:39;3032:5;2999:39;:::i;:::-;3054:71;3118:6;3113:3;3054:71;:::i;:::-;3047:78;;3134:52;3179:6;3174:3;3167:4;3160:5;3156:16;3134:52;:::i;:::-;3211:29;3233:6;3211:29;:::i;:::-;3206:3;3202:39;3195:46;;2975:272;;;;;:::o;3253:367::-;;3416:67;3480:2;3475:3;3416:67;:::i;:::-;3409:74;;3513:34;3509:1;3504:3;3500:11;3493:55;3579:5;3574:2;3569:3;3565:12;3558:27;3611:2;3606:3;3602:12;3595:19;;3399:221;;;:::o;3626:366::-;;3789:67;3853:2;3848:3;3789:67;:::i;:::-;3782:74;;3886:34;3882:1;3877:3;3873:11;3866:55;3952:4;3947:2;3942:3;3938:12;3931:26;3983:2;3978:3;3974:12;3967:19;;3772:220;;;:::o;3998:370::-;;4161:67;4225:2;4220:3;4161:67;:::i;:::-;4154:74;;4258:34;4254:1;4249:3;4245:11;4238:55;4324:8;4319:2;4314:3;4310:12;4303:30;4359:2;4354:3;4350:12;4343:19;;4144:224;;;:::o;4374:366::-;;4537:67;4601:2;4596:3;4537:67;:::i;:::-;4530:74;;4634:34;4630:1;4625:3;4621:11;4614:55;4700:4;4695:2;4690:3;4686:12;4679:26;4731:2;4726:3;4722:12;4715:19;;4520:220;;;:::o;4746:327::-;;4909:67;4973:2;4968:3;4909:67;:::i;:::-;4902:74;;5006:31;5002:1;4997:3;4993:11;4986:52;5064:2;5059:3;5055:12;5048:19;;4892:181;;;:::o;5079:370::-;;5242:67;5306:2;5301:3;5242:67;:::i;:::-;5235:74;;5339:34;5335:1;5330:3;5326:11;5319:55;5405:8;5400:2;5395:3;5391:12;5384:30;5440:2;5435:3;5431:12;5424:19;;5225:224;;;:::o;5455:324::-;;5618:67;5682:2;5677:3;5618:67;:::i;:::-;5611:74;;5715:28;5711:1;5706:3;5702:11;5695:49;5770:2;5765:3;5761:12;5754:19;;5601:178;;;:::o;5785:330::-;;5948:67;6012:2;6007:3;5948:67;:::i;:::-;5941:74;;6045:34;6041:1;6036:3;6032:11;6025:55;6106:2;6101:3;6097:12;6090:19;;5931:184;;;:::o;6121:365::-;;6284:67;6348:2;6343:3;6284:67;:::i;:::-;6277:74;;6381:34;6377:1;6372:3;6368:11;6361:55;6447:3;6442:2;6437:3;6433:12;6426:25;6477:2;6472:3;6468:12;6461:19;;6267:219;;;:::o;6492:369::-;;6655:67;6719:2;6714:3;6655:67;:::i;:::-;6648:74;;6752:34;6748:1;6743:3;6739:11;6732:55;6818:7;6813:2;6808:3;6804:12;6797:29;6852:2;6847:3;6843:12;6836:19;;6638:223;;;:::o;6867:368::-;;7030:67;7094:2;7089:3;7030:67;:::i;:::-;7023:74;;7127:34;7123:1;7118:3;7114:11;7107:55;7193:6;7188:2;7183:3;7179:12;7172:28;7226:2;7221:3;7217:12;7210:19;;7013:222;;;:::o;7241:369::-;;7404:67;7468:2;7463:3;7404:67;:::i;:::-;7397:74;;7501:34;7497:1;7492:3;7488:11;7481:55;7567:7;7562:2;7557:3;7553:12;7546:29;7601:2;7596:3;7592:12;7585:19;;7387:223;;;:::o;7616:118::-;7703:24;7721:5;7703:24;:::i;:::-;7698:3;7691:37;7681:53;;:::o;7740:112::-;7823:22;7839:5;7823:22;:::i;:::-;7818:3;7811:35;7801:51;;:::o;7858:222::-;;7989:2;7978:9;7974:18;7966:26;;8002:71;8070:1;8059:9;8055:17;8046:6;8002:71;:::i;:::-;7956:124;;;;:::o;8086:332::-;;8245:2;8234:9;8230:18;8222:26;;8258:71;8326:1;8315:9;8311:17;8302:6;8258:71;:::i;:::-;8339:72;8407:2;8396:9;8392:18;8383:6;8339:72;:::i;:::-;8212:206;;;;;:::o;8424:210::-;;8549:2;8538:9;8534:18;8526:26;;8562:65;8624:1;8613:9;8609:17;8600:6;8562:65;:::i;:::-;8516:118;;;;:::o;8640:313::-;;8791:2;8780:9;8776:18;8768:26;;8840:9;8834:4;8830:20;8826:1;8815:9;8811:17;8804:47;8868:78;8941:4;8932:6;8868:78;:::i;:::-;8860:86;;8758:195;;;;:::o;8959:419::-;;9163:2;9152:9;9148:18;9140:26;;9212:9;9206:4;9202:20;9198:1;9187:9;9183:17;9176:47;9240:131;9366:4;9240:131;:::i;:::-;9232:139;;9130:248;;;:::o;9384:419::-;;9588:2;9577:9;9573:18;9565:26;;9637:9;9631:4;9627:20;9623:1;9612:9;9608:17;9601:47;9665:131;9791:4;9665:131;:::i;:::-;9657:139;;9555:248;;;:::o;9809:419::-;;10013:2;10002:9;9998:18;9990:26;;10062:9;10056:4;10052:20;10048:1;10037:9;10033:17;10026:47;10090:131;10216:4;10090:131;:::i;:::-;10082:139;;9980:248;;;:::o;10234:419::-;;10438:2;10427:9;10423:18;10415:26;;10487:9;10481:4;10477:20;10473:1;10462:9;10458:17;10451:47;10515:131;10641:4;10515:131;:::i;:::-;10507:139;;10405:248;;;:::o;10659:419::-;;10863:2;10852:9;10848:18;10840:26;;10912:9;10906:4;10902:20;10898:1;10887:9;10883:17;10876:47;10940:131;11066:4;10940:131;:::i;:::-;10932:139;;10830:248;;;:::o;11084:419::-;;11288:2;11277:9;11273:18;11265:26;;11337:9;11331:4;11327:20;11323:1;11312:9;11308:17;11301:47;11365:131;11491:4;11365:131;:::i;:::-;11357:139;;11255:248;;;:::o;11509:419::-;;11713:2;11702:9;11698:18;11690:26;;11762:9;11756:4;11752:20;11748:1;11737:9;11733:17;11726:47;11790:131;11916:4;11790:131;:::i;:::-;11782:139;;11680:248;;;:::o;11934:419::-;;12138:2;12127:9;12123:18;12115:26;;12187:9;12181:4;12177:20;12173:1;12162:9;12158:17;12151:47;12215:131;12341:4;12215:131;:::i;:::-;12207:139;;12105:248;;;:::o;12359:419::-;;12563:2;12552:9;12548:18;12540:26;;12612:9;12606:4;12602:20;12598:1;12587:9;12583:17;12576:47;12640:131;12766:4;12640:131;:::i;:::-;12632:139;;12530:248;;;:::o;12784:419::-;;12988:2;12977:9;12973:18;12965:26;;13037:9;13031:4;13027:20;13023:1;13012:9;13008:17;13001:47;13065:131;13191:4;13065:131;:::i;:::-;13057:139;;12955:248;;;:::o;13209:419::-;;13413:2;13402:9;13398:18;13390:26;;13462:9;13456:4;13452:20;13448:1;13437:9;13433:17;13426:47;13490:131;13616:4;13490:131;:::i;:::-;13482:139;;13380:248;;;:::o;13634:419::-;;13838:2;13827:9;13823:18;13815:26;;13887:9;13881:4;13877:20;13873:1;13862:9;13858:17;13851:47;13915:131;14041:4;13915:131;:::i;:::-;13907:139;;13805:248;;;:::o;14059:222::-;;14190:2;14179:9;14175:18;14167:26;;14203:71;14271:1;14260:9;14256:17;14247:6;14203:71;:::i;:::-;14157:124;;;;:::o;14287:214::-;;14414:2;14403:9;14399:18;14391:26;;14427:67;14491:1;14480:9;14476:17;14467:6;14427:67;:::i;:::-;14381:120;;;;:::o;14507:99::-;;14593:5;14587:12;14577:22;;14566:40;;;:::o;14612:169::-;;14730:6;14725:3;14718:19;14770:4;14765:3;14761:14;14746:29;;14708:73;;;;:::o;14787:305::-;;14846:20;14864:1;14846:20;:::i;:::-;14841:25;;14880:20;14898:1;14880:20;:::i;:::-;14875:25;;15034:1;14966:66;14962:74;14959:1;14956:81;14953:2;;;15040:18;;:::i;:::-;14953:2;15084:1;15081;15077:9;15070:16;;14831:261;;;;:::o;15098:191::-;;15158:20;15176:1;15158:20;:::i;:::-;15153:25;;15192:20;15210:1;15192:20;:::i;:::-;15187:25;;15231:1;15228;15225:8;15222:2;;;15236:18;;:::i;:::-;15222:2;15281:1;15278;15274:9;15266:17;;15143:146;;;;:::o;15295:96::-;;15361:24;15379:5;15361:24;:::i;:::-;15350:35;;15340:51;;;:::o;15397:90::-;;15474:5;15467:13;15460:21;15449:32;;15439:48;;;:::o;15493:126::-;;15570:42;15563:5;15559:54;15548:65;;15538:81;;;:::o;15625:77::-;;15691:5;15680:16;;15670:32;;;:::o;15708:86::-;;15783:4;15776:5;15772:16;15761:27;;15751:43;;;:::o;15800:307::-;15868:1;15878:113;15892:6;15889:1;15886:13;15878:113;;;15977:1;15972:3;15968:11;15962:18;15958:1;15953:3;15949:11;15942:39;15914:2;15911:1;15907:10;15902:15;;15878:113;;;16009:6;16006:1;16003:13;16000:2;;;16089:1;16080:6;16075:3;16071:16;16064:27;16000:2;15849:258;;;;:::o;16113:320::-;;16194:1;16188:4;16184:12;16174:22;;16241:1;16235:4;16231:12;16262:18;16252:2;;16318:4;16310:6;16306:17;16296:27;;16252:2;16380;16372:6;16369:14;16349:18;16346:38;16343:2;;;16399:18;;:::i;:::-;16343:2;16164:269;;;;:::o;16439:180::-;16487:77;16484:1;16477:88;16584:4;16581:1;16574:15;16608:4;16605:1;16598:15;16625:180;16673:77;16670:1;16663:88;16770:4;16767:1;16760:15;16794:4;16791:1;16784:15;16811:102;;16903:2;16899:7;16894:2;16887:5;16883:14;16879:28;16869:38;;16859:54;;;:::o;16919:122::-;16992:24;17010:5;16992:24;:::i;:::-;16985:5;16982:35;16972:2;;17031:1;17028;17021:12;16972:2;16962:79;:::o;17047:116::-;17117:21;17132:5;17117:21;:::i;:::-;17110:5;17107:32;17097:2;;17153:1;17150;17143:12;17097:2;17087:76;:::o;17169:122::-;17242:24;17260:5;17242:24;:::i;:::-;17235:5;17232:35;17222:2;;17281:1;17278;17271:12;17222:2;17212:79;:::o

Swarm Source

ipfs://15967709a0ec005990e6886534a488debe9d7fc57e14c222f0f224c363135b41

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.