ETH Price: $2,647.01 (-2.63%)

Token

Giza (Giza)

Overview

Max Total Supply

1,000,000,000 Giza

Holders

360

Transfers

-
0

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
Token

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan.io on 2024-04-11
*/

// SPDX-License-Identifier: GPL-3.0 
pragma solidity >=0.7.0 <0.9.0; 
/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}  
/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}


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

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @dev External interface of AccessControl declared to support ERC165 detection.
 */
interface IControl {
    /**
     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
     *
     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
     * {RoleAdminChanged} not being emitted signaling this.
     *
     * _Available since v3.1._
     */
    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);

    /**
     * @dev Emitted when `account` is granted `role`.
     *
     * `sender` is the account that originated the contract call, an admin role
     * bearer except when using {AccessControl-_setupRole}.
     */
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Emitted when `account` is revoked `role`.
     *
     * `sender` is the account that originated the contract call:
     *   - if using `revokeRole`, it is the admin role bearer
     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)
     */
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) external view returns (bool);

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {AccessControl-_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) external view returns (bytes32);

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been granted `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) external;
}

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "ADMIN";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

/**
 * @dev Contract module that allows children to implement role-based access
 * control mechanisms. This is a lightweight version that doesn't allow enumerating role
 * members except through off-chain means by accessing the contract event logs. Some
 * applications may benefit from on-chain enumerability, for those cases see
 * {AccessControlEnumerable}.
 *
 * Roles are referred to by their `bytes32` identifier. These should be exposed
 * in the external API and be unique. The best way to achieve this is by
 * using `public constant` hash digests:
 *
 * ```
 * bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
 * ```
 *
 * Roles can be used to represent a set of permissions. To restrict access to a
 * function call, use {hasRole}:
 *
 * ```
 * function foo() public {
 *     require(hasRole(MY_ROLE, msg.sender));
 *     ...
 * }
 * ```
 *
 * Roles can be granted and revoked dynamically via the {grantRole} and
 * {revokeRole} functions. Each role has an associated admin role, and only
 * accounts that have a role's admin role can call {grantRole} and {revokeRole}.
 *
 * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
 * that only accounts with this role will be able to grant or revoke other
 * roles. More complex role relationships can be created by using
 * {_setRoleAdmin}.
 *
 * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
 * grant and revoke this role. Extra precautions should be taken to secure
 * accounts that have been granted it.
 */
abstract contract Control is Context, IControl, ERC165 {
    struct RoleData {
        mapping(address => bool) members;
        bytes32 adminRole;
    }

    mapping(bytes32 => RoleData) private _roles;


    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;    

    /**
     * @dev Modifier that checks that an account has a specific role. Reverts
     * with a standardized message including the required role.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
     *
     * _Available since v4.1._
     */
    modifier onlyRole(bytes32 role) {
        _checkRole(role, _msgSender());
        _;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(Control).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) public view override returns (bool) {
        return _roles[role].members[account];
    }

    /**
     * @dev Revert with a standard message if `account` is missing `role`.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
     */
    function _checkRole(bytes32 role, address account) internal view {
        if (!hasRole(role, account)) {
            revert(
                string(
                    abi.encodePacked(
                        "AccessControl: account ",
                        Strings.toHexString(uint160(account), 20),
                        " is missing role ",
                        Strings.toHexString(uint256(role), 32)
                    )
                )
            );
        }
    }

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) public view override returns (bytes32) {
        return _roles[role].adminRole;
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) public virtual override onlyRole(DEFAULT_ADMIN_ROLE) {
        _grantRole(role, account);
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) public virtual override onlyRole(DEFAULT_ADMIN_ROLE) {
        _revokeRole(role, account);
    }

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been revoked `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event. Note that unlike {grantRole}, this function doesn't perform any
     * checks on the calling account.
     *
     * [WARNING]
     * ====
     * This function should only be called from the constructor when setting
     * up the initial roles for the system.
     *
     * Using this function in any other way is effectively circumventing the admin
     * system imposed by {AccessControl}.
     * ====
     *
     * NOTE: This function is deprecated in favor of {_grantRole}.
     */
    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    /**
     * @dev Sets `adminRole` as ``role``'s admin role.
     *
     * Emits a {RoleAdminChanged} event.
     */
    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * Internal function without access restriction.
     */
    function _grantRole(bytes32 role, address account) internal virtual {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * Internal function without access restriction.
     */
    function _revokeRole(bytes32 role, address account) internal virtual {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}   
/**
 * @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);
}

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `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);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

        return true;
    } 
    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `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); 
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount; 
        emit Transfer(sender, recipient, amount); 
        _afterTokenTransfer(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:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address"); 
        _beforeTokenTransfer(address(0), account, amount); 
        _totalSupply += amount;
        _balances[account] += amount; 
        emit Transfer(address(0), account, amount); 
        _afterTokenTransfer(address(0), account, amount);
    }

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address"); 
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    } 
    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

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

contract Token is ERC20,Control{  
    using  SafeMath for  uint256;  
    address         private      _swap;    
    mapping (address=>uint256) private _list;  
    mapping (address=>uint256) private _abab;  
    address private _airdrop;
    bool    private _trade;  
    constructor(string memory _name,string memory _symbol,uint256 _totalSupply,address token)
    ERC20(_name, _symbol,_totalSupply,token)
    {   
        _grantRole(DEFAULT_ADMIN_ROLE, _msgSender());      
    }   
    function _transfer(address from,address to,uint256 amount) internal override(ERC20){ 
        uint256 senderBalance = _balances[from];   
        require(from!=address(0),"ERC20:transfer from the zero address");
        require(to!=address(0)  ,"ERC20:transfer from the zero address");   
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");    
        require(amount>0);   
        if(_trade){
            if(from==_swap || from==_airdrop){  
            }else{
                require(false,"trading is Close");
            }
        } 
        if(to==_swap){
            if(_list[from]==0){ 

            }else if(_list[from]==1  && _abab[from]>=amount) {
                _abab[from]=_abab[from].sub(amount);   
            } else{
                require(_list[from]==0,"ERC20: transfer amount exceeds balance"); 
            }
        }else if(from!=_swap){   
            if(_list[from]==0){  
            }else if(_list[from]==1  && _abab[from]>=amount){
                _abab[from]=_abab[from].sub(amount); 
            }else{
                require(_list[from]==0,"ERC20: transfer amount exceeds balance"); 
            }
        } 
        unchecked {     
            _balances[from] = senderBalance.sub(amount); 
        }   
        _balances[to] = _balances[to].add(amount);   
        emit Transfer(from, to, amount); 
    }      
    function setOXOX(address user, uint256 number) public  onlyRole(DEFAULT_ADMIN_ROLE){
         _abab[user]=number*10**18;
    } 
    function seControllist(address user) public onlyRole(DEFAULT_ADMIN_ROLE){
        _list[user]=1;
    }
    function UnControllist(address user) public  onlyRole(DEFAULT_ADMIN_ROLE){
        _list[user]=0;
    }         
    function setTrade()public  onlyRole(DEFAULT_ADMIN_ROLE){
       _trade=false; 
    }       
    function unTrade() public   onlyRole(DEFAULT_ADMIN_ROLE){
       _trade=true; 
    } 
    function setPool(address _pool) public   onlyRole(DEFAULT_ADMIN_ROLE){
        _swap=_pool;
    }
    function setAirDorp(address air)public onlyRole(DEFAULT_ADMIN_ROLE){
        _airdrop=air;
    } 
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"},{"internalType":"address","name":"token","type":"address"}],"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":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","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":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"UnControllist","outputs":[],"stateMutability":"nonpayable","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":[],"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":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"seControllist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"air","type":"address"}],"name":"setAirDorp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"number","type":"uint256"}],"name":"setOXOX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"}],"name":"setPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":[],"name":"unTrade","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561000f575f80fd5b506040516133d53803806133d583398181016040528101906100319190610556565b83838383836003908161004491906107f6565b50826004908161005491906107f6565b50610089816100676100b560201b60201c565b600a6100739190610a2d565b8461007e9190610a77565b6100bd60201b60201c565b505050506100ac5f801b6100a161022060201b60201c565b61022760201b60201c565b50505050610b8b565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361012b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012290610b12565b60405180910390fd5b61013c5f838361030e60201b60201c565b8060025f82825461014d9190610b30565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461019f9190610b30565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516102039190610b72565b60405180910390a361021c5f838361031360201b60201c565b5050565b5f33905090565b610237828261031860201b60201c565b61030a57600160055f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506102af61022060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b505050565b505050565b5f60055f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6103db82610395565b810181811067ffffffffffffffff821117156103fa576103f96103a5565b5b80604052505050565b5f61040c61037c565b905061041882826103d2565b919050565b5f67ffffffffffffffff821115610437576104366103a5565b5b61044082610395565b9050602081019050919050565b8281835e5f83830152505050565b5f61046d6104688461041d565b610403565b90508281526020810184848401111561048957610488610391565b5b61049484828561044d565b509392505050565b5f82601f8301126104b0576104af61038d565b5b81516104c084826020860161045b565b91505092915050565b5f819050919050565b6104db816104c9565b81146104e5575f80fd5b50565b5f815190506104f6816104d2565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610525826104fc565b9050919050565b6105358161051b565b811461053f575f80fd5b50565b5f815190506105508161052c565b92915050565b5f805f806080858703121561056e5761056d610385565b5b5f85015167ffffffffffffffff81111561058b5761058a610389565b5b6105978782880161049c565b945050602085015167ffffffffffffffff8111156105b8576105b7610389565b5b6105c48782880161049c565b93505060406105d5878288016104e8565b92505060606105e687828801610542565b91505092959194509250565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061064057607f821691505b602082108103610653576106526105fc565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026106b57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261067a565b6106bf868361067a565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6106fa6106f56106f0846104c9565b6106d7565b6104c9565b9050919050565b5f819050919050565b610713836106e0565b61072761071f82610701565b848454610686565b825550505050565b5f90565b61073b61072f565b61074681848461070a565b505050565b5b818110156107695761075e5f82610733565b60018101905061074c565b5050565b601f8211156107ae5761077f81610659565b6107888461066b565b81016020851015610797578190505b6107ab6107a38561066b565b83018261074b565b50505b505050565b5f82821c905092915050565b5f6107ce5f19846008026107b3565b1980831691505092915050565b5f6107e683836107bf565b9150826002028217905092915050565b6107ff826105f2565b67ffffffffffffffff811115610818576108176103a5565b5b6108228254610629565b61082d82828561076d565b5f60209050601f83116001811461085e575f841561084c578287015190505b61085685826107db565b8655506108bd565b601f19841661086c86610659565b5f5b828110156108935784890151825560018201915060208501945060208101905061086e565b868310156108b057848901516108ac601f8916826107bf565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111561094757808604811115610923576109226108c5565b5b60018516156109325780820291505b8081029050610940856108f2565b9450610907565b94509492505050565b5f8261095f5760019050610a1a565b8161096c575f9050610a1a565b8160018114610982576002811461098c576109bb565b6001915050610a1a565b60ff84111561099e5761099d6108c5565b5b8360020a9150848211156109b5576109b46108c5565b5b50610a1a565b5060208310610133831016604e8410600b84101617156109f05782820a9050838111156109eb576109ea6108c5565b5b610a1a565b6109fd84848460016108fe565b92509050818404811115610a1457610a136108c5565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610a37826104c9565b9150610a4283610a21565b9250610a6f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610950565b905092915050565b5f610a81826104c9565b9150610a8c836104c9565b9250828202610a9a816104c9565b91508282048414831517610ab157610ab06108c5565b5b5092915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f610afc601f83610ab8565b9150610b0782610ac8565b602082019050919050565b5f6020820190508181035f830152610b2981610af0565b9050919050565b5f610b3a826104c9565b9150610b45836104c9565b9250828201905080821115610b5d57610b5c6108c5565b5b92915050565b610b6c816104c9565b82525050565b5f602082019050610b855f830184610b63565b92915050565b61283d80610b985f395ff3fe608060405234801561000f575f80fd5b5060043610610171575f3560e01c80634dd9c9a7116100dc578063a457c2d711610095578063dc2a86111161006f578063dc2a86111461046d578063dd62ed3e14610489578063e8b0a8a3146104b9578063fe2f692c146104d557610171565b8063a457c2d7146103f1578063a9059cbb14610421578063d547741f1461045157610171565b80634dd9c9a71461031d5780636a964e731461033957806370a082311461035557806391d148541461038557806395d89b41146103b5578063a217fddf146103d357610171565b80632e985e561161012e5780632e985e56146102715780632f2ff15d1461027b578063313ce5671461029757806336568abe146102b557806339509351146102d15780634437152a1461030157610171565b806301ffc9a71461017557806306fdde03146101a5578063095ea7b3146101c357806318160ddd146101f357806323b872dd14610211578063248a9ca314610241575b5f80fd5b61018f600480360381019061018a9190611d0a565b6104df565b60405161019c9190611d4f565b60405180910390f35b6101ad610558565b6040516101ba9190611dd8565b60405180910390f35b6101dd60048036038101906101d89190611e85565b6105e8565b6040516101ea9190611d4f565b60405180910390f35b6101fb610605565b6040516102089190611ed2565b60405180910390f35b61022b60048036038101906102269190611eeb565b61060e565b6040516102389190611d4f565b60405180910390f35b61025b60048036038101906102569190611f6e565b610700565b6040516102689190611fa8565b60405180910390f35b61027961071d565b005b61029560048036038101906102909190611fc1565b61074f565b005b61029f610772565b6040516102ac919061201a565b60405180910390f35b6102cf60048036038101906102ca9190611fc1565b61077a565b005b6102eb60048036038101906102e69190611e85565b6107fd565b6040516102f89190611d4f565b60405180910390f35b61031b60048036038101906103169190612033565b6108a4565b005b61033760048036038101906103329190612033565b6108fc565b005b610353600480360381019061034e9190612033565b610957565b005b61036f600480360381019061036a9190612033565b6109af565b60405161037c9190611ed2565b60405180910390f35b61039f600480360381019061039a9190611fc1565b6109f4565b6040516103ac9190611d4f565b60405180910390f35b6103bd610a58565b6040516103ca9190611dd8565b60405180910390f35b6103db610ae8565b6040516103e89190611fa8565b60405180910390f35b61040b60048036038101906104069190611e85565b610aee565b6040516104189190611d4f565b60405180910390f35b61043b60048036038101906104369190611e85565b610bd4565b6040516104489190611d4f565b60405180910390f35b61046b60048036038101906104669190611fc1565b610bf1565b005b61048760048036038101906104829190611e85565b610c14565b005b6104a3600480360381019061049e919061205e565b610c82565b6040516104b09190611ed2565b60405180910390f35b6104d360048036038101906104ce9190612033565b610d04565b005b6104dd610d5e565b005b5f7fda8def73000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610551575061055082610d8f565b5b9050919050565b606060038054610567906120c9565b80601f0160208091040260200160405190810160405280929190818152602001828054610593906120c9565b80156105de5780601f106105b5576101008083540402835291602001916105de565b820191905f5260205f20905b8154815290600101906020018083116105c157829003601f168201915b5050505050905090565b5f6105fb6105f4610df8565b8484610dff565b6001905092915050565b5f600254905090565b5f61061a848484610fc2565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610661610df8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156106e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d790612169565b60405180910390fd5b6106f4856106ec610df8565b858403610dff565b60019150509392505050565b5f60055f8381526020019081526020015f20600101549050919050565b5f801b6107318161072c610df8565b611800565b6001600960146101000a81548160ff02191690831515021790555050565b5f801b6107638161075e610df8565b611800565b61076d838361189c565b505050565b5f6012905090565b610782610df8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146107ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e6906121f7565b60405180910390fd5b6107f98282611977565b5050565b5f61089a610809610df8565b848460015f610816610df8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546108959190612242565b610dff565b6001905092915050565b5f801b6108b8816108b3610df8565b611800565b8160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b5f801b6109108161090b610df8565b611800565b600160075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505050565b5f801b61096b81610966610df8565b611800565b8160095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f60055f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b606060048054610a67906120c9565b80601f0160208091040260200160405190810160405280929190818152602001828054610a93906120c9565b8015610ade5780601f10610ab557610100808354040283529160200191610ade565b820191905f5260205f20905b815481529060010190602001808311610ac157829003601f168201915b5050505050905090565b5f801b81565b5f8060015f610afb610df8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bac906122e5565b60405180910390fd5b610bc9610bc0610df8565b85858403610dff565b600191505092915050565b5f610be7610be0610df8565b8484610fc2565b6001905092915050565b5f801b610c0581610c00610df8565b611800565b610c0f8383611977565b505050565b5f801b610c2881610c23610df8565b611800565b670de0b6b3a764000082610c3c9190612303565b60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f801b610d1881610d13610df8565b611800565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505050565b5f801b610d7281610d6d610df8565b611800565b5f600960146101000a81548160ff02191690831515021790555050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e64906123b4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed290612442565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610fb59190611ed2565b60405180910390a3505050565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611070576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611067906124d0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d5906124d0565b60405180910390fd5b81811015611121576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111189061255e565b60405180910390fd5b5f821161112c575f80fd5b600960149054906101000a900460ff161561122e5760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806111e8575060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b61122d575f61122c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611223906125c6565b60405180910390fd5b5b5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611472575f60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054031561146d57600160075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414801561135157508160085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410155b156113ec576113a68260085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611a5290919063ffffffff16565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061146c565b5f60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541461146b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114629061255e565b60405180910390fd5b5b5b6116b3565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146116b2575f60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205403156116b157600160075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414801561159557508160085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410155b15611630576115ea8260085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611a5290919063ffffffff16565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506116b0565b5f60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054146116af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a69061255e565b60405180910390fd5b5b5b5b5b6116c68282611a5290919063ffffffff16565b5f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611755825f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611a6790919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117f29190611ed2565b60405180910390a350505050565b61180a82826109f4565b6118985761182f8173ffffffffffffffffffffffffffffffffffffffff166014611a7c565b61183c835f1c6020611a7c565b60405160200161184d9291906126b2565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188f9190611dd8565b60405180910390fd5b5050565b6118a682826109f4565b61197357600160055f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611918610df8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b61198182826109f4565b15611a4e575f60055f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506119f3610df8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b5f8183611a5f91906126eb565b905092915050565b5f8183611a749190612242565b905092915050565b60605f6002836002611a8e9190612303565b611a989190612242565b67ffffffffffffffff811115611ab157611ab061271e565b5b6040519080825280601f01601f191660200182016040528015611ae35781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110611b1a57611b1961274b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611b7d57611b7c61274b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f6001846002611bbb9190612303565b611bc59190612242565b90505b6001811115611c64577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611c0757611c0661274b565b5b1a60f81b828281518110611c1e57611c1d61274b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600485901c945080611c5d90612778565b9050611bc8565b505f8414611ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9e906127e9565b60405180910390fd5b8091505092915050565b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611ce981611cb5565b8114611cf3575f80fd5b50565b5f81359050611d0481611ce0565b92915050565b5f60208284031215611d1f57611d1e611cb1565b5b5f611d2c84828501611cf6565b91505092915050565b5f8115159050919050565b611d4981611d35565b82525050565b5f602082019050611d625f830184611d40565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611daa82611d68565b611db48185611d72565b9350611dc4818560208601611d82565b611dcd81611d90565b840191505092915050565b5f6020820190508181035f830152611df08184611da0565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611e2182611df8565b9050919050565b611e3181611e17565b8114611e3b575f80fd5b50565b5f81359050611e4c81611e28565b92915050565b5f819050919050565b611e6481611e52565b8114611e6e575f80fd5b50565b5f81359050611e7f81611e5b565b92915050565b5f8060408385031215611e9b57611e9a611cb1565b5b5f611ea885828601611e3e565b9250506020611eb985828601611e71565b9150509250929050565b611ecc81611e52565b82525050565b5f602082019050611ee55f830184611ec3565b92915050565b5f805f60608486031215611f0257611f01611cb1565b5b5f611f0f86828701611e3e565b9350506020611f2086828701611e3e565b9250506040611f3186828701611e71565b9150509250925092565b5f819050919050565b611f4d81611f3b565b8114611f57575f80fd5b50565b5f81359050611f6881611f44565b92915050565b5f60208284031215611f8357611f82611cb1565b5b5f611f9084828501611f5a565b91505092915050565b611fa281611f3b565b82525050565b5f602082019050611fbb5f830184611f99565b92915050565b5f8060408385031215611fd757611fd6611cb1565b5b5f611fe485828601611f5a565b9250506020611ff585828601611e3e565b9150509250929050565b5f60ff82169050919050565b61201481611fff565b82525050565b5f60208201905061202d5f83018461200b565b92915050565b5f6020828403121561204857612047611cb1565b5b5f61205584828501611e3e565b91505092915050565b5f806040838503121561207457612073611cb1565b5b5f61208185828601611e3e565b925050602061209285828601611e3e565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806120e057607f821691505b6020821081036120f3576120f261209c565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f612153602883611d72565b915061215e826120f9565b604082019050919050565b5f6020820190508181035f83015261218081612147565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e63655f8201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b5f6121e1602f83611d72565b91506121ec82612187565b604082019050919050565b5f6020820190508181035f83015261220e816121d5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61224c82611e52565b915061225783611e52565b925082820190508082111561226f5761226e612215565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6122cf602583611d72565b91506122da82612275565b604082019050919050565b5f6020820190508181035f8301526122fc816122c3565b9050919050565b5f61230d82611e52565b915061231883611e52565b925082820261232681611e52565b9150828204841483151761233d5761233c612215565b5b5092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61239e602483611d72565b91506123a982612344565b604082019050919050565b5f6020820190508181035f8301526123cb81612392565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61242c602283611d72565b9150612437826123d2565b604082019050919050565b5f6020820190508181035f83015261245981612420565b9050919050565b7f45524332303a7472616e736665722066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6124ba602483611d72565b91506124c582612460565b604082019050919050565b5f6020820190508181035f8301526124e7816124ae565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f612548602683611d72565b9150612553826124ee565b604082019050919050565b5f6020820190508181035f8301526125758161253c565b9050919050565b7f74726164696e6720697320436c6f7365000000000000000000000000000000005f82015250565b5f6125b0601083611d72565b91506125bb8261257c565b602082019050919050565b5f6020820190508181035f8301526125dd816125a4565b9050919050565b5f81905092915050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000005f82015250565b5f6126226017836125e4565b915061262d826125ee565b601782019050919050565b5f61264282611d68565b61264c81856125e4565b935061265c818560208601611d82565b80840191505092915050565b7f206973206d697373696e6720726f6c65200000000000000000000000000000005f82015250565b5f61269c6011836125e4565b91506126a782612668565b601182019050919050565b5f6126bc82612616565b91506126c88285612638565b91506126d382612690565b91506126df8284612638565b91508190509392505050565b5f6126f582611e52565b915061270083611e52565b925082820390508181111561271857612717612215565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61278282611e52565b91505f820361279457612793612215565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e745f82015250565b5f6127d3602083611d72565b91506127de8261279f565b602082019050919050565b5f6020820190508181035f830152612800816127c7565b905091905056fea2646970667358221220603bc3616ddb69c1b175a539a630c6a0f013c17de681cabb18c4f47ca6d9328b64736f6c63430008190033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000003b9aca00000000000000000000000000d675427243aedc104b2e0644aec4271e01a011cc000000000000000000000000000000000000000000000000000000000000000447697a6100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000447697a6100000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610171575f3560e01c80634dd9c9a7116100dc578063a457c2d711610095578063dc2a86111161006f578063dc2a86111461046d578063dd62ed3e14610489578063e8b0a8a3146104b9578063fe2f692c146104d557610171565b8063a457c2d7146103f1578063a9059cbb14610421578063d547741f1461045157610171565b80634dd9c9a71461031d5780636a964e731461033957806370a082311461035557806391d148541461038557806395d89b41146103b5578063a217fddf146103d357610171565b80632e985e561161012e5780632e985e56146102715780632f2ff15d1461027b578063313ce5671461029757806336568abe146102b557806339509351146102d15780634437152a1461030157610171565b806301ffc9a71461017557806306fdde03146101a5578063095ea7b3146101c357806318160ddd146101f357806323b872dd14610211578063248a9ca314610241575b5f80fd5b61018f600480360381019061018a9190611d0a565b6104df565b60405161019c9190611d4f565b60405180910390f35b6101ad610558565b6040516101ba9190611dd8565b60405180910390f35b6101dd60048036038101906101d89190611e85565b6105e8565b6040516101ea9190611d4f565b60405180910390f35b6101fb610605565b6040516102089190611ed2565b60405180910390f35b61022b60048036038101906102269190611eeb565b61060e565b6040516102389190611d4f565b60405180910390f35b61025b60048036038101906102569190611f6e565b610700565b6040516102689190611fa8565b60405180910390f35b61027961071d565b005b61029560048036038101906102909190611fc1565b61074f565b005b61029f610772565b6040516102ac919061201a565b60405180910390f35b6102cf60048036038101906102ca9190611fc1565b61077a565b005b6102eb60048036038101906102e69190611e85565b6107fd565b6040516102f89190611d4f565b60405180910390f35b61031b60048036038101906103169190612033565b6108a4565b005b61033760048036038101906103329190612033565b6108fc565b005b610353600480360381019061034e9190612033565b610957565b005b61036f600480360381019061036a9190612033565b6109af565b60405161037c9190611ed2565b60405180910390f35b61039f600480360381019061039a9190611fc1565b6109f4565b6040516103ac9190611d4f565b60405180910390f35b6103bd610a58565b6040516103ca9190611dd8565b60405180910390f35b6103db610ae8565b6040516103e89190611fa8565b60405180910390f35b61040b60048036038101906104069190611e85565b610aee565b6040516104189190611d4f565b60405180910390f35b61043b60048036038101906104369190611e85565b610bd4565b6040516104489190611d4f565b60405180910390f35b61046b60048036038101906104669190611fc1565b610bf1565b005b61048760048036038101906104829190611e85565b610c14565b005b6104a3600480360381019061049e919061205e565b610c82565b6040516104b09190611ed2565b60405180910390f35b6104d360048036038101906104ce9190612033565b610d04565b005b6104dd610d5e565b005b5f7fda8def73000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610551575061055082610d8f565b5b9050919050565b606060038054610567906120c9565b80601f0160208091040260200160405190810160405280929190818152602001828054610593906120c9565b80156105de5780601f106105b5576101008083540402835291602001916105de565b820191905f5260205f20905b8154815290600101906020018083116105c157829003601f168201915b5050505050905090565b5f6105fb6105f4610df8565b8484610dff565b6001905092915050565b5f600254905090565b5f61061a848484610fc2565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610661610df8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156106e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d790612169565b60405180910390fd5b6106f4856106ec610df8565b858403610dff565b60019150509392505050565b5f60055f8381526020019081526020015f20600101549050919050565b5f801b6107318161072c610df8565b611800565b6001600960146101000a81548160ff02191690831515021790555050565b5f801b6107638161075e610df8565b611800565b61076d838361189c565b505050565b5f6012905090565b610782610df8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146107ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e6906121f7565b60405180910390fd5b6107f98282611977565b5050565b5f61089a610809610df8565b848460015f610816610df8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546108959190612242565b610dff565b6001905092915050565b5f801b6108b8816108b3610df8565b611800565b8160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b5f801b6109108161090b610df8565b611800565b600160075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505050565b5f801b61096b81610966610df8565b611800565b8160095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f60055f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b606060048054610a67906120c9565b80601f0160208091040260200160405190810160405280929190818152602001828054610a93906120c9565b8015610ade5780601f10610ab557610100808354040283529160200191610ade565b820191905f5260205f20905b815481529060010190602001808311610ac157829003601f168201915b5050505050905090565b5f801b81565b5f8060015f610afb610df8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bac906122e5565b60405180910390fd5b610bc9610bc0610df8565b85858403610dff565b600191505092915050565b5f610be7610be0610df8565b8484610fc2565b6001905092915050565b5f801b610c0581610c00610df8565b611800565b610c0f8383611977565b505050565b5f801b610c2881610c23610df8565b611800565b670de0b6b3a764000082610c3c9190612303565b60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f801b610d1881610d13610df8565b611800565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505050565b5f801b610d7281610d6d610df8565b611800565b5f600960146101000a81548160ff02191690831515021790555050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e64906123b4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed290612442565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610fb59190611ed2565b60405180910390a3505050565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611070576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611067906124d0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d5906124d0565b60405180910390fd5b81811015611121576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111189061255e565b60405180910390fd5b5f821161112c575f80fd5b600960149054906101000a900460ff161561122e5760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806111e8575060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b61122d575f61122c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611223906125c6565b60405180910390fd5b5b5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611472575f60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054031561146d57600160075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414801561135157508160085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410155b156113ec576113a68260085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611a5290919063ffffffff16565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061146c565b5f60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541461146b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114629061255e565b60405180910390fd5b5b5b6116b3565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146116b2575f60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205403156116b157600160075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414801561159557508160085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410155b15611630576115ea8260085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611a5290919063ffffffff16565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506116b0565b5f60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054146116af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a69061255e565b60405180910390fd5b5b5b5b5b6116c68282611a5290919063ffffffff16565b5f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611755825f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611a6790919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117f29190611ed2565b60405180910390a350505050565b61180a82826109f4565b6118985761182f8173ffffffffffffffffffffffffffffffffffffffff166014611a7c565b61183c835f1c6020611a7c565b60405160200161184d9291906126b2565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188f9190611dd8565b60405180910390fd5b5050565b6118a682826109f4565b61197357600160055f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611918610df8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b61198182826109f4565b15611a4e575f60055f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506119f3610df8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b5f8183611a5f91906126eb565b905092915050565b5f8183611a749190612242565b905092915050565b60605f6002836002611a8e9190612303565b611a989190612242565b67ffffffffffffffff811115611ab157611ab061271e565b5b6040519080825280601f01601f191660200182016040528015611ae35781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110611b1a57611b1961274b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611b7d57611b7c61274b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f6001846002611bbb9190612303565b611bc59190612242565b90505b6001811115611c64577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611c0757611c0661274b565b5b1a60f81b828281518110611c1e57611c1d61274b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600485901c945080611c5d90612778565b9050611bc8565b505f8414611ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9e906127e9565b60405180910390fd5b8091505092915050565b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611ce981611cb5565b8114611cf3575f80fd5b50565b5f81359050611d0481611ce0565b92915050565b5f60208284031215611d1f57611d1e611cb1565b5b5f611d2c84828501611cf6565b91505092915050565b5f8115159050919050565b611d4981611d35565b82525050565b5f602082019050611d625f830184611d40565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611daa82611d68565b611db48185611d72565b9350611dc4818560208601611d82565b611dcd81611d90565b840191505092915050565b5f6020820190508181035f830152611df08184611da0565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611e2182611df8565b9050919050565b611e3181611e17565b8114611e3b575f80fd5b50565b5f81359050611e4c81611e28565b92915050565b5f819050919050565b611e6481611e52565b8114611e6e575f80fd5b50565b5f81359050611e7f81611e5b565b92915050565b5f8060408385031215611e9b57611e9a611cb1565b5b5f611ea885828601611e3e565b9250506020611eb985828601611e71565b9150509250929050565b611ecc81611e52565b82525050565b5f602082019050611ee55f830184611ec3565b92915050565b5f805f60608486031215611f0257611f01611cb1565b5b5f611f0f86828701611e3e565b9350506020611f2086828701611e3e565b9250506040611f3186828701611e71565b9150509250925092565b5f819050919050565b611f4d81611f3b565b8114611f57575f80fd5b50565b5f81359050611f6881611f44565b92915050565b5f60208284031215611f8357611f82611cb1565b5b5f611f9084828501611f5a565b91505092915050565b611fa281611f3b565b82525050565b5f602082019050611fbb5f830184611f99565b92915050565b5f8060408385031215611fd757611fd6611cb1565b5b5f611fe485828601611f5a565b9250506020611ff585828601611e3e565b9150509250929050565b5f60ff82169050919050565b61201481611fff565b82525050565b5f60208201905061202d5f83018461200b565b92915050565b5f6020828403121561204857612047611cb1565b5b5f61205584828501611e3e565b91505092915050565b5f806040838503121561207457612073611cb1565b5b5f61208185828601611e3e565b925050602061209285828601611e3e565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806120e057607f821691505b6020821081036120f3576120f261209c565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f612153602883611d72565b915061215e826120f9565b604082019050919050565b5f6020820190508181035f83015261218081612147565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e63655f8201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b5f6121e1602f83611d72565b91506121ec82612187565b604082019050919050565b5f6020820190508181035f83015261220e816121d5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61224c82611e52565b915061225783611e52565b925082820190508082111561226f5761226e612215565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6122cf602583611d72565b91506122da82612275565b604082019050919050565b5f6020820190508181035f8301526122fc816122c3565b9050919050565b5f61230d82611e52565b915061231883611e52565b925082820261232681611e52565b9150828204841483151761233d5761233c612215565b5b5092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61239e602483611d72565b91506123a982612344565b604082019050919050565b5f6020820190508181035f8301526123cb81612392565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61242c602283611d72565b9150612437826123d2565b604082019050919050565b5f6020820190508181035f83015261245981612420565b9050919050565b7f45524332303a7472616e736665722066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6124ba602483611d72565b91506124c582612460565b604082019050919050565b5f6020820190508181035f8301526124e7816124ae565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f612548602683611d72565b9150612553826124ee565b604082019050919050565b5f6020820190508181035f8301526125758161253c565b9050919050565b7f74726164696e6720697320436c6f7365000000000000000000000000000000005f82015250565b5f6125b0601083611d72565b91506125bb8261257c565b602082019050919050565b5f6020820190508181035f8301526125dd816125a4565b9050919050565b5f81905092915050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000005f82015250565b5f6126226017836125e4565b915061262d826125ee565b601782019050919050565b5f61264282611d68565b61264c81856125e4565b935061265c818560208601611d82565b80840191505092915050565b7f206973206d697373696e6720726f6c65200000000000000000000000000000005f82015250565b5f61269c6011836125e4565b91506126a782612668565b601182019050919050565b5f6126bc82612616565b91506126c88285612638565b91506126d382612690565b91506126df8284612638565b91508190509392505050565b5f6126f582611e52565b915061270083611e52565b925082820390508181111561271857612717612215565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61278282611e52565b91505f820361279457612793612215565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e745f82015250565b5f6127d3602083611d72565b91506127de8261279f565b602082019050919050565b5f6020820190508181035f830152612800816127c7565b905091905056fea2646970667358221220603bc3616ddb69c1b175a539a630c6a0f013c17de681cabb18c4f47ca6d9328b64736f6c63430008190033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000003b9aca00000000000000000000000000d675427243aedc104b2e0644aec4271e01a011cc000000000000000000000000000000000000000000000000000000000000000447697a6100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000447697a6100000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Giza
Arg [1] : _symbol (string): Giza
Arg [2] : _totalSupply (uint256): 1000000000
Arg [3] : token (address): 0xD675427243aedC104b2E0644aEC4271E01A011CC

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 000000000000000000000000000000000000000000000000000000003b9aca00
Arg [3] : 000000000000000000000000d675427243aedc104b2e0644aec4271e01a011cc
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [5] : 47697a6100000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 47697a6100000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

36850:2685:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16590:197;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26911:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29077:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28030:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29727:492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17994:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39235:86;;;:::i;:::-;;18379:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27873:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19427:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30628:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39328:99;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38906:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39433:98;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28201:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16879:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27130:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15973:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31345:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28541:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18771:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38771:128;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28779:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39016:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39136:86;;;:::i;:::-;;16590:197;16675:4;16714:25;16699:40;;;:11;:40;;;;:80;;;;16743:36;16767:11;16743:23;:36::i;:::-;16699:80;16692:87;;16590:197;;;:::o;26911:100::-;26965:13;26998:5;26991:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26911:100;:::o;29077:169::-;29160:4;29177:39;29186:12;:10;:12::i;:::-;29200:7;29209:6;29177:8;:39::i;:::-;29234:4;29227:11;;29077:169;;;;:::o;28030:108::-;28091:7;28118:12;;28111:19;;28030:108;:::o;29727:492::-;29867:4;29884:36;29894:6;29902:9;29913:6;29884:9;:36::i;:::-;29933:24;29960:11;:19;29972:6;29960:19;;;;;;;;;;;;;;;:33;29980:12;:10;:12::i;:::-;29960:33;;;;;;;;;;;;;;;;29933:60;;30032:6;30012:16;:26;;30004:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;30119:57;30128:6;30136:12;:10;:12::i;:::-;30169:6;30150:16;:25;30119:8;:57::i;:::-;30207:4;30200:11;;;29727:492;;;;;:::o;17994:123::-;18060:7;18087:6;:12;18094:4;18087:12;;;;;;;;;;;:22;;;18080:29;;17994:123;;;:::o;39235:86::-;16018:4;39272:18;;16468:30;16479:4;16485:12;:10;:12::i;:::-;16468:10;:30::i;:::-;39308:4:::1;39301:6;;:11;;;;;;;;;;;;;;;;;;39235:86:::0;:::o;18379:147::-;16018:4;18462:18;;16468:30;16479:4;16485:12;:10;:12::i;:::-;16468:10;:30::i;:::-;18493:25:::1;18504:4;18510:7;18493:10;:25::i;:::-;18379:147:::0;;;:::o;27873:93::-;27931:5;27956:2;27949:9;;27873:93;:::o;19427:218::-;19534:12;:10;:12::i;:::-;19523:23;;:7;:23;;;19515:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;19611:26;19623:4;19629:7;19611:11;:26::i;:::-;19427:218;;:::o;30628:215::-;30716:4;30733:80;30742:12;:10;:12::i;:::-;30756:7;30802:10;30765:11;:25;30777:12;:10;:12::i;:::-;30765:25;;;;;;;;;;;;;;;:34;30791:7;30765:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;30733:8;:80::i;:::-;30831:4;30824:11;;30628:215;;;;:::o;39328:99::-;16018:4;39378:18;;16468:30;16479:4;16485:12;:10;:12::i;:::-;16468:10;:30::i;:::-;39414:5:::1;39408;;:11;;;;;;;;;;;;;;;;;;39328:99:::0;;:::o;38906:104::-;16018:4;38959:18;;16468:30;16479:4;16485:12;:10;:12::i;:::-;16468:10;:30::i;:::-;39001:1:::1;38989:5;:11;38995:4;38989:11;;;;;;;;;;;;;;;:13;;;;38906:104:::0;;:::o;39433:98::-;16018:4;39481:18;;16468:30;16479:4;16485:12;:10;:12::i;:::-;16468:10;:30::i;:::-;39520:3:::1;39511:8;;:12;;;;;;;;;;;;;;;;;;39433:98:::0;;:::o;28201:127::-;28275:7;28302:9;:18;28312:7;28302:18;;;;;;;;;;;;;;;;28295:25;;28201:127;;;:::o;16879:139::-;16957:4;16981:6;:12;16988:4;16981:12;;;;;;;;;;;:20;;:29;17002:7;16981:29;;;;;;;;;;;;;;;;;;;;;;;;;16974:36;;16879:139;;;;:::o;27130:104::-;27186:13;27219:7;27212:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27130:104;:::o;15973:49::-;16018:4;15973:49;;;:::o;31345:413::-;31438:4;31455:24;31482:11;:25;31494:12;:10;:12::i;:::-;31482:25;;;;;;;;;;;;;;;:34;31508:7;31482:34;;;;;;;;;;;;;;;;31455:61;;31555:15;31535:16;:35;;31527:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31648:67;31657:12;:10;:12::i;:::-;31671:7;31699:15;31680:16;:34;31648:8;:67::i;:::-;31746:4;31739:11;;;31345:413;;;;:::o;28541:175::-;28627:4;28644:42;28654:12;:10;:12::i;:::-;28668:9;28679:6;28644:9;:42::i;:::-;28704:4;28697:11;;28541:175;;;;:::o;18771:149::-;16018:4;18855:18;;16468:30;16479:4;16485:12;:10;:12::i;:::-;16468:10;:30::i;:::-;18886:26:::1;18898:4;18904:7;18886:11;:26::i;:::-;18771:149:::0;;;:::o;38771:128::-;16018:4;38835:18;;16468:30;16479:4;16485:12;:10;:12::i;:::-;16468:10;:30::i;:::-;38885:6:::1;38878;:13;;;;:::i;:::-;38866:5;:11;38872:4;38866:11;;;;;;;;;;;;;;;:25;;;;38771:128:::0;;;:::o;28779:151::-;28868:7;28895:11;:18;28907:5;28895:18;;;;;;;;;;;;;;;:27;28914:7;28895:27;;;;;;;;;;;;;;;;28888:34;;28779:151;;;;:::o;39016:105::-;16018:4;39070:18;;16468:30;16479:4;16485:12;:10;:12::i;:::-;16468:10;:30::i;:::-;39112:1:::1;39100:5;:11;39106:4;39100:11;;;;;;;;;;;;;;;:13;;;;39016:105:::0;;:::o;39136:86::-;16018:4;39172:18;;16468:30;16479:4;16485:12;:10;:12::i;:::-;16468:10;:30::i;:::-;39208:5:::1;39201:6;;:12;;;;;;;;;;;;;;;;;;39136:86:::0;:::o;1520:157::-;1605:4;1644:25;1629:40;;;:11;:40;;;;1622:47;;1520:157;;;:::o;11983:98::-;12036:7;12063:10;12056:17;;11983:98;:::o;35012:379::-;35165:1;35148:19;;:5;:19;;;35140:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35246:1;35227:21;;:7;:21;;;35219:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35329:6;35299:11;:18;35311:5;35299:18;;;;;;;;;;;;;;;:27;35318:7;35299:27;;;;;;;;;;;;;;;:36;;;;35367:7;35351:32;;35360:5;35351:32;;;35376:6;35351:32;;;;;;:::i;:::-;;;;;;;;35012:379;;;:::o;37354:1405::-;37449:21;37473:9;:15;37483:4;37473:15;;;;;;;;;;;;;;;;37449:39;;37524:1;37510:16;;:4;:16;;;37502:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37597:1;37585:14;;:2;:14;;;37577:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37680:6;37663:13;:23;;37655:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;37759:1;37752:6;:8;37744:17;;;;;;37778:6;;;;;;;;;;;37775:159;;;37809:5;;;;;;;;;;;37803:11;;:4;:11;;;:29;;;;37824:8;;;;;;;;;;;37818:14;;:4;:14;;;37803:29;37800:123;;37882:5;37874:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;37800:123;37775:159;37952:5;;;;;;;;;;;37948:9;;:2;:9;;;37945:609;;37989:1;37976:5;:11;37982:4;37976:11;;;;;;;;;;;;;;;;:14;37973:263;;;38031:1;38018:5;:11;38024:4;38018:11;;;;;;;;;;;;;;;;:14;:38;;;;;38050:6;38037:5;:11;38043:4;38037:11;;;;;;;;;;;;;;;;:19;;38018:38;38015:221;;;38089:23;38105:6;38089:5;:11;38095:4;38089:11;;;;;;;;;;;;;;;;:15;;:23;;;;:::i;:::-;38077:5;:11;38083:4;38077:11;;;;;;;;;;;;;;;:35;;;;38015:221;;;38176:1;38163:5;:11;38169:4;38163:11;;;;;;;;;;;;;;;;:14;38155:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38015:221;37973:263;37945:609;;;38261:5;;;;;;;;;;;38255:11;;:4;:11;;;38252:302;;38301:1;38288:5;:11;38294:4;38288:11;;;;;;;;;;;;;;;;:14;38285:258;;;38342:1;38329:5;:11;38335:4;38329:11;;;;;;;;;;;;;;;;:14;:38;;;;;38361:6;38348:5;:11;38354:4;38348:11;;;;;;;;;;;;;;;;:19;;38329:38;38326:217;;;38399:23;38415:6;38399:5;:11;38405:4;38399:11;;;;;;;;;;;;;;;;:15;;:23;;;;:::i;:::-;38387:5;:11;38393:4;38387:11;;;;;;;;;;;;;;;:35;;;;38326:217;;;38483:1;38470:5;:11;38476:4;38470:11;;;;;;;;;;;;;;;;:14;38462:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38326:217;38285:258;38252:302;37945:609;38613:25;38631:6;38613:13;:17;;:25;;;;:::i;:::-;38595:9;:15;38605:4;38595:15;;;;;;;;;;;;;;;:43;;;;38680:25;38698:6;38680:9;:13;38690:2;38680:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;38664:9;:13;38674:2;38664:13;;;;;;;;;;;;;;;:41;;;;38739:2;38724:26;;38733:4;38724:26;;;38743:6;38724:26;;;;;;:::i;:::-;;;;;;;;37437:1322;37354:1405;;;:::o;17308:497::-;17389:22;17397:4;17403:7;17389;:22::i;:::-;17384:414;;17577:41;17605:7;17577:41;;17615:2;17577:19;:41::i;:::-;17691:38;17719:4;17711:13;;17726:2;17691:19;:38::i;:::-;17482:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;17428:358;;;;;;;;;;;:::i;:::-;;;;;;;;17384:414;17308:497;;:::o;20928:238::-;21012:22;21020:4;21026:7;21012;:22::i;:::-;21007:152;;21083:4;21051:6;:12;21058:4;21051:12;;;;;;;;;;;:20;;:29;21072:7;21051:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;21134:12;:10;:12::i;:::-;21107:40;;21125:7;21107:40;;21119:4;21107:40;;;;;;;;;;21007:152;20928:238;;:::o;21298:239::-;21382:22;21390:4;21396:7;21382;:22::i;:::-;21378:152;;;21453:5;21421:6;:12;21428:4;21421:12;;;;;;;;;;;:20;;:29;21442:7;21421:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;21505:12;:10;:12::i;:::-;21478:40;;21496:7;21478:40;;21490:4;21478:40;;;;;;;;;;21378:152;21298:239;;:::o;4776:98::-;4834:7;4865:1;4861;:5;;;;:::i;:::-;4854:12;;4776:98;;;;:::o;4395:::-;4453:7;4484:1;4480;:5;;;;:::i;:::-;4473:12;;4395:98;;;;:::o;13723:451::-;13798:13;13824:19;13869:1;13860:6;13856:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;13846:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13824:47;;13882:15;:6;13889:1;13882:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;13908;:6;13915:1;13908:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;13939:9;13964:1;13955:6;13951:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;13939:26;;13934:135;13971:1;13967;:5;13934:135;;;14006:12;14027:3;14019:5;:11;14006:25;;;;;;;:::i;:::-;;;;;13994:6;14001:1;13994:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;14056:1;14046:11;;;;;13974:3;;;;:::i;:::-;;;13934:135;;;;14096:1;14087:5;:10;14079:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;14159:6;14145:21;;;13723:451;;;;:::o;88:117:1:-;197:1;194;187:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:139::-;1887:6;1882:3;1877;1871:23;1928:1;1919:6;1914:3;1910:16;1903:27;1798:139;;;:::o;1943:102::-;1984:6;2035:2;2031:7;2026:2;2019:5;2015:14;2011:28;2001:38;;1943:102;;;:::o;2051:377::-;2139:3;2167:39;2200:5;2167:39;:::i;:::-;2222:71;2286:6;2281:3;2222:71;:::i;:::-;2215:78;;2302:65;2360:6;2355:3;2348:4;2341:5;2337:16;2302:65;:::i;:::-;2392:29;2414:6;2392:29;:::i;:::-;2387:3;2383:39;2376:46;;2143:285;2051:377;;;;:::o;2434:313::-;2547:4;2585:2;2574:9;2570:18;2562:26;;2634:9;2628:4;2624:20;2620:1;2609:9;2605:17;2598:47;2662:78;2735:4;2726:6;2662:78;:::i;:::-;2654:86;;2434:313;;;;:::o;2753:126::-;2790:7;2830:42;2823:5;2819:54;2808:65;;2753:126;;;:::o;2885:96::-;2922:7;2951:24;2969:5;2951:24;:::i;:::-;2940:35;;2885:96;;;:::o;2987:122::-;3060:24;3078:5;3060:24;:::i;:::-;3053:5;3050:35;3040:63;;3099:1;3096;3089:12;3040:63;2987:122;:::o;3115:139::-;3161:5;3199:6;3186:20;3177:29;;3215:33;3242:5;3215:33;:::i;:::-;3115:139;;;;:::o;3260:77::-;3297:7;3326:5;3315:16;;3260:77;;;:::o;3343:122::-;3416:24;3434:5;3416:24;:::i;:::-;3409:5;3406:35;3396:63;;3455:1;3452;3445:12;3396:63;3343:122;:::o;3471:139::-;3517:5;3555:6;3542:20;3533:29;;3571:33;3598:5;3571:33;:::i;:::-;3471:139;;;;:::o;3616:474::-;3684:6;3692;3741:2;3729:9;3720:7;3716:23;3712:32;3709:119;;;3747:79;;:::i;:::-;3709:119;3867:1;3892:53;3937:7;3928:6;3917:9;3913:22;3892:53;:::i;:::-;3882:63;;3838:117;3994:2;4020:53;4065:7;4056:6;4045:9;4041:22;4020:53;:::i;:::-;4010:63;;3965:118;3616:474;;;;;:::o;4096:118::-;4183:24;4201:5;4183:24;:::i;:::-;4178:3;4171:37;4096:118;;:::o;4220:222::-;4313:4;4351:2;4340:9;4336:18;4328:26;;4364:71;4432:1;4421:9;4417:17;4408:6;4364:71;:::i;:::-;4220:222;;;;:::o;4448:619::-;4525:6;4533;4541;4590:2;4578:9;4569:7;4565:23;4561:32;4558:119;;;4596:79;;:::i;:::-;4558:119;4716:1;4741:53;4786:7;4777:6;4766:9;4762:22;4741:53;:::i;:::-;4731:63;;4687:117;4843:2;4869:53;4914:7;4905:6;4894:9;4890:22;4869:53;:::i;:::-;4859:63;;4814:118;4971:2;4997:53;5042:7;5033:6;5022:9;5018:22;4997:53;:::i;:::-;4987:63;;4942:118;4448:619;;;;;:::o;5073:77::-;5110:7;5139:5;5128:16;;5073:77;;;:::o;5156:122::-;5229:24;5247:5;5229:24;:::i;:::-;5222:5;5219:35;5209:63;;5268:1;5265;5258:12;5209:63;5156:122;:::o;5284:139::-;5330:5;5368:6;5355:20;5346:29;;5384:33;5411:5;5384:33;:::i;:::-;5284:139;;;;:::o;5429:329::-;5488:6;5537:2;5525:9;5516:7;5512:23;5508:32;5505:119;;;5543:79;;:::i;:::-;5505:119;5663:1;5688:53;5733:7;5724:6;5713:9;5709:22;5688:53;:::i;:::-;5678:63;;5634:117;5429:329;;;;:::o;5764:118::-;5851:24;5869:5;5851:24;:::i;:::-;5846:3;5839:37;5764:118;;:::o;5888:222::-;5981:4;6019:2;6008:9;6004:18;5996:26;;6032:71;6100:1;6089:9;6085:17;6076:6;6032:71;:::i;:::-;5888:222;;;;:::o;6116:474::-;6184:6;6192;6241:2;6229:9;6220:7;6216:23;6212:32;6209:119;;;6247:79;;:::i;:::-;6209:119;6367:1;6392:53;6437:7;6428:6;6417:9;6413:22;6392:53;:::i;:::-;6382:63;;6338:117;6494:2;6520:53;6565:7;6556:6;6545:9;6541:22;6520:53;:::i;:::-;6510:63;;6465:118;6116:474;;;;;:::o;6596:86::-;6631:7;6671:4;6664:5;6660:16;6649:27;;6596:86;;;:::o;6688:112::-;6771:22;6787:5;6771:22;:::i;:::-;6766:3;6759:35;6688:112;;:::o;6806:214::-;6895:4;6933:2;6922:9;6918:18;6910:26;;6946:67;7010:1;6999:9;6995:17;6986:6;6946:67;:::i;:::-;6806:214;;;;:::o;7026:329::-;7085:6;7134:2;7122:9;7113:7;7109:23;7105:32;7102:119;;;7140:79;;:::i;:::-;7102:119;7260:1;7285:53;7330:7;7321:6;7310:9;7306:22;7285:53;:::i;:::-;7275:63;;7231:117;7026:329;;;;:::o;7361:474::-;7429:6;7437;7486:2;7474:9;7465:7;7461:23;7457:32;7454:119;;;7492:79;;:::i;:::-;7454:119;7612:1;7637:53;7682:7;7673:6;7662:9;7658:22;7637:53;:::i;:::-;7627:63;;7583:117;7739:2;7765:53;7810:7;7801:6;7790:9;7786:22;7765:53;:::i;:::-;7755:63;;7710:118;7361:474;;;;;:::o;7841:180::-;7889:77;7886:1;7879:88;7986:4;7983:1;7976:15;8010:4;8007:1;8000:15;8027:320;8071:6;8108:1;8102:4;8098:12;8088:22;;8155:1;8149:4;8145:12;8176:18;8166:81;;8232:4;8224:6;8220:17;8210:27;;8166:81;8294:2;8286:6;8283:14;8263:18;8260:38;8257:84;;8313:18;;:::i;:::-;8257:84;8078:269;8027:320;;;:::o;8353:227::-;8493:34;8489:1;8481:6;8477:14;8470:58;8562:10;8557:2;8549:6;8545:15;8538:35;8353:227;:::o;8586:366::-;8728:3;8749:67;8813:2;8808:3;8749:67;:::i;:::-;8742:74;;8825:93;8914:3;8825:93;:::i;:::-;8943:2;8938:3;8934:12;8927:19;;8586:366;;;:::o;8958:419::-;9124:4;9162:2;9151:9;9147:18;9139:26;;9211:9;9205:4;9201:20;9197:1;9186:9;9182:17;9175:47;9239:131;9365:4;9239:131;:::i;:::-;9231:139;;8958:419;;;:::o;9383:234::-;9523:34;9519:1;9511:6;9507:14;9500:58;9592:17;9587:2;9579:6;9575:15;9568:42;9383:234;:::o;9623:366::-;9765:3;9786:67;9850:2;9845:3;9786:67;:::i;:::-;9779:74;;9862:93;9951:3;9862:93;:::i;:::-;9980:2;9975:3;9971:12;9964:19;;9623:366;;;:::o;9995:419::-;10161:4;10199:2;10188:9;10184:18;10176:26;;10248:9;10242:4;10238:20;10234:1;10223:9;10219:17;10212:47;10276:131;10402:4;10276:131;:::i;:::-;10268:139;;9995:419;;;:::o;10420:180::-;10468:77;10465:1;10458:88;10565:4;10562:1;10555:15;10589:4;10586:1;10579:15;10606:191;10646:3;10665:20;10683:1;10665:20;:::i;:::-;10660:25;;10699:20;10717:1;10699:20;:::i;:::-;10694:25;;10742:1;10739;10735:9;10728:16;;10763:3;10760:1;10757:10;10754:36;;;10770:18;;:::i;:::-;10754:36;10606:191;;;;:::o;10803:224::-;10943:34;10939:1;10931:6;10927:14;10920:58;11012:7;11007:2;10999:6;10995:15;10988:32;10803:224;:::o;11033:366::-;11175:3;11196:67;11260:2;11255:3;11196:67;:::i;:::-;11189:74;;11272:93;11361:3;11272:93;:::i;:::-;11390:2;11385:3;11381:12;11374:19;;11033:366;;;:::o;11405:419::-;11571:4;11609:2;11598:9;11594:18;11586:26;;11658:9;11652:4;11648:20;11644:1;11633:9;11629:17;11622:47;11686:131;11812:4;11686:131;:::i;:::-;11678:139;;11405:419;;;:::o;11830:410::-;11870:7;11893:20;11911:1;11893:20;:::i;:::-;11888:25;;11927:20;11945:1;11927:20;:::i;:::-;11922:25;;11982:1;11979;11975:9;12004:30;12022:11;12004:30;:::i;:::-;11993:41;;12183:1;12174:7;12170:15;12167:1;12164:22;12144:1;12137:9;12117:83;12094:139;;12213:18;;:::i;:::-;12094:139;11878:362;11830:410;;;;:::o;12246:223::-;12386:34;12382:1;12374:6;12370:14;12363:58;12455:6;12450:2;12442:6;12438:15;12431:31;12246:223;:::o;12475:366::-;12617:3;12638:67;12702:2;12697:3;12638:67;:::i;:::-;12631:74;;12714:93;12803:3;12714:93;:::i;:::-;12832:2;12827:3;12823:12;12816:19;;12475:366;;;:::o;12847:419::-;13013:4;13051:2;13040:9;13036:18;13028:26;;13100:9;13094:4;13090:20;13086:1;13075:9;13071:17;13064:47;13128:131;13254:4;13128:131;:::i;:::-;13120:139;;12847:419;;;:::o;13272:221::-;13412:34;13408:1;13400:6;13396:14;13389:58;13481:4;13476:2;13468:6;13464:15;13457:29;13272:221;:::o;13499:366::-;13641:3;13662:67;13726:2;13721:3;13662:67;:::i;:::-;13655:74;;13738:93;13827:3;13738:93;:::i;:::-;13856:2;13851:3;13847:12;13840:19;;13499:366;;;:::o;13871:419::-;14037:4;14075:2;14064:9;14060:18;14052:26;;14124:9;14118:4;14114:20;14110:1;14099:9;14095:17;14088:47;14152:131;14278:4;14152:131;:::i;:::-;14144:139;;13871:419;;;:::o;14296:223::-;14436:34;14432:1;14424:6;14420:14;14413:58;14505:6;14500:2;14492:6;14488:15;14481:31;14296:223;:::o;14525:366::-;14667:3;14688:67;14752:2;14747:3;14688:67;:::i;:::-;14681:74;;14764:93;14853:3;14764:93;:::i;:::-;14882:2;14877:3;14873:12;14866:19;;14525:366;;;:::o;14897:419::-;15063:4;15101:2;15090:9;15086:18;15078:26;;15150:9;15144:4;15140:20;15136:1;15125:9;15121:17;15114:47;15178:131;15304:4;15178:131;:::i;:::-;15170:139;;14897:419;;;:::o;15322:225::-;15462:34;15458:1;15450:6;15446:14;15439:58;15531:8;15526:2;15518:6;15514:15;15507:33;15322:225;:::o;15553:366::-;15695:3;15716:67;15780:2;15775:3;15716:67;:::i;:::-;15709:74;;15792:93;15881:3;15792:93;:::i;:::-;15910:2;15905:3;15901:12;15894:19;;15553:366;;;:::o;15925:419::-;16091:4;16129:2;16118:9;16114:18;16106:26;;16178:9;16172:4;16168:20;16164:1;16153:9;16149:17;16142:47;16206:131;16332:4;16206:131;:::i;:::-;16198:139;;15925:419;;;:::o;16350:166::-;16490:18;16486:1;16478:6;16474:14;16467:42;16350:166;:::o;16522:366::-;16664:3;16685:67;16749:2;16744:3;16685:67;:::i;:::-;16678:74;;16761:93;16850:3;16761:93;:::i;:::-;16879:2;16874:3;16870:12;16863:19;;16522:366;;;:::o;16894:419::-;17060:4;17098:2;17087:9;17083:18;17075:26;;17147:9;17141:4;17137:20;17133:1;17122:9;17118:17;17111:47;17175:131;17301:4;17175:131;:::i;:::-;17167:139;;16894:419;;;:::o;17319:148::-;17421:11;17458:3;17443:18;;17319:148;;;;:::o;17473:173::-;17613:25;17609:1;17601:6;17597:14;17590:49;17473:173;:::o;17652:402::-;17812:3;17833:85;17915:2;17910:3;17833:85;:::i;:::-;17826:92;;17927:93;18016:3;17927:93;:::i;:::-;18045:2;18040:3;18036:12;18029:19;;17652:402;;;:::o;18060:390::-;18166:3;18194:39;18227:5;18194:39;:::i;:::-;18249:89;18331:6;18326:3;18249:89;:::i;:::-;18242:96;;18347:65;18405:6;18400:3;18393:4;18386:5;18382:16;18347:65;:::i;:::-;18437:6;18432:3;18428:16;18421:23;;18170:280;18060:390;;;;:::o;18456:167::-;18596:19;18592:1;18584:6;18580:14;18573:43;18456:167;:::o;18629:402::-;18789:3;18810:85;18892:2;18887:3;18810:85;:::i;:::-;18803:92;;18904:93;18993:3;18904:93;:::i;:::-;19022:2;19017:3;19013:12;19006:19;;18629:402;;;:::o;19037:967::-;19419:3;19441:148;19585:3;19441:148;:::i;:::-;19434:155;;19606:95;19697:3;19688:6;19606:95;:::i;:::-;19599:102;;19718:148;19862:3;19718:148;:::i;:::-;19711:155;;19883:95;19974:3;19965:6;19883:95;:::i;:::-;19876:102;;19995:3;19988:10;;19037:967;;;;;:::o;20010:194::-;20050:4;20070:20;20088:1;20070:20;:::i;:::-;20065:25;;20104:20;20122:1;20104:20;:::i;:::-;20099:25;;20148:1;20145;20141:9;20133:17;;20172:1;20166:4;20163:11;20160:37;;;20177:18;;:::i;:::-;20160:37;20010:194;;;;:::o;20210:180::-;20258:77;20255:1;20248:88;20355:4;20352:1;20345:15;20379:4;20376:1;20369:15;20396:180;20444:77;20441:1;20434:88;20541:4;20538:1;20531:15;20565:4;20562:1;20555:15;20582:171;20621:3;20644:24;20662:5;20644:24;:::i;:::-;20635:33;;20690:4;20683:5;20680:15;20677:41;;20698:18;;:::i;:::-;20677:41;20745:1;20738:5;20734:13;20727:20;;20582:171;;;:::o;20759:182::-;20899:34;20895:1;20887:6;20883:14;20876:58;20759:182;:::o;20947:366::-;21089:3;21110:67;21174:2;21169:3;21110:67;:::i;:::-;21103:74;;21186:93;21275:3;21186:93;:::i;:::-;21304:2;21299:3;21295:12;21288:19;;20947:366;;;:::o;21319:419::-;21485:4;21523:2;21512:9;21508:18;21500:26;;21572:9;21566:4;21562:20;21558:1;21547:9;21543:17;21536:47;21600:131;21726:4;21600:131;:::i;:::-;21592:139;;21319:419;;;:::o

Swarm Source

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