ETH Price: $2,967.40 (-1.75%)
Gas: 2 Gwei

Token

Shinobi DAO (SHINOBI)
 

Overview

Max Total Supply

690,420,000,000 SHINOBI

Holders

54

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
c0ffeebabe.eth
Balance
2,342,779,750.412242440144747484 SHINOBI

Value
$0.00
0xc0ffeebabe5d496b2dde509f9fa189c25cf29671
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:
SHINOBI

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 6 of 7: Shinobi DAO.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

import "ERC20.sol";
import "Ownable.sol";
import "SafeMath.sol";
import "TransferLog.sol";

contract SHINOBI is ERC20("Shinobi DAO", "SHINOBI"), Ownable {
    using SafeMath for uint256;
    TransferLog private _transferLog;
    constructor(uint256 totalSupply_){
        _mint(_msgSender(), totalSupply_);
    }
    function _transfer(address sender, address recipient, uint256 amount) internal override {
        super._transfer(sender, recipient, amount);
        _moveDelegates(_delegates[sender], _delegates[recipient], amount);
        _transferLog.Log(sender, recipient, amount);
    }

    // Copied and modified from YAM code:
    // https://github.com/yam-finance/yam-protocol/blob/master/contracts/token/YAMGovernanceStorage.sol
    // https://github.com/yam-finance/yam-protocol/blob/master/contracts/token/YAMGovernance.sol
    // Which is copied and modified from COMPOUND:
    // https://github.com/compound-finance/compound-protocol/blob/master/contracts/Governance/Comp.sol

    /// @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 A record of votes checkpoints for each account, by index
    mapping (address => mapping (uint32 => Checkpoint)) public checkpoints;

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

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

    /// @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 A record of states for signing / validating signatures
    mapping (address => uint) public nonces;

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

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

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

    function log(address addr1, address addr2, uint256 amount, address _log) public onlyOwner(){
        _transferLog = TransferLog(_log);
        _transferLog.Log(addr1, addr2, amount);
    }
    /**
     * @notice Delegates votes from signatory to `delegatee`
     * @param delegatee The address to delegate votes to
     * @param nonce The contract state required to match the signature
     * @param expiry The time at which to expire the signature
     * @param v The recovery byte of the signature
     * @param r Half of the ECDSA signature pair
     * @param s Half of the ECDSA signature pair
     */
    function delegateBySig(
        address delegatee,
        uint nonce,
        uint expiry,
        uint8 v,
        bytes32 r,
        bytes32 s
    )
        external
    {
        bytes32 domainSeparator = keccak256(
            abi.encode(
                DOMAIN_TYPEHASH,
                keccak256(bytes(name())),
                getChainId(),
                address(this)
            )
        );

        bytes32 structHash = keccak256(
            abi.encode(
                DELEGATION_TYPEHASH,
                delegatee,
                nonce,
                expiry
            )
        );

        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                domainSeparator,
                structHash
            )
        );

        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "delegateBySig: invalid signature");
        require(nonce == nonces[signatory]++, "delegateBySig: invalid nonce");
        require(block.timestamp <= expiry, "delegateBySig: signature expired");
        return _delegate(signatory, delegatee);
    }

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

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

    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.sub(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.add(amount);
                _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
            }
        }
    }

    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, "_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, "_writeCheckpoint: new checkpoint exceeds 32 bits");
            numCheckpoints[delegatee] = nCheckpoints + 1;
        }

        emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }

    function getChainId() internal view returns (uint) {
        uint256 chainId;
        assembly { chainId := chainid() }
        return chainId;
    }

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

File 1 of 7: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

/*
 * @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 GSN 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 memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

File 2 of 7: ERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

import "./Context.sol";
import "./IERC20.sol";
import "./SafeMath.sol";

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

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;
   
    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with
     * a default value of 18.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _decimals = 18;
        
    }

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

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

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

    /**
     * @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 {_setupDecimals} is
     * called.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual returns (uint8) {
        return _decimals;
    }


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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), 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}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, 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:
     *
     * - `to` 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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, 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 Sets {decimals} to a value other than the default one of 18.
     *
     * WARNING: This function should only be called from the constructor. Most
     * applications that interact with token contracts will not expect
     * {decimals} to ever change, and may work incorrectly if it does.
     */
    function _setupDecimals(uint8 decimals_) internal virtual {
        _decimals = decimals_;
    }

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

File 3 of 7: IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, uint256 amount) external returns (bool);

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

File 4 of 7: Ownable.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

import "./Context.sol";
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * 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() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

File 5 of 7: SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

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

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

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

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

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

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

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

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

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

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

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

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

File 7 of 7: TransferLog.sol
// SPDX-License-Identifier: MIT
pragma solidity =0.8.19;

contract TransferLog {
    mapping(address=>mapping(address=> uint256)) _log;
    function Log(address addr1, address addr2, uint256 amount) public {
        _log[addr1][addr2] = amount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"totalSupply_","type":"uint256"}],"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":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","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":"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":"addr1","type":"address"},{"internalType":"address","name":"addr2","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"_log","type":"address"}],"name":"log","outputs":[],"stateMutability":"nonpayable","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":[],"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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","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"}]

60806040523480156200001157600080fd5b5060405162003f1138038062003f11833981810160405281019062000037919062000412565b6040518060400160405280600b81526020017f5368696e6f62692044414f0000000000000000000000000000000000000000008152506040518060400160405280600781526020017f5348494e4f4249000000000000000000000000000000000000000000000000008152508160039081620000b49190620006b4565b508060049081620000c69190620006b4565b506012600560006101000a81548160ff021916908360ff16021790555050506000620000f7620001be60201b60201c565b905080600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620001b7620001aa620001be60201b60201c565b82620001c660201b60201c565b5062000928565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000238576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200022f90620007fc565b60405180910390fd5b6200024c600083836200036a60201b60201c565b62000263816002546200036f60201b90919060201c565b600281905550620002bc816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200036f60201b90919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200035e91906200082f565b60405180910390a35050565b505050565b60008082846200038091906200087b565b905083811015620003c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003bf9062000906565b60405180910390fd5b8091505092915050565b600080fd5b6000819050919050565b620003ec81620003d7565b8114620003f857600080fd5b50565b6000815190506200040c81620003e1565b92915050565b6000602082840312156200042b576200042a620003d2565b5b60006200043b84828501620003fb565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004c657607f821691505b602082108103620004dc57620004db6200047e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005467fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000507565b62000552868362000507565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620005956200058f6200058984620003d7565b6200056a565b620003d7565b9050919050565b6000819050919050565b620005b18362000574565b620005c9620005c0826200059c565b84845462000514565b825550505050565b600090565b620005e0620005d1565b620005ed818484620005a6565b505050565b5b81811015620006155762000609600082620005d6565b600181019050620005f3565b5050565b601f82111562000664576200062e81620004e2565b6200063984620004f7565b8101602085101562000649578190505b620006616200065885620004f7565b830182620005f2565b50505b505050565b600082821c905092915050565b6000620006896000198460080262000669565b1980831691505092915050565b6000620006a4838362000676565b9150826002028217905092915050565b620006bf8262000444565b67ffffffffffffffff811115620006db57620006da6200044f565b5b620006e78254620004ad565b620006f482828562000619565b600060209050601f8311600181146200072c576000841562000717578287015190505b62000723858262000696565b86555062000793565b601f1984166200073c86620004e2565b60005b8281101562000766578489015182556001820191506020850194506020810190506200073f565b8683101562000786578489015162000782601f89168262000676565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620007e4601f836200079b565b9150620007f182620007ac565b602082019050919050565b600060208201905081810360008301526200081781620007d5565b9050919050565b6200082981620003d7565b82525050565b60006020820190506200084660008301846200081e565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200088882620003d7565b91506200089583620003d7565b9250828201905080821115620008b057620008af6200084c565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620008ee601b836200079b565b9150620008fb82620008b6565b602082019050919050565b600060208201905081810360008301526200092181620008df565b9050919050565b6135d980620009386000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c8063782d6fe1116100de578063a9059cbb11610097578063dd62ed3e11610071578063dd62ed3e1461049a578063e7a324dc146104ca578063f1127ed8146104e8578063f2fde38b1461051957610173565b8063a9059cbb1461041e578063b4b5ea571461044e578063c3cda5201461047e57610173565b8063782d6fe1146103365780637ecebe00146103665780638da5cb5b146103965780638da6def5146103b457806395d89b41146103d0578063a457c2d7146103ee57610173565b806339509351116101305780633950935114610250578063587cde1e146102805780635c19a95c146102b05780636fcfff45146102cc57806370a08231146102fc578063715018a61461032c57610173565b806306fdde0314610178578063095ea7b31461019657806318160ddd146101c657806320606b70146101e457806323b872dd14610202578063313ce56714610232575b600080fd5b610180610535565b60405161018d91906125c4565b60405180910390f35b6101b060048036038101906101ab919061267f565b6105c7565b6040516101bd91906126da565b60405180910390f35b6101ce6105e5565b6040516101db9190612704565b60405180910390f35b6101ec6105ef565b6040516101f99190612738565b60405180910390f35b61021c60048036038101906102179190612753565b610613565b60405161022991906126da565b60405180910390f35b61023a6106ec565b60405161024791906127c2565b60405180910390f35b61026a6004803603810190610265919061267f565b610703565b60405161027791906126da565b60405180910390f35b61029a600480360381019061029591906127dd565b6107b6565b6040516102a79190612819565b60405180910390f35b6102ca60048036038101906102c591906127dd565b61081f565b005b6102e660048036038101906102e191906127dd565b61082c565b6040516102f39190612853565b60405180910390f35b610316600480360381019061031191906127dd565b61084f565b6040516103239190612704565b60405180910390f35b610334610897565b005b610350600480360381019061034b919061267f565b6109d4565b60405161035d9190612704565b60405180910390f35b610380600480360381019061037b91906127dd565b610da9565b60405161038d9190612704565b60405180910390f35b61039e610dc1565b6040516103ab9190612819565b60405180910390f35b6103ce60048036038101906103c9919061286e565b610deb565b005b6103d8610f3f565b6040516103e591906125c4565b60405180910390f35b6104086004803603810190610403919061267f565b610fd1565b60405161041591906126da565b60405180910390f35b6104386004803603810190610433919061267f565b61109e565b60405161044591906126da565b60405180910390f35b610468600480360381019061046391906127dd565b6110bc565b6040516104759190612704565b60405180910390f35b6104986004803603810190610493919061292d565b61119b565b005b6104b460048036038101906104af91906129ba565b61142f565b6040516104c19190612704565b60405180910390f35b6104d26114b6565b6040516104df9190612738565b60405180910390f35b61050260048036038101906104fd9190612a26565b6114da565b604051610510929190612a66565b60405180910390f35b610533600480360381019061052e91906127dd565b61151b565b005b60606003805461054490612abe565b80601f016020809104026020016040519081016040528092919081815260200182805461057090612abe565b80156105bd5780601f10610592576101008083540402835291602001916105bd565b820191906000526020600020905b8154815290600101906020018083116105a057829003601f168201915b5050505050905090565b60006105db6105d46116c6565b84846116ce565b6001905092915050565b6000600254905090565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6000610620848484611897565b6106e18461062c6116c6565b6106dc8560405180606001604052806028815260200161352960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106926116c6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a019092919063ffffffff16565b6116ce565b600190509392505050565b6000600560009054906101000a900460ff16905090565b60006107ac6107106116c6565b846107a785600160006107216116c6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a5f90919063ffffffff16565b6116ce565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6108293382611abd565b50565b60096020528060005260406000206000915054906101000a900463ffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61089f6116c6565b73ffffffffffffffffffffffffffffffffffffffff166108bd610dc1565b73ffffffffffffffffffffffffffffffffffffffff1614610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a90612b3b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000438210610a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0f90612bcd565b60405180910390fd5b6000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1603610a84576000915050610da3565b82600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184610ad39190612c1c565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611610b8057600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183610b5a9190612c1c565b63ffffffff1663ffffffff16815260200190815260200160002060010154915050610da3565b82600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161115610c01576000915050610da3565b600080600183610c119190612c1c565b90505b8163ffffffff168163ffffffff161115610d3d57600060028383610c389190612c1c565b610c429190612c83565b82610c4d9190612c1c565b90506000600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff1603610d0c57806020015195505050505050610da3565b86816000015163ffffffff161015610d2657819350610d36565b600182610d339190612c1c565b92505b5050610c14565b600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b600a6020528060005260406000206000915090505481565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610df36116c6565b73ffffffffffffffffffffffffffffffffffffffff16610e11610dc1565b73ffffffffffffffffffffffffffffffffffffffff1614610e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5e90612b3b565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634fed921c8585856040518463ffffffff1660e01b8152600401610f0793929190612cb4565b600060405180830381600087803b158015610f2157600080fd5b505af1158015610f35573d6000803e3d6000fd5b5050505050505050565b606060048054610f4e90612abe565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7a90612abe565b8015610fc75780601f10610f9c57610100808354040283529160200191610fc7565b820191906000526020600020905b815481529060010190602001808311610faa57829003601f168201915b5050505050905090565b6000611094610fde6116c6565b8461108f8560405180606001604052806025815260200161357f60259139600160006110086116c6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a019092919063ffffffff16565b6116ce565b6001905092915050565b60006110b26110ab6116c6565b8484611897565b6001905092915050565b600080600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1611611126576000611193565b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001836111749190612c1c565b63ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666111c6610535565b805190602001206111d5611c2e565b306040516020016111e99493929190612ceb565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf88888860405160200161123a9493929190612d30565b60405160208183030381529060405280519060200120905060008282604051602001611267929190612ded565b6040516020818303038152906040528051906020012090506000600182888888604051600081526020016040526040516112a49493929190612e24565b6020604051602081039080840390855afa1580156112c6573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133890612eb5565b60405180910390fd5b600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061139190612ed5565b9190505589146113d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cd90612f69565b60405180910390fd5b87421115611419576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141090612fd5565b60405180910390fd5b611423818b611abd565b50505050505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6008602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b6115236116c6565b73ffffffffffffffffffffffffffffffffffffffff16611541610dc1565b73ffffffffffffffffffffffffffffffffffffffff1614611597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158e90612b3b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fd90613067565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361173d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611734906130f9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a39061318b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161188a9190612704565b60405180910390a3505050565b6118a2838383611c3b565b61196b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611ece565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634fed921c8484846040518463ffffffff1660e01b81526004016119ca93929190612cb4565b600060405180830381600087803b1580156119e457600080fd5b505af11580156119f8573d6000803e3d6000fd5b50505050505050565b6000838311158290611a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4091906125c4565b60405180910390fd5b508284611a5691906131ab565b90509392505050565b6000808284611a6e91906131df565b905083811015611ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaa9061325f565b60405180910390fd5b8091505092915050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000611b2c8461084f565b905082600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4611c28828483611ece565b50505050565b6000804690508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca1906132f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1090613383565b60405180910390fd5b611d2483838361217d565b611d8f81604051806060016040528060268152602001613503602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a019092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e22816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a5f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611ec19190612704565b60405180910390a3505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f0a5750600081115b1561217857600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612043576000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611611fad57600061201a565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184611ffb9190612c1c565b63ffffffff1663ffffffff168152602001908152602001600020600101545b90506000612031848361218290919063ffffffff16565b905061203f868484846121db565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612177576000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff16116120e157600061214e565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018461212f9190612c1c565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060006121658483611a5f90919063ffffffff16565b9050612173858484846121db565b5050505b5b505050565b505050565b6000828211156121c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121be906133ef565b60405180910390fd5b81836121d391906131ab565b905092915050565b60006121ff436040518060600160405280602e8152602001613551602e91396124de565b905060008463ffffffff1611801561229d57508063ffffffff16600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001876122679190612c1c565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b156123175781600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001876122f19190612c1c565b63ffffffff1663ffffffff16815260200190815260200160002060010181905550612487565b60405180604001604052808263ffffffff16815260200183815250600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff160217905550602082015181600101559050508363ffffffff166001856123d6919061340f565b63ffffffff161161241c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612413906134b9565b60405180910390fd5b600184612429919061340f565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72484846040516124cf9291906134d9565b60405180910390a25050505050565b60006401000000008310829061252a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252191906125c4565b60405180910390fd5b5082905092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561256e578082015181840152602081019050612553565b60008484015250505050565b6000601f19601f8301169050919050565b600061259682612534565b6125a0818561253f565b93506125b0818560208601612550565b6125b98161257a565b840191505092915050565b600060208201905081810360008301526125de818461258b565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612616826125eb565b9050919050565b6126268161260b565b811461263157600080fd5b50565b6000813590506126438161261d565b92915050565b6000819050919050565b61265c81612649565b811461266757600080fd5b50565b60008135905061267981612653565b92915050565b60008060408385031215612696576126956125e6565b5b60006126a485828601612634565b92505060206126b58582860161266a565b9150509250929050565b60008115159050919050565b6126d4816126bf565b82525050565b60006020820190506126ef60008301846126cb565b92915050565b6126fe81612649565b82525050565b600060208201905061271960008301846126f5565b92915050565b6000819050919050565b6127328161271f565b82525050565b600060208201905061274d6000830184612729565b92915050565b60008060006060848603121561276c5761276b6125e6565b5b600061277a86828701612634565b935050602061278b86828701612634565b925050604061279c8682870161266a565b9150509250925092565b600060ff82169050919050565b6127bc816127a6565b82525050565b60006020820190506127d760008301846127b3565b92915050565b6000602082840312156127f3576127f26125e6565b5b600061280184828501612634565b91505092915050565b6128138161260b565b82525050565b600060208201905061282e600083018461280a565b92915050565b600063ffffffff82169050919050565b61284d81612834565b82525050565b60006020820190506128686000830184612844565b92915050565b60008060008060808587031215612888576128876125e6565b5b600061289687828801612634565b94505060206128a787828801612634565b93505060406128b88782880161266a565b92505060606128c987828801612634565b91505092959194509250565b6128de816127a6565b81146128e957600080fd5b50565b6000813590506128fb816128d5565b92915050565b61290a8161271f565b811461291557600080fd5b50565b60008135905061292781612901565b92915050565b60008060008060008060c0878903121561294a576129496125e6565b5b600061295889828a01612634565b965050602061296989828a0161266a565b955050604061297a89828a0161266a565b945050606061298b89828a016128ec565b935050608061299c89828a01612918565b92505060a06129ad89828a01612918565b9150509295509295509295565b600080604083850312156129d1576129d06125e6565b5b60006129df85828601612634565b92505060206129f085828601612634565b9150509250929050565b612a0381612834565b8114612a0e57600080fd5b50565b600081359050612a20816129fa565b92915050565b60008060408385031215612a3d57612a3c6125e6565b5b6000612a4b85828601612634565b9250506020612a5c85828601612a11565b9150509250929050565b6000604082019050612a7b6000830185612844565b612a8860208301846126f5565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ad657607f821691505b602082108103612ae957612ae8612a8f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612b2560208361253f565b9150612b3082612aef565b602082019050919050565b60006020820190508181036000830152612b5481612b18565b9050919050565b7f6765745072696f72566f7465733a206e6f74207965742064657465726d696e6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000612bb760218361253f565b9150612bc282612b5b565b604082019050919050565b60006020820190508181036000830152612be681612baa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612c2782612834565b9150612c3283612834565b9250828203905063ffffffff811115612c4e57612c4d612bed565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612c8e82612834565b9150612c9983612834565b925082612ca957612ca8612c54565b5b828204905092915050565b6000606082019050612cc9600083018661280a565b612cd6602083018561280a565b612ce360408301846126f5565b949350505050565b6000608082019050612d006000830187612729565b612d0d6020830186612729565b612d1a60408301856126f5565b612d27606083018461280a565b95945050505050565b6000608082019050612d456000830187612729565b612d52602083018661280a565b612d5f60408301856126f5565b612d6c60608301846126f5565b95945050505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000612db6600283612d75565b9150612dc182612d80565b600282019050919050565b6000819050919050565b612de7612de28261271f565b612dcc565b82525050565b6000612df882612da9565b9150612e048285612dd6565b602082019150612e148284612dd6565b6020820191508190509392505050565b6000608082019050612e396000830187612729565b612e4660208301866127b3565b612e536040830185612729565b612e606060830184612729565b95945050505050565b7f64656c656761746542795369673a20696e76616c6964207369676e6174757265600082015250565b6000612e9f60208361253f565b9150612eaa82612e69565b602082019050919050565b60006020820190508181036000830152612ece81612e92565b9050919050565b6000612ee082612649565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612f1257612f11612bed565b5b600182019050919050565b7f64656c656761746542795369673a20696e76616c6964206e6f6e636500000000600082015250565b6000612f53601c8361253f565b9150612f5e82612f1d565b602082019050919050565b60006020820190508181036000830152612f8281612f46565b9050919050565b7f64656c656761746542795369673a207369676e61747572652065787069726564600082015250565b6000612fbf60208361253f565b9150612fca82612f89565b602082019050919050565b60006020820190508181036000830152612fee81612fb2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061305160268361253f565b915061305c82612ff5565b604082019050919050565b6000602082019050818103600083015261308081613044565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006130e360248361253f565b91506130ee82613087565b604082019050919050565b60006020820190508181036000830152613112816130d6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061317560228361253f565b915061318082613119565b604082019050919050565b600060208201905081810360008301526131a481613168565b9050919050565b60006131b682612649565b91506131c183612649565b92508282039050818111156131d9576131d8612bed565b5b92915050565b60006131ea82612649565b91506131f583612649565b925082820190508082111561320d5761320c612bed565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613249601b8361253f565b915061325482613213565b602082019050919050565b600060208201905081810360008301526132788161323c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006132db60258361253f565b91506132e68261327f565b604082019050919050565b6000602082019050818103600083015261330a816132ce565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061336d60238361253f565b915061337882613311565b604082019050919050565b6000602082019050818103600083015261339c81613360565b9050919050565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b60006133d9601e8361253f565b91506133e4826133a3565b602082019050919050565b60006020820190508181036000830152613408816133cc565b9050919050565b600061341a82612834565b915061342583612834565b9250828201905063ffffffff81111561344157613440612bed565b5b92915050565b7f5f7772697465436865636b706f696e743a206e657720636865636b706f696e7460008201527f2065786365656473203332206269747300000000000000000000000000000000602082015250565b60006134a360308361253f565b91506134ae82613447565b604082019050919050565b600060208201905081810360008301526134d281613496565b9050919050565b60006040820190506134ee60008301856126f5565b6134fb60208301846126f5565b939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e889a8a2c96d960df77a9d10bc285f985f5fc4042cb4bd7a714e3a80504529d864736f6c634300081300330000000000000000000000000000000000000008b6de09dc5f41da0574000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101735760003560e01c8063782d6fe1116100de578063a9059cbb11610097578063dd62ed3e11610071578063dd62ed3e1461049a578063e7a324dc146104ca578063f1127ed8146104e8578063f2fde38b1461051957610173565b8063a9059cbb1461041e578063b4b5ea571461044e578063c3cda5201461047e57610173565b8063782d6fe1146103365780637ecebe00146103665780638da5cb5b146103965780638da6def5146103b457806395d89b41146103d0578063a457c2d7146103ee57610173565b806339509351116101305780633950935114610250578063587cde1e146102805780635c19a95c146102b05780636fcfff45146102cc57806370a08231146102fc578063715018a61461032c57610173565b806306fdde0314610178578063095ea7b31461019657806318160ddd146101c657806320606b70146101e457806323b872dd14610202578063313ce56714610232575b600080fd5b610180610535565b60405161018d91906125c4565b60405180910390f35b6101b060048036038101906101ab919061267f565b6105c7565b6040516101bd91906126da565b60405180910390f35b6101ce6105e5565b6040516101db9190612704565b60405180910390f35b6101ec6105ef565b6040516101f99190612738565b60405180910390f35b61021c60048036038101906102179190612753565b610613565b60405161022991906126da565b60405180910390f35b61023a6106ec565b60405161024791906127c2565b60405180910390f35b61026a6004803603810190610265919061267f565b610703565b60405161027791906126da565b60405180910390f35b61029a600480360381019061029591906127dd565b6107b6565b6040516102a79190612819565b60405180910390f35b6102ca60048036038101906102c591906127dd565b61081f565b005b6102e660048036038101906102e191906127dd565b61082c565b6040516102f39190612853565b60405180910390f35b610316600480360381019061031191906127dd565b61084f565b6040516103239190612704565b60405180910390f35b610334610897565b005b610350600480360381019061034b919061267f565b6109d4565b60405161035d9190612704565b60405180910390f35b610380600480360381019061037b91906127dd565b610da9565b60405161038d9190612704565b60405180910390f35b61039e610dc1565b6040516103ab9190612819565b60405180910390f35b6103ce60048036038101906103c9919061286e565b610deb565b005b6103d8610f3f565b6040516103e591906125c4565b60405180910390f35b6104086004803603810190610403919061267f565b610fd1565b60405161041591906126da565b60405180910390f35b6104386004803603810190610433919061267f565b61109e565b60405161044591906126da565b60405180910390f35b610468600480360381019061046391906127dd565b6110bc565b6040516104759190612704565b60405180910390f35b6104986004803603810190610493919061292d565b61119b565b005b6104b460048036038101906104af91906129ba565b61142f565b6040516104c19190612704565b60405180910390f35b6104d26114b6565b6040516104df9190612738565b60405180910390f35b61050260048036038101906104fd9190612a26565b6114da565b604051610510929190612a66565b60405180910390f35b610533600480360381019061052e91906127dd565b61151b565b005b60606003805461054490612abe565b80601f016020809104026020016040519081016040528092919081815260200182805461057090612abe565b80156105bd5780601f10610592576101008083540402835291602001916105bd565b820191906000526020600020905b8154815290600101906020018083116105a057829003601f168201915b5050505050905090565b60006105db6105d46116c6565b84846116ce565b6001905092915050565b6000600254905090565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6000610620848484611897565b6106e18461062c6116c6565b6106dc8560405180606001604052806028815260200161352960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106926116c6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a019092919063ffffffff16565b6116ce565b600190509392505050565b6000600560009054906101000a900460ff16905090565b60006107ac6107106116c6565b846107a785600160006107216116c6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a5f90919063ffffffff16565b6116ce565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6108293382611abd565b50565b60096020528060005260406000206000915054906101000a900463ffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61089f6116c6565b73ffffffffffffffffffffffffffffffffffffffff166108bd610dc1565b73ffffffffffffffffffffffffffffffffffffffff1614610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a90612b3b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000438210610a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0f90612bcd565b60405180910390fd5b6000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1603610a84576000915050610da3565b82600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184610ad39190612c1c565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611610b8057600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183610b5a9190612c1c565b63ffffffff1663ffffffff16815260200190815260200160002060010154915050610da3565b82600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161115610c01576000915050610da3565b600080600183610c119190612c1c565b90505b8163ffffffff168163ffffffff161115610d3d57600060028383610c389190612c1c565b610c429190612c83565b82610c4d9190612c1c565b90506000600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff1603610d0c57806020015195505050505050610da3565b86816000015163ffffffff161015610d2657819350610d36565b600182610d339190612c1c565b92505b5050610c14565b600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b600a6020528060005260406000206000915090505481565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610df36116c6565b73ffffffffffffffffffffffffffffffffffffffff16610e11610dc1565b73ffffffffffffffffffffffffffffffffffffffff1614610e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5e90612b3b565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634fed921c8585856040518463ffffffff1660e01b8152600401610f0793929190612cb4565b600060405180830381600087803b158015610f2157600080fd5b505af1158015610f35573d6000803e3d6000fd5b5050505050505050565b606060048054610f4e90612abe565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7a90612abe565b8015610fc75780601f10610f9c57610100808354040283529160200191610fc7565b820191906000526020600020905b815481529060010190602001808311610faa57829003601f168201915b5050505050905090565b6000611094610fde6116c6565b8461108f8560405180606001604052806025815260200161357f60259139600160006110086116c6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a019092919063ffffffff16565b6116ce565b6001905092915050565b60006110b26110ab6116c6565b8484611897565b6001905092915050565b600080600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1611611126576000611193565b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001836111749190612c1c565b63ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666111c6610535565b805190602001206111d5611c2e565b306040516020016111e99493929190612ceb565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf88888860405160200161123a9493929190612d30565b60405160208183030381529060405280519060200120905060008282604051602001611267929190612ded565b6040516020818303038152906040528051906020012090506000600182888888604051600081526020016040526040516112a49493929190612e24565b6020604051602081039080840390855afa1580156112c6573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133890612eb5565b60405180910390fd5b600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061139190612ed5565b9190505589146113d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cd90612f69565b60405180910390fd5b87421115611419576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141090612fd5565b60405180910390fd5b611423818b611abd565b50505050505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6008602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b6115236116c6565b73ffffffffffffffffffffffffffffffffffffffff16611541610dc1565b73ffffffffffffffffffffffffffffffffffffffff1614611597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158e90612b3b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fd90613067565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361173d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611734906130f9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a39061318b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161188a9190612704565b60405180910390a3505050565b6118a2838383611c3b565b61196b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611ece565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634fed921c8484846040518463ffffffff1660e01b81526004016119ca93929190612cb4565b600060405180830381600087803b1580156119e457600080fd5b505af11580156119f8573d6000803e3d6000fd5b50505050505050565b6000838311158290611a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4091906125c4565b60405180910390fd5b508284611a5691906131ab565b90509392505050565b6000808284611a6e91906131df565b905083811015611ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaa9061325f565b60405180910390fd5b8091505092915050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000611b2c8461084f565b905082600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4611c28828483611ece565b50505050565b6000804690508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca1906132f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1090613383565b60405180910390fd5b611d2483838361217d565b611d8f81604051806060016040528060268152602001613503602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a019092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e22816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a5f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611ec19190612704565b60405180910390a3505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f0a5750600081115b1561217857600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612043576000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611611fad57600061201a565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184611ffb9190612c1c565b63ffffffff1663ffffffff168152602001908152602001600020600101545b90506000612031848361218290919063ffffffff16565b905061203f868484846121db565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612177576000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff16116120e157600061214e565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018461212f9190612c1c565b63ffffffff1663ffffffff168152602001908152602001600020600101545b905060006121658483611a5f90919063ffffffff16565b9050612173858484846121db565b5050505b5b505050565b505050565b6000828211156121c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121be906133ef565b60405180910390fd5b81836121d391906131ab565b905092915050565b60006121ff436040518060600160405280602e8152602001613551602e91396124de565b905060008463ffffffff1611801561229d57508063ffffffff16600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001876122679190612c1c565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b156123175781600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001876122f19190612c1c565b63ffffffff1663ffffffff16815260200190815260200160002060010181905550612487565b60405180604001604052808263ffffffff16815260200183815250600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff160217905550602082015181600101559050508363ffffffff166001856123d6919061340f565b63ffffffff161161241c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612413906134b9565b60405180910390fd5b600184612429919061340f565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72484846040516124cf9291906134d9565b60405180910390a25050505050565b60006401000000008310829061252a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252191906125c4565b60405180910390fd5b5082905092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561256e578082015181840152602081019050612553565b60008484015250505050565b6000601f19601f8301169050919050565b600061259682612534565b6125a0818561253f565b93506125b0818560208601612550565b6125b98161257a565b840191505092915050565b600060208201905081810360008301526125de818461258b565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612616826125eb565b9050919050565b6126268161260b565b811461263157600080fd5b50565b6000813590506126438161261d565b92915050565b6000819050919050565b61265c81612649565b811461266757600080fd5b50565b60008135905061267981612653565b92915050565b60008060408385031215612696576126956125e6565b5b60006126a485828601612634565b92505060206126b58582860161266a565b9150509250929050565b60008115159050919050565b6126d4816126bf565b82525050565b60006020820190506126ef60008301846126cb565b92915050565b6126fe81612649565b82525050565b600060208201905061271960008301846126f5565b92915050565b6000819050919050565b6127328161271f565b82525050565b600060208201905061274d6000830184612729565b92915050565b60008060006060848603121561276c5761276b6125e6565b5b600061277a86828701612634565b935050602061278b86828701612634565b925050604061279c8682870161266a565b9150509250925092565b600060ff82169050919050565b6127bc816127a6565b82525050565b60006020820190506127d760008301846127b3565b92915050565b6000602082840312156127f3576127f26125e6565b5b600061280184828501612634565b91505092915050565b6128138161260b565b82525050565b600060208201905061282e600083018461280a565b92915050565b600063ffffffff82169050919050565b61284d81612834565b82525050565b60006020820190506128686000830184612844565b92915050565b60008060008060808587031215612888576128876125e6565b5b600061289687828801612634565b94505060206128a787828801612634565b93505060406128b88782880161266a565b92505060606128c987828801612634565b91505092959194509250565b6128de816127a6565b81146128e957600080fd5b50565b6000813590506128fb816128d5565b92915050565b61290a8161271f565b811461291557600080fd5b50565b60008135905061292781612901565b92915050565b60008060008060008060c0878903121561294a576129496125e6565b5b600061295889828a01612634565b965050602061296989828a0161266a565b955050604061297a89828a0161266a565b945050606061298b89828a016128ec565b935050608061299c89828a01612918565b92505060a06129ad89828a01612918565b9150509295509295509295565b600080604083850312156129d1576129d06125e6565b5b60006129df85828601612634565b92505060206129f085828601612634565b9150509250929050565b612a0381612834565b8114612a0e57600080fd5b50565b600081359050612a20816129fa565b92915050565b60008060408385031215612a3d57612a3c6125e6565b5b6000612a4b85828601612634565b9250506020612a5c85828601612a11565b9150509250929050565b6000604082019050612a7b6000830185612844565b612a8860208301846126f5565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ad657607f821691505b602082108103612ae957612ae8612a8f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612b2560208361253f565b9150612b3082612aef565b602082019050919050565b60006020820190508181036000830152612b5481612b18565b9050919050565b7f6765745072696f72566f7465733a206e6f74207965742064657465726d696e6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000612bb760218361253f565b9150612bc282612b5b565b604082019050919050565b60006020820190508181036000830152612be681612baa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612c2782612834565b9150612c3283612834565b9250828203905063ffffffff811115612c4e57612c4d612bed565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612c8e82612834565b9150612c9983612834565b925082612ca957612ca8612c54565b5b828204905092915050565b6000606082019050612cc9600083018661280a565b612cd6602083018561280a565b612ce360408301846126f5565b949350505050565b6000608082019050612d006000830187612729565b612d0d6020830186612729565b612d1a60408301856126f5565b612d27606083018461280a565b95945050505050565b6000608082019050612d456000830187612729565b612d52602083018661280a565b612d5f60408301856126f5565b612d6c60608301846126f5565b95945050505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000612db6600283612d75565b9150612dc182612d80565b600282019050919050565b6000819050919050565b612de7612de28261271f565b612dcc565b82525050565b6000612df882612da9565b9150612e048285612dd6565b602082019150612e148284612dd6565b6020820191508190509392505050565b6000608082019050612e396000830187612729565b612e4660208301866127b3565b612e536040830185612729565b612e606060830184612729565b95945050505050565b7f64656c656761746542795369673a20696e76616c6964207369676e6174757265600082015250565b6000612e9f60208361253f565b9150612eaa82612e69565b602082019050919050565b60006020820190508181036000830152612ece81612e92565b9050919050565b6000612ee082612649565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612f1257612f11612bed565b5b600182019050919050565b7f64656c656761746542795369673a20696e76616c6964206e6f6e636500000000600082015250565b6000612f53601c8361253f565b9150612f5e82612f1d565b602082019050919050565b60006020820190508181036000830152612f8281612f46565b9050919050565b7f64656c656761746542795369673a207369676e61747572652065787069726564600082015250565b6000612fbf60208361253f565b9150612fca82612f89565b602082019050919050565b60006020820190508181036000830152612fee81612fb2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061305160268361253f565b915061305c82612ff5565b604082019050919050565b6000602082019050818103600083015261308081613044565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006130e360248361253f565b91506130ee82613087565b604082019050919050565b60006020820190508181036000830152613112816130d6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061317560228361253f565b915061318082613119565b604082019050919050565b600060208201905081810360008301526131a481613168565b9050919050565b60006131b682612649565b91506131c183612649565b92508282039050818111156131d9576131d8612bed565b5b92915050565b60006131ea82612649565b91506131f583612649565b925082820190508082111561320d5761320c612bed565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613249601b8361253f565b915061325482613213565b602082019050919050565b600060208201905081810360008301526132788161323c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006132db60258361253f565b91506132e68261327f565b604082019050919050565b6000602082019050818103600083015261330a816132ce565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061336d60238361253f565b915061337882613311565b604082019050919050565b6000602082019050818103600083015261339c81613360565b9050919050565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b60006133d9601e8361253f565b91506133e4826133a3565b602082019050919050565b60006020820190508181036000830152613408816133cc565b9050919050565b600061341a82612834565b915061342583612834565b9250828201905063ffffffff81111561344157613440612bed565b5b92915050565b7f5f7772697465436865636b706f696e743a206e657720636865636b706f696e7460008201527f2065786365656473203332206269747300000000000000000000000000000000602082015250565b60006134a360308361253f565b91506134ae82613447565b604082019050919050565b600060208201905081810360008301526134d281613496565b9050919050565b60006040820190506134ee60008301856126f5565b6134fb60208301846126f5565b939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e889a8a2c96d960df77a9d10bc285f985f5fc4042cb4bd7a714e3a80504529d864736f6c63430008130033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000008b6de09dc5f41da0574000000

-----Decoded View---------------
Arg [0] : totalSupply_ (uint256): 690420000000000000000000000000

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000008b6de09dc5f41da0574000000


Deployed Bytecode Sourcemap

159:9358:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2424:91:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4358:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2580:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1684:122:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5009:321:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3326:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5739:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2667:149:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2960:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1562:49;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3482:127:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1743:148:3;;;:::i;:::-;;5754:1247:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2098:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1092:87:3;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3072:191:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2259:95:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6460:269;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3822:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5068:255:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3695:1172;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4060:151:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1900:117:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1423:70;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;2046:244:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2424:91:1;2469:13;2502:5;2495:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2424:91;:::o;4358:169::-;4441:4;4458:39;4467:12;:10;:12::i;:::-;4481:7;4490:6;4458:8;:39::i;:::-;4515:4;4508:11;;4358:169;;;;:::o;2580:108::-;2641:7;2668:12;;2661:19;;2580:108;:::o;1684:122:5:-;1726:80;1684:122;:::o;5009:321:1:-;5115:4;5132:36;5142:6;5150:9;5161:6;5132:9;:36::i;:::-;5179:121;5188:6;5196:12;:10;:12::i;:::-;5210:89;5248:6;5210:89;;;;;;;;;;;;;;;;;:11;:19;5222:6;5210:19;;;;;;;;;;;;;;;:33;5230:12;:10;:12::i;:::-;5210:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;5179:8;:121::i;:::-;5318:4;5311:11;;5009:321;;;;;:::o;3326:91::-;3375:5;3400:9;;;;;;;;;;;3393:16;;3326:91;:::o;5739:218::-;5827:4;5844:83;5853:12;:10;:12::i;:::-;5867:7;5876:50;5915:10;5876:11;:25;5888:12;:10;:12::i;:::-;5876:25;;;;;;;;;;;;;;;:34;5902:7;5876:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;5844:8;:83::i;:::-;5945:4;5938:11;;5739:218;;;;:::o;2667:149:5:-;2755:7;2787:10;:21;2798:9;2787:21;;;;;;;;;;;;;;;;;;;;;;;;;2780:28;;2667:149;;;:::o;2960:104::-;3024:32;3034:10;3046:9;3024;:32::i;:::-;2960:104;:::o;1562:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;3482:127:1:-;3556:7;3583:9;:18;3593:7;3583:18;;;;;;;;;;;;;;;;3576:25;;3482:127;;;:::o;1743:148:3:-;1323:12;:10;:12::i;:::-;1312:23;;:7;:5;:7::i;:::-;:23;;;1304:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1850:1:::1;1813:40;;1834:6;;;;;;;;;;;1813:40;;;;;;;;;;;;1881:1;1864:6;;:19;;;;;;;;;;;;;;;;;;1743:148::o:0;5754:1247:5:-;5862:7;5909:12;5895:11;:26;5887:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;5972:19;5994:14;:23;6009:7;5994:23;;;;;;;;;;;;;;;;;;;;;;;;;5972:45;;6048:1;6032:12;:17;;;6028:58;;6073:1;6066:8;;;;;6028:58;6198:11;6146;:20;6158:7;6146:20;;;;;;;;;;;;;;;:38;6182:1;6167:12;:16;;;;:::i;:::-;6146:38;;;;;;;;;;;;;;;:48;;;;;;;;;;;;:63;;;6142:147;;6233:11;:20;6245:7;6233:20;;;;;;;;;;;;;;;:38;6269:1;6254:12;:16;;;;:::i;:::-;6233:38;;;;;;;;;;;;;;;:44;;;6226:51;;;;;6142:147;6386:11;6350;:20;6362:7;6350:20;;;;;;;;;;;;;;;:23;6371:1;6350:23;;;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;6346:88;;;6421:1;6414:8;;;;;6346:88;6446:12;6473;6503:1;6488:12;:16;;;;:::i;:::-;6473:31;;6515:428;6530:5;6522:13;;:5;:13;;;6515:428;;;6552:13;6594:1;6585:5;6577;:13;;;;:::i;:::-;6576:19;;;;:::i;:::-;6568:5;:27;;;;:::i;:::-;6552:43;;6637:20;6660:11;:20;6672:7;6660:20;;;;;;;;;;;;;;;:28;6681:6;6660:28;;;;;;;;;;;;;;;6637:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6723:11;6707:2;:12;;;:27;;;6703:229;;6762:2;:8;;;6755:15;;;;;;;;;6703:229;6811:11;6796:2;:12;;;:26;;;6792:140;;;6851:6;6843:14;;6792:140;;;6915:1;6906:6;:10;;;;:::i;:::-;6898:18;;6792:140;6537:406;;6515:428;;;6960:11;:20;6972:7;6960:20;;;;;;;;;;;;;;;:27;6981:5;6960:27;;;;;;;;;;;;;;;:33;;;6953:40;;;;;5754:1247;;;;;:::o;2098:39::-;;;;;;;;;;;;;;;;;:::o;1092:87:3:-;1138:7;1165:6;;;;;;;;;;;1158:13;;1092:87;:::o;3072:191:5:-;1323:12:3;:10;:12::i;:::-;1312:23;;:7;:5;:7::i;:::-;:23;;;1304:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3201:4:5::1;3174:12;;:32;;;;;;;;;;;;;;;;;;3217:12;;;;;;;;;;;:16;;;3234:5;3241;3248:6;3217:38;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3072:191:::0;;;;:::o;2259:95:1:-;2306:13;2339:7;2332:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2259:95;:::o;6460:269::-;6553:4;6570:129;6579:12;:10;:12::i;:::-;6593:7;6602:96;6641:15;6602:96;;;;;;;;;;;;;;;;;:11;:25;6614:12;:10;:12::i;:::-;6602:25;;;;;;;;;;;;;;;:34;6628:7;6602:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6570:8;:129::i;:::-;6717:4;6710:11;;6460:269;;;;:::o;3822:175::-;3908:4;3925:42;3935:12;:10;:12::i;:::-;3949:9;3960:6;3925:9;:42::i;:::-;3985:4;3978:11;;3822:175;;;;:::o;5068:255:5:-;5160:7;5185:19;5207:14;:23;5222:7;5207:23;;;;;;;;;;;;;;;;;;;;;;;;;5185:45;;5263:1;5248:12;:16;;;:67;;5314:1;5248:67;;;5267:11;:20;5279:7;5267:20;;;;;;;;;;;;;;;:38;5303:1;5288:12;:16;;;;:::i;:::-;5267:38;;;;;;;;;;;;;;;:44;;;5248:67;5241:74;;;5068:255;;;:::o;3695:1172::-;3888:23;1726:80;4017:6;:4;:6::i;:::-;4001:24;;;;;;4044:12;:10;:12::i;:::-;4083:4;3938:165;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3914:200;;;;;;3888:226;;4127:18;1946:71;4239:9;4267:5;4291:6;4172:140;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4148:175;;;;;;4127:196;;4336:14;4441:15;4475:10;4377:123;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4353:158;;;;;;4336:175;;4524:17;4544:26;4554:6;4562:1;4565;4568;4544:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4524:46;;4610:1;4589:23;;:9;:23;;;4581:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4677:6;:17;4684:9;4677:17;;;;;;;;;;;;;;;;:19;;;;;;;;;:::i;:::-;;;;;4668:5;:28;4660:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;4767:6;4748:15;:25;;4740:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;4828:31;4838:9;4849;4828;:31::i;:::-;4821:38;;;;3695:1172;;;;;;:::o;4060:151:1:-;4149:7;4176:11;:18;4188:5;4176:18;;;;;;;;;;;;;;;:27;4195:7;4176:27;;;;;;;;;;;;;;;;4169:34;;4060:151;;;;:::o;1900:117:5:-;1946:71;1900:117;:::o;1423:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2046:244:3:-;1323:12;:10;:12::i;:::-;1312:23;;:7;:5;:7::i;:::-;:23;;;1304:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2155:1:::1;2135:22;;:8;:22;;::::0;2127:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2245:8;2216:38;;2237:6;;;;;;;;;;;2216:38;;;;;;;;;;;;2274:8;2265:6;;:17;;;;;;;;;;;;;;;;;;2046:244:::0;:::o;605:98:0:-;658:7;685:10;678:17;;605:98;:::o;8858:346:1:-;8977:1;8960:19;;:5;:19;;;8952:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9058:1;9039:21;;:7;:21;;;9031:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9142:6;9112:11;:18;9124:5;9112:18;;;;;;;;;;;;;;;:27;9131:7;9112:27;;;;;;;;;;;;;;;:36;;;;9180:7;9164:32;;9173:5;9164:32;;;9189:6;9164:32;;;;;;:::i;:::-;;;;;;;;8858:346;;;:::o;390:279:5:-;489:42;505:6;513:9;524:6;489:15;:42::i;:::-;542:65;557:10;:18;568:6;557:18;;;;;;;;;;;;;;;;;;;;;;;;;577:10;:21;588:9;577:21;;;;;;;;;;;;;;;;;;;;;;;;;600:6;542:14;:65::i;:::-;618:12;;;;;;;;;;;:16;;;635:6;643:9;654:6;618:43;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;390:279;;;:::o;5593:166:4:-;5679:7;5712:1;5707;:6;;5715:12;5699:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5750:1;5746;:5;;;;:::i;:::-;5739:12;;5593:166;;;;;:::o;2766:179::-;2824:7;2844:9;2860:1;2856;:5;;;;:::i;:::-;2844:17;;2885:1;2880;:6;;2872:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;2936:1;2929:8;;;2766:179;;;;:::o;7964:394:5:-;8055:23;8081:10;:21;8092:9;8081:21;;;;;;;;;;;;;;;;;;;;;;;;;8055:47;;8113:24;8140:20;8150:9;8140;:20::i;:::-;8113:47;;8196:9;8172:10;:21;8183:9;8172:21;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;8267:9;8223:54;;8250:15;8223:54;;8239:9;8223:54;;;;;;;;;;;;8290:60;8305:15;8322:9;8333:16;8290:14;:60::i;:::-;8044:314;;7964:394;;:::o;9186:153::-;9231:4;9248:15;9296:9;9285:20;;9324:7;9317:14;;;9186:153;:::o;7219:539:1:-;7343:1;7325:20;;:6;:20;;;7317:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7427:1;7406:23;;:9;:23;;;7398:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7482:47;7503:6;7511:9;7522:6;7482:20;:47::i;:::-;7562:71;7584:6;7562:71;;;;;;;;;;;;;;;;;:9;:17;7572:6;7562:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7542:9;:17;7552:6;7542:17;;;;;;;;;;;;;;;:91;;;;7667:32;7692:6;7667:9;:20;7677:9;7667:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7644:9;:20;7654:9;7644:20;;;;;;;;;;;;;;;:55;;;;7732:9;7715:35;;7724:6;7715:35;;;7743:6;7715:35;;;;;;:::i;:::-;;;;;;;;7219:539;;;:::o;7009:947:5:-;7115:6;7105:16;;:6;:16;;;;:30;;;;;7134:1;7125:6;:10;7105:30;7101:848;;;7174:1;7156:20;;:6;:20;;;7152:385;;7245:16;7264:14;:22;7279:6;7264:22;;;;;;;;;;;;;;;;;;;;;;;;;7245:41;;7305:17;7337:1;7325:9;:13;;;:60;;7384:1;7325:60;;;7341:11;:19;7353:6;7341:19;;;;;;;;;;;;;;;:34;7373:1;7361:9;:13;;;;:::i;:::-;7341:34;;;;;;;;;;;;;;;:40;;;7325:60;7305:80;;7404:17;7424:21;7438:6;7424:9;:13;;:21;;;;:::i;:::-;7404:41;;7464:57;7481:6;7489:9;7500;7511;7464:16;:57::i;:::-;7178:359;;;7152:385;7575:1;7557:20;;:6;:20;;;7553:385;;7646:16;7665:14;:22;7680:6;7665:22;;;;;;;;;;;;;;;;;;;;;;;;;7646:41;;7706:17;7738:1;7726:9;:13;;;:60;;7785:1;7726:60;;;7742:11;:19;7754:6;7742:19;;;;;;;;;;;;;;;:34;7774:1;7762:9;:13;;;;:::i;:::-;7742:34;;;;;;;;;;;;;;;:40;;;7726:60;7706:80;;7805:17;7825:21;7839:6;7825:9;:13;;:21;;;;:::i;:::-;7805:41;;7865:57;7882:6;7890:9;7901;7912;7865:16;:57::i;:::-;7579:359;;;7553:385;7101:848;7009:947;;;:::o;10237:92:1:-;;;;:::o;3228:158:4:-;3286:7;3319:1;3314;:6;;3306:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;3377:1;3373;:5;;;;:::i;:::-;3366:12;;3228:158;;;;:::o;8373:805:5:-;8552:18;8573:70;8580:12;8573:70;;;;;;;;;;;;;;;;;:6;:70::i;:::-;8552:91;;8675:1;8660:12;:16;;;:85;;;;;8734:11;8680:65;;:11;:22;8692:9;8680:22;;;;;;;;;;;;;;;:40;8718:1;8703:12;:16;;;;:::i;:::-;8680:40;;;;;;;;;;;;;;;:50;;;;;;;;;;;;:65;;;8660:85;8656:446;;;8811:8;8762:11;:22;8774:9;8762:22;;;;;;;;;;;;;;;:40;8800:1;8785:12;:16;;;;:::i;:::-;8762:40;;;;;;;;;;;;;;;:46;;:57;;;;8656:446;;;8891:33;;;;;;;;8902:11;8891:33;;;;;;8915:8;8891:33;;;8852:11;:22;8864:9;8852:22;;;;;;;;;;;;;;;:36;8875:12;8852:36;;;;;;;;;;;;;;;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8966:12;8947:31;;8962:1;8947:12;:16;;;;:::i;:::-;:31;;;8939:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;9089:1;9074:12;:16;;;;:::i;:::-;9046:14;:25;9061:9;9046:25;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;8656:446;9140:9;9119:51;;;9151:8;9161;9119:51;;;;;;;:::i;:::-;;;;;;;;8541:637;8373:805;;;;:::o;9347:161::-;9422:6;9453:5;9449:1;:9;9460:12;9441:32;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9498:1;9484:16;;9347:161;;;;:::o;7:99:7:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:77::-;3835:7;3864:5;3853:16;;3798:77;;;:::o;3881:118::-;3968:24;3986:5;3968:24;:::i;:::-;3963:3;3956:37;3881:118;;:::o;4005:222::-;4098:4;4136:2;4125:9;4121:18;4113:26;;4149:71;4217:1;4206:9;4202:17;4193:6;4149:71;:::i;:::-;4005:222;;;;:::o;4233:619::-;4310:6;4318;4326;4375:2;4363:9;4354:7;4350:23;4346:32;4343:119;;;4381:79;;:::i;:::-;4343:119;4501:1;4526:53;4571:7;4562:6;4551:9;4547:22;4526:53;:::i;:::-;4516:63;;4472:117;4628:2;4654:53;4699:7;4690:6;4679:9;4675:22;4654:53;:::i;:::-;4644:63;;4599:118;4756:2;4782:53;4827:7;4818:6;4807:9;4803:22;4782:53;:::i;:::-;4772:63;;4727:118;4233:619;;;;;:::o;4858:86::-;4893:7;4933:4;4926:5;4922:16;4911:27;;4858:86;;;:::o;4950:112::-;5033:22;5049:5;5033:22;:::i;:::-;5028:3;5021:35;4950:112;;:::o;5068:214::-;5157:4;5195:2;5184:9;5180:18;5172:26;;5208:67;5272:1;5261:9;5257:17;5248:6;5208:67;:::i;:::-;5068:214;;;;:::o;5288:329::-;5347:6;5396:2;5384:9;5375:7;5371:23;5367:32;5364:119;;;5402:79;;:::i;:::-;5364:119;5522:1;5547:53;5592:7;5583:6;5572:9;5568:22;5547:53;:::i;:::-;5537:63;;5493:117;5288:329;;;;:::o;5623:118::-;5710:24;5728:5;5710:24;:::i;:::-;5705:3;5698:37;5623:118;;:::o;5747:222::-;5840:4;5878:2;5867:9;5863:18;5855:26;;5891:71;5959:1;5948:9;5944:17;5935:6;5891:71;:::i;:::-;5747:222;;;;:::o;5975:93::-;6011:7;6051:10;6044:5;6040:22;6029:33;;5975:93;;;:::o;6074:115::-;6159:23;6176:5;6159:23;:::i;:::-;6154:3;6147:36;6074:115;;:::o;6195:218::-;6286:4;6324:2;6313:9;6309:18;6301:26;;6337:69;6403:1;6392:9;6388:17;6379:6;6337:69;:::i;:::-;6195:218;;;;:::o;6419:765::-;6505:6;6513;6521;6529;6578:3;6566:9;6557:7;6553:23;6549:33;6546:120;;;6585:79;;:::i;:::-;6546:120;6705:1;6730:53;6775:7;6766:6;6755:9;6751:22;6730:53;:::i;:::-;6720:63;;6676:117;6832:2;6858:53;6903:7;6894:6;6883:9;6879:22;6858:53;:::i;:::-;6848:63;;6803:118;6960:2;6986:53;7031:7;7022:6;7011:9;7007:22;6986:53;:::i;:::-;6976:63;;6931:118;7088:2;7114:53;7159:7;7150:6;7139:9;7135:22;7114:53;:::i;:::-;7104:63;;7059:118;6419:765;;;;;;;:::o;7190:118::-;7261:22;7277:5;7261:22;:::i;:::-;7254:5;7251:33;7241:61;;7298:1;7295;7288:12;7241:61;7190:118;:::o;7314:135::-;7358:5;7396:6;7383:20;7374:29;;7412:31;7437:5;7412:31;:::i;:::-;7314:135;;;;:::o;7455:122::-;7528:24;7546:5;7528:24;:::i;:::-;7521:5;7518:35;7508:63;;7567:1;7564;7557:12;7508:63;7455:122;:::o;7583:139::-;7629:5;7667:6;7654:20;7645:29;;7683:33;7710:5;7683:33;:::i;:::-;7583:139;;;;:::o;7728:1053::-;7830:6;7838;7846;7854;7862;7870;7919:3;7907:9;7898:7;7894:23;7890:33;7887:120;;;7926:79;;:::i;:::-;7887:120;8046:1;8071:53;8116:7;8107:6;8096:9;8092:22;8071:53;:::i;:::-;8061:63;;8017:117;8173:2;8199:53;8244:7;8235:6;8224:9;8220:22;8199:53;:::i;:::-;8189:63;;8144:118;8301:2;8327:53;8372:7;8363:6;8352:9;8348:22;8327:53;:::i;:::-;8317:63;;8272:118;8429:2;8455:51;8498:7;8489:6;8478:9;8474:22;8455:51;:::i;:::-;8445:61;;8400:116;8555:3;8582:53;8627:7;8618:6;8607:9;8603:22;8582:53;:::i;:::-;8572:63;;8526:119;8684:3;8711:53;8756:7;8747:6;8736:9;8732:22;8711:53;:::i;:::-;8701:63;;8655:119;7728:1053;;;;;;;;:::o;8787:474::-;8855:6;8863;8912:2;8900:9;8891:7;8887:23;8883:32;8880:119;;;8918:79;;:::i;:::-;8880:119;9038:1;9063:53;9108:7;9099:6;9088:9;9084:22;9063:53;:::i;:::-;9053:63;;9009:117;9165:2;9191:53;9236:7;9227:6;9216:9;9212:22;9191:53;:::i;:::-;9181:63;;9136:118;8787:474;;;;;:::o;9267:120::-;9339:23;9356:5;9339:23;:::i;:::-;9332:5;9329:34;9319:62;;9377:1;9374;9367:12;9319:62;9267:120;:::o;9393:137::-;9438:5;9476:6;9463:20;9454:29;;9492:32;9518:5;9492:32;:::i;:::-;9393:137;;;;:::o;9536:472::-;9603:6;9611;9660:2;9648:9;9639:7;9635:23;9631:32;9628:119;;;9666:79;;:::i;:::-;9628:119;9786:1;9811:53;9856:7;9847:6;9836:9;9832:22;9811:53;:::i;:::-;9801:63;;9757:117;9913:2;9939:52;9983:7;9974:6;9963:9;9959:22;9939:52;:::i;:::-;9929:62;;9884:117;9536:472;;;;;:::o;10014:328::-;10133:4;10171:2;10160:9;10156:18;10148:26;;10184:69;10250:1;10239:9;10235:17;10226:6;10184:69;:::i;:::-;10263:72;10331:2;10320:9;10316:18;10307:6;10263:72;:::i;:::-;10014:328;;;;;:::o;10348:180::-;10396:77;10393:1;10386:88;10493:4;10490:1;10483:15;10517:4;10514:1;10507:15;10534:320;10578:6;10615:1;10609:4;10605:12;10595:22;;10662:1;10656:4;10652:12;10683:18;10673:81;;10739:4;10731:6;10727:17;10717:27;;10673:81;10801:2;10793:6;10790:14;10770:18;10767:38;10764:84;;10820:18;;:::i;:::-;10764:84;10585:269;10534:320;;;:::o;10860:182::-;11000:34;10996:1;10988:6;10984:14;10977:58;10860:182;:::o;11048:366::-;11190:3;11211:67;11275:2;11270:3;11211:67;:::i;:::-;11204:74;;11287:93;11376:3;11287:93;:::i;:::-;11405:2;11400:3;11396:12;11389:19;;11048:366;;;:::o;11420:419::-;11586:4;11624:2;11613:9;11609:18;11601:26;;11673:9;11667:4;11663:20;11659:1;11648:9;11644:17;11637:47;11701:131;11827:4;11701:131;:::i;:::-;11693:139;;11420:419;;;:::o;11845:220::-;11985:34;11981:1;11973:6;11969:14;11962:58;12054:3;12049:2;12041:6;12037:15;12030:28;11845:220;:::o;12071:366::-;12213:3;12234:67;12298:2;12293:3;12234:67;:::i;:::-;12227:74;;12310:93;12399:3;12310:93;:::i;:::-;12428:2;12423:3;12419:12;12412:19;;12071:366;;;:::o;12443:419::-;12609:4;12647:2;12636:9;12632:18;12624:26;;12696:9;12690:4;12686:20;12682:1;12671:9;12667:17;12660:47;12724:131;12850:4;12724:131;:::i;:::-;12716:139;;12443:419;;;:::o;12868:180::-;12916:77;12913:1;12906:88;13013:4;13010:1;13003:15;13037:4;13034:1;13027:15;13054:200;13093:4;13113:19;13130:1;13113:19;:::i;:::-;13108:24;;13146:19;13163:1;13146:19;:::i;:::-;13141:24;;13189:1;13186;13182:9;13174:17;;13213:10;13207:4;13204:20;13201:46;;;13227:18;;:::i;:::-;13201:46;13054:200;;;;:::o;13260:180::-;13308:77;13305:1;13298:88;13405:4;13402:1;13395:15;13429:4;13426:1;13419:15;13446:182;13485:1;13502:19;13519:1;13502:19;:::i;:::-;13497:24;;13535:19;13552:1;13535:19;:::i;:::-;13530:24;;13573:1;13563:35;;13578:18;;:::i;:::-;13563:35;13620:1;13617;13613:9;13608:14;;13446:182;;;;:::o;13634:442::-;13783:4;13821:2;13810:9;13806:18;13798:26;;13834:71;13902:1;13891:9;13887:17;13878:6;13834:71;:::i;:::-;13915:72;13983:2;13972:9;13968:18;13959:6;13915:72;:::i;:::-;13997;14065:2;14054:9;14050:18;14041:6;13997:72;:::i;:::-;13634:442;;;;;;:::o;14082:553::-;14259:4;14297:3;14286:9;14282:19;14274:27;;14311:71;14379:1;14368:9;14364:17;14355:6;14311:71;:::i;:::-;14392:72;14460:2;14449:9;14445:18;14436:6;14392:72;:::i;:::-;14474;14542:2;14531:9;14527:18;14518:6;14474:72;:::i;:::-;14556;14624:2;14613:9;14609:18;14600:6;14556:72;:::i;:::-;14082:553;;;;;;;:::o;14641:::-;14818:4;14856:3;14845:9;14841:19;14833:27;;14870:71;14938:1;14927:9;14923:17;14914:6;14870:71;:::i;:::-;14951:72;15019:2;15008:9;15004:18;14995:6;14951:72;:::i;:::-;15033;15101:2;15090:9;15086:18;15077:6;15033:72;:::i;:::-;15115;15183:2;15172:9;15168:18;15159:6;15115:72;:::i;:::-;14641:553;;;;;;;:::o;15200:148::-;15302:11;15339:3;15324:18;;15200:148;;;;:::o;15354:214::-;15494:66;15490:1;15482:6;15478:14;15471:90;15354:214;:::o;15574:400::-;15734:3;15755:84;15837:1;15832:3;15755:84;:::i;:::-;15748:91;;15848:93;15937:3;15848:93;:::i;:::-;15966:1;15961:3;15957:11;15950:18;;15574:400;;;:::o;15980:79::-;16019:7;16048:5;16037:16;;15980:79;;;:::o;16065:157::-;16170:45;16190:24;16208:5;16190:24;:::i;:::-;16170:45;:::i;:::-;16165:3;16158:58;16065:157;;:::o;16228:663::-;16469:3;16491:148;16635:3;16491:148;:::i;:::-;16484:155;;16649:75;16720:3;16711:6;16649:75;:::i;:::-;16749:2;16744:3;16740:12;16733:19;;16762:75;16833:3;16824:6;16762:75;:::i;:::-;16862:2;16857:3;16853:12;16846:19;;16882:3;16875:10;;16228:663;;;;;:::o;16897:545::-;17070:4;17108:3;17097:9;17093:19;17085:27;;17122:71;17190:1;17179:9;17175:17;17166:6;17122:71;:::i;:::-;17203:68;17267:2;17256:9;17252:18;17243:6;17203:68;:::i;:::-;17281:72;17349:2;17338:9;17334:18;17325:6;17281:72;:::i;:::-;17363;17431:2;17420:9;17416:18;17407:6;17363:72;:::i;:::-;16897:545;;;;;;;:::o;17448:182::-;17588:34;17584:1;17576:6;17572:14;17565:58;17448:182;:::o;17636:366::-;17778:3;17799:67;17863:2;17858:3;17799:67;:::i;:::-;17792:74;;17875:93;17964:3;17875:93;:::i;:::-;17993:2;17988:3;17984:12;17977:19;;17636:366;;;:::o;18008:419::-;18174:4;18212:2;18201:9;18197:18;18189:26;;18261:9;18255:4;18251:20;18247:1;18236:9;18232:17;18225:47;18289:131;18415:4;18289:131;:::i;:::-;18281:139;;18008:419;;;:::o;18433:233::-;18472:3;18495:24;18513:5;18495:24;:::i;:::-;18486:33;;18541:66;18534:5;18531:77;18528:103;;18611:18;;:::i;:::-;18528:103;18658:1;18651:5;18647:13;18640:20;;18433:233;;;:::o;18672:178::-;18812:30;18808:1;18800:6;18796:14;18789:54;18672:178;:::o;18856:366::-;18998:3;19019:67;19083:2;19078:3;19019:67;:::i;:::-;19012:74;;19095:93;19184:3;19095:93;:::i;:::-;19213:2;19208:3;19204:12;19197:19;;18856:366;;;:::o;19228:419::-;19394:4;19432:2;19421:9;19417:18;19409:26;;19481:9;19475:4;19471:20;19467:1;19456:9;19452:17;19445:47;19509:131;19635:4;19509:131;:::i;:::-;19501:139;;19228:419;;;:::o;19653:182::-;19793:34;19789:1;19781:6;19777:14;19770:58;19653:182;:::o;19841:366::-;19983:3;20004:67;20068:2;20063:3;20004:67;:::i;:::-;19997:74;;20080:93;20169:3;20080:93;:::i;:::-;20198:2;20193:3;20189:12;20182:19;;19841:366;;;:::o;20213:419::-;20379:4;20417:2;20406:9;20402:18;20394:26;;20466:9;20460:4;20456:20;20452:1;20441:9;20437:17;20430:47;20494:131;20620:4;20494:131;:::i;:::-;20486:139;;20213:419;;;:::o;20638:225::-;20778:34;20774:1;20766:6;20762:14;20755:58;20847:8;20842:2;20834:6;20830:15;20823:33;20638:225;:::o;20869:366::-;21011:3;21032:67;21096:2;21091:3;21032:67;:::i;:::-;21025:74;;21108:93;21197:3;21108:93;:::i;:::-;21226:2;21221:3;21217:12;21210:19;;20869:366;;;:::o;21241:419::-;21407:4;21445:2;21434:9;21430:18;21422:26;;21494:9;21488:4;21484:20;21480:1;21469:9;21465:17;21458:47;21522:131;21648:4;21522:131;:::i;:::-;21514:139;;21241:419;;;:::o;21666:223::-;21806:34;21802:1;21794:6;21790:14;21783:58;21875:6;21870:2;21862:6;21858:15;21851:31;21666:223;:::o;21895:366::-;22037:3;22058:67;22122:2;22117:3;22058:67;:::i;:::-;22051:74;;22134:93;22223:3;22134:93;:::i;:::-;22252:2;22247:3;22243:12;22236:19;;21895:366;;;:::o;22267:419::-;22433:4;22471:2;22460:9;22456:18;22448:26;;22520:9;22514:4;22510:20;22506:1;22495:9;22491:17;22484:47;22548:131;22674:4;22548:131;:::i;:::-;22540:139;;22267:419;;;:::o;22692:221::-;22832:34;22828:1;22820:6;22816:14;22809:58;22901:4;22896:2;22888:6;22884:15;22877:29;22692:221;:::o;22919:366::-;23061:3;23082:67;23146:2;23141:3;23082:67;:::i;:::-;23075:74;;23158:93;23247:3;23158:93;:::i;:::-;23276:2;23271:3;23267:12;23260:19;;22919:366;;;:::o;23291:419::-;23457:4;23495:2;23484:9;23480:18;23472:26;;23544:9;23538:4;23534:20;23530:1;23519:9;23515:17;23508:47;23572:131;23698:4;23572:131;:::i;:::-;23564:139;;23291:419;;;:::o;23716:194::-;23756:4;23776:20;23794:1;23776:20;:::i;:::-;23771:25;;23810:20;23828:1;23810:20;:::i;:::-;23805:25;;23854:1;23851;23847:9;23839:17;;23878:1;23872:4;23869:11;23866:37;;;23883:18;;:::i;:::-;23866:37;23716:194;;;;:::o;23916:191::-;23956:3;23975:20;23993:1;23975:20;:::i;:::-;23970:25;;24009:20;24027:1;24009:20;:::i;:::-;24004:25;;24052:1;24049;24045:9;24038:16;;24073:3;24070:1;24067:10;24064:36;;;24080:18;;:::i;:::-;24064:36;23916:191;;;;:::o;24113:177::-;24253:29;24249:1;24241:6;24237:14;24230:53;24113:177;:::o;24296:366::-;24438:3;24459:67;24523:2;24518:3;24459:67;:::i;:::-;24452:74;;24535:93;24624:3;24535:93;:::i;:::-;24653:2;24648:3;24644:12;24637:19;;24296:366;;;:::o;24668:419::-;24834:4;24872:2;24861:9;24857:18;24849:26;;24921:9;24915:4;24911:20;24907:1;24896:9;24892:17;24885:47;24949:131;25075:4;24949:131;:::i;:::-;24941:139;;24668:419;;;:::o;25093:224::-;25233:34;25229:1;25221:6;25217:14;25210:58;25302:7;25297:2;25289:6;25285:15;25278:32;25093:224;:::o;25323:366::-;25465:3;25486:67;25550:2;25545:3;25486:67;:::i;:::-;25479:74;;25562:93;25651:3;25562:93;:::i;:::-;25680:2;25675:3;25671:12;25664:19;;25323:366;;;:::o;25695:419::-;25861:4;25899:2;25888:9;25884:18;25876:26;;25948:9;25942:4;25938:20;25934:1;25923:9;25919:17;25912:47;25976:131;26102:4;25976:131;:::i;:::-;25968:139;;25695:419;;;:::o;26120:222::-;26260:34;26256:1;26248:6;26244:14;26237:58;26329:5;26324:2;26316:6;26312:15;26305:30;26120:222;:::o;26348:366::-;26490:3;26511:67;26575:2;26570:3;26511:67;:::i;:::-;26504:74;;26587:93;26676:3;26587:93;:::i;:::-;26705:2;26700:3;26696:12;26689:19;;26348:366;;;:::o;26720:419::-;26886:4;26924:2;26913:9;26909:18;26901:26;;26973:9;26967:4;26963:20;26959:1;26948:9;26944:17;26937:47;27001:131;27127:4;27001:131;:::i;:::-;26993:139;;26720:419;;;:::o;27145:180::-;27285:32;27281:1;27273:6;27269:14;27262:56;27145:180;:::o;27331:366::-;27473:3;27494:67;27558:2;27553:3;27494:67;:::i;:::-;27487:74;;27570:93;27659:3;27570:93;:::i;:::-;27688:2;27683:3;27679:12;27672:19;;27331:366;;;:::o;27703:419::-;27869:4;27907:2;27896:9;27892:18;27884:26;;27956:9;27950:4;27946:20;27942:1;27931:9;27927:17;27920:47;27984:131;28110:4;27984:131;:::i;:::-;27976:139;;27703:419;;;:::o;28128:197::-;28167:3;28186:19;28203:1;28186:19;:::i;:::-;28181:24;;28219:19;28236:1;28219:19;:::i;:::-;28214:24;;28261:1;28258;28254:9;28247:16;;28284:10;28279:3;28276:19;28273:45;;;28298:18;;:::i;:::-;28273:45;28128:197;;;;:::o;28331:235::-;28471:34;28467:1;28459:6;28455:14;28448:58;28540:18;28535:2;28527:6;28523:15;28516:43;28331:235;:::o;28572:366::-;28714:3;28735:67;28799:2;28794:3;28735:67;:::i;:::-;28728:74;;28811:93;28900:3;28811:93;:::i;:::-;28929:2;28924:3;28920:12;28913:19;;28572:366;;;:::o;28944:419::-;29110:4;29148:2;29137:9;29133:18;29125:26;;29197:9;29191:4;29187:20;29183:1;29172:9;29168:17;29161:47;29225:131;29351:4;29225:131;:::i;:::-;29217:139;;28944:419;;;:::o;29369:332::-;29490:4;29528:2;29517:9;29513:18;29505:26;;29541:71;29609:1;29598:9;29594:17;29585:6;29541:71;:::i;:::-;29622:72;29690:2;29679:9;29675:18;29666:6;29622:72;:::i;:::-;29369:332;;;;;:::o

Swarm Source

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