Token Sway Social Protocol

 

Overview ERC-20

Price
$0.00 @ 0.003638 MATIC (+0.85%)
Fully Diluted Market Cap
Total Supply:
100,000,000 SWAY

Holders:
1,194 addresses

Transfers:
-

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

OVERVIEW

Clout.art turns your most valuable Instagram and TikTok posts into unique NFTs. It is a minting micro-service and marketplace for NFTs created from social media content, and a creator economy platform where creators and fans come together through the SWAY token

Market

Volume (24H):$11,182.30
Market Capitalization:$35,828.00
Circulating Supply:11,410,611.00 SWAY
Market Data Source: Coinmarketcap


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

Contract Source Code Verified (Exact Match)

Contract Name:
CloutArtToken

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 5 of 10: ERC20PausableMintable.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;

import "./ERC20.sol";
import "./Pausable.sol";
import "./AccessControl.sol";

contract CloutArtToken is ERC20, Pausable, AccessControl {
    uint256 private constant INITIAL_SUPPLY = 100000000 ether;
    uint256 private constant MINTABLE_SUPPLY = 100000000 ether;
    
    bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");

    bool private _allowNewMinters = true;

    constructor(string memory _name, string memory _symbol, address _admin) ERC20(_name, _symbol) {
        _setupRole(DEFAULT_ADMIN_ROLE, _admin);
        _mint(_admin, INITIAL_SUPPLY);
    }

    function pause() external onlyRole(DEFAULT_ADMIN_ROLE) {
        _pause();
    }

    function unpause() external onlyRole(DEFAULT_ADMIN_ROLE) {
        _unpause();
    }

    function mint(address to, uint256 amount) external whenNotPaused onlyRole(MINTER_ROLE) {
        require(amount <= INITIAL_SUPPLY + MINTABLE_SUPPLY - totalSupply(), "Amount to big");
        _mint(to, amount);
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount)
        internal
        whenNotPaused
        override
    {
        super._beforeTokenTransfer(from, to, amount);
    }

    function disableNewMinters() external onlyRole(DEFAULT_ADMIN_ROLE) {
        _allowNewMinters = false;
    }

    function grantRole(bytes32 role, address account) public virtual override {
        if (role == MINTER_ROLE)
            require(_allowNewMinters, "Granting new minters not allowed!"); 
        AccessControl.grantRole(role, account);
    }

    function revokeRole(bytes32 role, address account) public virtual override {
        if (role == MINTER_ROLE)
            require(_allowNewMinters, "Revoking minters not allowed!"); 
        AccessControl.revokeRole(role, account);
    }
}

File 1 of 10: AccessControl.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Context.sol";
import "./Strings.sol";
import "./ERC165.sol";

/**
 * @dev External interface of AccessControl declared to support ERC165 detection.
 */
interface IAccessControl {
    function hasRole(bytes32 role, address account) external view returns (bool);

    function getRoleAdmin(bytes32 role) external view returns (bytes32);

    function grantRole(bytes32 role, address account) external;

    function revokeRole(bytes32 role, address account) external;

    function renounceRole(bytes32 role, address account) external;
}

/**
 * @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 AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping(address => bool) members;
        bytes32 adminRole;
    }

    mapping(bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    /**
     * @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 {_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 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]{20}) is missing role (0x[0-9a-f]{32})$/
     *
     * _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(IAccessControl).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]{20}) is missing role (0x[0-9a-f]{32})$/
     */
    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(getRoleAdmin(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(getRoleAdmin(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 granted `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}.
     * ====
     */
    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 {
        emit RoleAdminChanged(role, getRoleAdmin(role), adminRole);
        _roles[role].adminRole = adminRole;
    }

    function _grantRole(bytes32 role, address account) private {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    function _revokeRole(bytes32 role, address account) private {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

File 2 of 10: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

File 3 of 10: ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

File 4 of 10: ERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `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 virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

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

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

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

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

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

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

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

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

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

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

File 6 of 10: IERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.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);
}

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

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 8 of 10: IERC20Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC20.sol";

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

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

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

File 9 of 10: Pausable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

File 10 of 10: Strings.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"_admin","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableNewMinters","outputs":[],"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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"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":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526001600760006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b50604051620032723803806200327283398181016040528101906200005291906200059c565b828281600390805190602001906200006c92919062000463565b5080600490805190602001906200008592919062000463565b5050506000600560006101000a81548160ff021916908315150217905550620000b86000801b82620000de60201b60201c565b620000d5816a52b7d2dcc80cd2e4000000620000f460201b60201c565b50505062000940565b620000f082826200026d60201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000167576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200015e90620006db565b60405180910390fd5b6200017b600083836200035f60201b60201c565b80600260008282546200018f919062000792565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620001e6919062000792565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200024d9190620006fd565b60405180910390a36200026960008383620003cf60201b60201c565b5050565b6200027f8282620003d460201b60201c565b6200035b5760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620003006200043f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6200036f6200044760201b60201c565b15620003b2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003a990620006b9565b60405180910390fd5b620003ca8383836200045e60201b62000dab1760201c565b505050565b505050565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b6000600560009054906101000a900460ff16905090565b505050565b828054620004719062000863565b90600052602060002090601f016020900481019282620004955760008555620004e1565b82601f10620004b057805160ff1916838001178555620004e1565b82800160010185558215620004e1579182015b82811115620004e0578251825591602001919060010190620004c3565b5b509050620004f09190620004f4565b5090565b5b808211156200050f576000816000905550600101620004f5565b5090565b60006200052a62000524846200074e565b6200071a565b9050828152602081018484840111156200054357600080fd5b620005508482856200082d565b509392505050565b600081519050620005698162000926565b92915050565b600082601f8301126200058157600080fd5b81516200059384826020860162000513565b91505092915050565b600080600060608486031215620005b257600080fd5b600084015167ffffffffffffffff811115620005cd57600080fd5b620005db868287016200056f565b935050602084015167ffffffffffffffff811115620005f957600080fd5b62000607868287016200056f565b92505060406200061a8682870162000558565b9150509250925092565b60006200063360108362000781565b91507f5061757361626c653a20706175736564000000000000000000000000000000006000830152602082019050919050565b600062000675601f8362000781565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b620006b38162000823565b82525050565b60006020820190508181036000830152620006d48162000624565b9050919050565b60006020820190508181036000830152620006f68162000666565b9050919050565b6000602082019050620007146000830184620006a8565b92915050565b6000604051905081810181811067ffffffffffffffff82111715620007445762000743620008f7565b5b8060405250919050565b600067ffffffffffffffff8211156200076c576200076b620008f7565b5b601f19601f8301169050602081019050919050565b600082825260208201905092915050565b60006200079f8262000823565b9150620007ac8362000823565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620007e457620007e362000899565b5b828201905092915050565b6000620007fc8262000803565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200084d57808201518184015260208101905062000830565b838111156200085d576000848401525b50505050565b600060028204905060018216806200087c57607f821691505b60208210811415620008935762000892620008c8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200093181620007ef565b81146200093d57600080fd5b50565b61292280620009506000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806340c10f19116100c3578063a217fddf1161007c578063a217fddf146103b5578063a457c2d7146103d3578063a9059cbb14610403578063d539139314610433578063d547741f14610451578063dd62ed3e1461046d57610158565b806340c10f19146102f35780635c975abb1461030f57806370a082311461032d5780638456cb591461035d57806391d148541461036757806395d89b411461039757610158565b8063248a9ca311610115578063248a9ca3146102335780632f2ff15d14610263578063313ce5671461027f57806336568abe1461029d57806339509351146102b95780633f4ba83a146102e957610158565b806301ffc9a71461015d57806306fdde031461018d578063095ea7b3146101ab57806318160ddd146101db5780631fd94bc3146101f957806323b872dd14610203575b600080fd5b61017760048036038101906101729190611cc5565b61049d565b604051610184919061238e565b60405180910390f35b610195610517565b6040516101a291906123c4565b60405180910390f35b6101c560048036038101906101c09190611c24565b6105a9565b6040516101d2919061238e565b60405180910390f35b6101e36105c7565b6040516101f091906125c6565b60405180910390f35b6102016105d1565b005b61021d60048036038101906102189190611bd5565b610604565b60405161022a919061238e565b60405180910390f35b61024d60048036038101906102489190611c60565b6106fc565b60405161025a91906123a9565b60405180910390f35b61027d60048036038101906102789190611c89565b61071c565b005b6102876107a2565b60405161029491906125e1565b60405180910390f35b6102b760048036038101906102b29190611c89565b6107ab565b005b6102d360048036038101906102ce9190611c24565b61082e565b6040516102e0919061238e565b60405180910390f35b6102f16108da565b005b61030d60048036038101906103089190611c24565b6108fa565b005b6103176109ee565b604051610324919061238e565b60405180910390f35b61034760048036038101906103429190611b70565b610a05565b60405161035491906125c6565b60405180910390f35b610365610a4d565b005b610381600480360381019061037c9190611c89565b610a6d565b60405161038e919061238e565b60405180910390f35b61039f610ad8565b6040516103ac91906123c4565b60405180910390f35b6103bd610b6a565b6040516103ca91906123a9565b60405180910390f35b6103ed60048036038101906103e89190611c24565b610b71565b6040516103fa919061238e565b60405180910390f35b61041d60048036038101906104189190611c24565b610c5c565b60405161042a919061238e565b60405180910390f35b61043b610c7a565b60405161044891906123a9565b60405180910390f35b61046b60048036038101906104669190611c89565b610c9e565b005b61048760048036038101906104829190611b99565b610d24565b60405161049491906125c6565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610510575061050f82610db0565b5b9050919050565b606060038054610526906127ef565b80601f0160208091040260200160405190810160405280929190818152602001828054610552906127ef565b801561059f5780601f106105745761010080835404028352916020019161059f565b820191906000526020600020905b81548152906001019060200180831161058257829003601f168201915b5050505050905090565b60006105bd6105b6610e1a565b8484610e22565b6001905092915050565b6000600254905090565b6000801b6105e6816105e1610e1a565b610fed565b6000600760006101000a81548160ff02191690831515021790555050565b600061061184848461108a565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061065c610e1a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156106dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d3906124e6565b60405180910390fd5b6106f0856106e8610e1a565b858403610e22565b60019150509392505050565b600060066000838152602001908152602001600020600101549050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a682141561079457600760009054906101000a900460ff16610793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078a906124a6565b60405180910390fd5b5b61079e828261130b565b5050565b60006012905090565b6107b3610e1a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081790612586565b60405180910390fd5b61082a8282611334565b5050565b60006108d061083b610e1a565b848460016000610849610e1a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108cb9190612623565b610e22565b6001905092915050565b6000801b6108ef816108ea610e1a565b610fed565b6108f7611416565b50565b6109026109ee565b15610942576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610939906124c6565b60405180910390fd5b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66109748161096f610e1a565b610fed565b61097c6105c7565b6a52b7d2dcc80cd2e4000000806109939190612623565b61099d91906126d3565b8211156109df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d690612466565b60405180910390fd5b6109e983836114b8565b505050565b6000600560009054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000801b610a6281610a5d610e1a565b610fed565b610a6a611618565b50565b60006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060048054610ae7906127ef565b80601f0160208091040260200160405190810160405280929190818152602001828054610b13906127ef565b8015610b605780601f10610b3557610100808354040283529160200191610b60565b820191906000526020600020905b815481529060010190602001808311610b4357829003601f168201915b5050505050905090565b6000801b81565b60008060016000610b80610e1a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3490612566565b60405180910390fd5b610c51610c48610e1a565b85858403610e22565b600191505092915050565b6000610c70610c69610e1a565b848461108a565b6001905092915050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6821415610d1657600760009054906101000a900460ff16610d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0c90612546565b60405180910390fd5b5b610d2082826116bb565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8990612526565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef990612446565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610fe091906125c6565b60405180910390a3505050565b610ff78282610a6d565b6110865761101c8173ffffffffffffffffffffffffffffffffffffffff1660146116e4565b61102a8360001c60206116e4565b60405160200161103b929190612339565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107d91906123c4565b60405180910390fd5b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f190612506565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561116a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116190612406565b60405180910390fd5b6111758383836119de565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156111fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f290612486565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461128e9190612623565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516112f291906125c6565b60405180910390a3611305848484611a36565b50505050565b611314826106fc565b61132581611320610e1a565b610fed565b61132f8383611a3b565b505050565b61133e8282610a6d565b156114125760006006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506113b7610e1a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b61141e6109ee565b61145d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145490612426565b60405180910390fd5b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6114a1610e1a565b6040516114ae9190612373565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f906125a6565b60405180910390fd5b611534600083836119de565b80600260008282546115469190612623565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461159b9190612623565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161160091906125c6565b60405180910390a361161460008383611a36565b5050565b6116206109ee565b15611660576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611657906124c6565b60405180910390fd5b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116a4610e1a565b6040516116b19190612373565b60405180910390a1565b6116c4826106fc565b6116d5816116d0610e1a565b610fed565b6116df8383611334565b505050565b6060600060028360026116f79190612679565b6117019190612623565b67ffffffffffffffff811115611740577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156117725781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106117d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061185a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261189a9190612679565b6118a49190612623565b90505b6001811115611990577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061190c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110611949577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080611989906127c5565b90506118a7565b50600084146119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb906123e6565b60405180910390fd5b8091505092915050565b6119e66109ee565b15611a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1d906124c6565b60405180910390fd5b611a31838383610dab565b505050565b505050565b611a458282610a6d565b611b185760016006600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611abd610e1a565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600081359050611b2b81612890565b92915050565b600081359050611b40816128a7565b92915050565b600081359050611b55816128be565b92915050565b600081359050611b6a816128d5565b92915050565b600060208284031215611b8257600080fd5b6000611b9084828501611b1c565b91505092915050565b60008060408385031215611bac57600080fd5b6000611bba85828601611b1c565b9250506020611bcb85828601611b1c565b9150509250929050565b600080600060608486031215611bea57600080fd5b6000611bf886828701611b1c565b9350506020611c0986828701611b1c565b9250506040611c1a86828701611b5b565b9150509250925092565b60008060408385031215611c3757600080fd5b6000611c4585828601611b1c565b9250506020611c5685828601611b5b565b9150509250929050565b600060208284031215611c7257600080fd5b6000611c8084828501611b31565b91505092915050565b60008060408385031215611c9c57600080fd5b6000611caa85828601611b31565b9250506020611cbb85828601611b1c565b9150509250929050565b600060208284031215611cd757600080fd5b6000611ce584828501611b46565b91505092915050565b611cf781612707565b82525050565b611d0681612719565b82525050565b611d1581612725565b82525050565b6000611d26826125fc565b611d308185612607565b9350611d40818560208601612792565b611d498161287f565b840191505092915050565b6000611d5f826125fc565b611d698185612618565b9350611d79818560208601612792565b80840191505092915050565b6000611d92602083612607565b91507f537472696e67733a20686578206c656e67746820696e73756666696369656e746000830152602082019050919050565b6000611dd2602383612607565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611e38601483612607565b91507f5061757361626c653a206e6f74207061757365640000000000000000000000006000830152602082019050919050565b6000611e78602283612607565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611ede600d83612607565b91507f416d6f756e7420746f20626967000000000000000000000000000000000000006000830152602082019050919050565b6000611f1e602683612607565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611f84602183612607565b91507f4772616e74696e67206e6577206d696e74657273206e6f7420616c6c6f77656460008301527f21000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611fea601083612607565b91507f5061757361626c653a20706175736564000000000000000000000000000000006000830152602082019050919050565b600061202a602883612607565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612090602583612607565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006120f6602483612607565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061215c601d83612607565b91507f5265766f6b696e67206d696e74657273206e6f7420616c6c6f776564210000006000830152602082019050919050565b600061219c601783612618565b91507f416363657373436f6e74726f6c3a206163636f756e74200000000000000000006000830152601782019050919050565b60006121dc602583612607565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612242601183612618565b91507f206973206d697373696e6720726f6c65200000000000000000000000000000006000830152601182019050919050565b6000612282602f83612607565b91507f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008301527f20726f6c657320666f722073656c6600000000000000000000000000000000006020830152604082019050919050565b60006122e8601f83612607565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b6123248161277b565b82525050565b61233381612785565b82525050565b60006123448261218f565b91506123508285611d54565b915061235b82612235565b91506123678284611d54565b91508190509392505050565b60006020820190506123886000830184611cee565b92915050565b60006020820190506123a36000830184611cfd565b92915050565b60006020820190506123be6000830184611d0c565b92915050565b600060208201905081810360008301526123de8184611d1b565b905092915050565b600060208201905081810360008301526123ff81611d85565b9050919050565b6000602082019050818103600083015261241f81611dc5565b9050919050565b6000602082019050818103600083015261243f81611e2b565b9050919050565b6000602082019050818103600083015261245f81611e6b565b9050919050565b6000602082019050818103600083015261247f81611ed1565b9050919050565b6000602082019050818103600083015261249f81611f11565b9050919050565b600060208201905081810360008301526124bf81611f77565b9050919050565b600060208201905081810360008301526124df81611fdd565b9050919050565b600060208201905081810360008301526124ff8161201d565b9050919050565b6000602082019050818103600083015261251f81612083565b9050919050565b6000602082019050818103600083015261253f816120e9565b9050919050565b6000602082019050818103600083015261255f8161214f565b9050919050565b6000602082019050818103600083015261257f816121cf565b9050919050565b6000602082019050818103600083015261259f81612275565b9050919050565b600060208201905081810360008301526125bf816122db565b9050919050565b60006020820190506125db600083018461231b565b92915050565b60006020820190506125f6600083018461232a565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600061262e8261277b565b91506126398361277b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561266e5761266d612821565b5b828201905092915050565b60006126848261277b565b915061268f8361277b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156126c8576126c7612821565b5b828202905092915050565b60006126de8261277b565b91506126e98361277b565b9250828210156126fc576126fb612821565b5b828203905092915050565b60006127128261275b565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156127b0578082015181840152602081019050612795565b838111156127bf576000848401525b50505050565b60006127d08261277b565b915060008214156127e4576127e3612821565b5b600182039050919050565b6000600282049050600182168061280757607f821691505b6020821081141561281b5761281a612850565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b61289981612707565b81146128a457600080fd5b50565b6128b081612725565b81146128bb57600080fd5b50565b6128c78161272f565b81146128d257600080fd5b50565b6128de8161277b565b81146128e957600080fd5b5056fea26469706673582212205ca9022d5798d1751bcefaed951dd8e8f45ea59bbd1cf5249124ec0a8ade4bbb64736f6c63430008000033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000081fc3bd67c6ce81f52bacbfb84e0148cd4fc64f400000000000000000000000000000000000000000000000000000000000000145377617920536f6369616c2050726f746f636f6c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000045357415900000000000000000000000000000000000000000000000000000000

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000081fc3bd67c6ce81f52bacbfb84e0148cd4fc64f400000000000000000000000000000000000000000000000000000000000000145377617920536f6369616c2050726f746f636f6c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000045357415900000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Sway Social Protocol
Arg [1] : _symbol (string): SWAY
Arg [2] : _admin (address): 0x81fc3bd67c6ce81f52bacbfb84e0148cd4fc64f4

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000081fc3bd67c6ce81f52bacbfb84e0148cd4fc64f4
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [4] : 5377617920536f6369616c2050726f746f636f6c000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 5357415900000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

142:1695:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4040:202:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2053:98:3;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4150:166;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3141:106;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1239:108:4;;;:::i;:::-;;4783:478:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5412:121:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1353:239:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2990:91:3;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6800:214:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5656:212:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;729:84:4;;;:::i;:::-;;819:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1034:84:8;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3305:125:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;643:80:4;;;:::i;:::-;;4329:137:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2264:102:3;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2361:49:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6355:405:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3633:172;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;337:62:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1598:237;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3863:149:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4040:202:0;4125:4;4163:32;4148:47;;;:11;:47;;;;:87;;;;4199:36;4223:11;4199:23;:36::i;:::-;4148:87;4141:94;;4040:202;;;:::o;2053:98:3:-;2107:13;2139:5;2132:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2053:98;:::o;4150:166::-;4233:4;4249:39;4258:12;:10;:12::i;:::-;4272:7;4281:6;4249:8;:39::i;:::-;4305:4;4298:11;;4150:166;;;;:::o;3141:106::-;3202:7;3228:12;;3221:19;;3141:106;:::o;1239:108:4:-;2406:4:0;1286:18:4;;3925:30:0;3936:4;3942:12;:10;:12::i;:::-;3925:10;:30::i;:::-;1335:5:4::1;1316:16;;:24;;;;;;;;;;;;;;;;;;1239:108:::0;:::o;4783:478:3:-;4919:4;4935:36;4945:6;4953:9;4964:6;4935:9;:36::i;:::-;4982:24;5009:11;:19;5021:6;5009:19;;;;;;;;;;;;;;;:33;5029:12;:10;:12::i;:::-;5009:33;;;;;;;;;;;;;;;;4982:60;;5080:6;5060:16;:26;;5052:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;5165:57;5174:6;5182:12;:10;:12::i;:::-;5215:6;5196:16;:25;5165:8;:57::i;:::-;5250:4;5243:11;;;4783:478;;;;;:::o;5412:121:0:-;5478:7;5504:6;:12;5511:4;5504:12;;;;;;;;;;;:22;;;5497:29;;5412:121;;;:::o;1353:239:4:-;375:24;1441:4;:19;1437:99;;;1482:16;;;;;;;;;;;1474:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;1437:99;1547:38;1571:4;1577:7;1547:23;:38::i;:::-;1353:239;;:::o;2990:91:3:-;3048:5;3072:2;3065:9;;2990:91;:::o;6800:214:0:-;6906:12;:10;:12::i;:::-;6895:23;;:7;:23;;;6887:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;6981:26;6993:4;6999:7;6981:11;:26::i;:::-;6800:214;;:::o;5656:212:3:-;5744:4;5760:80;5769:12;:10;:12::i;:::-;5783:7;5829:10;5792:11;:25;5804:12;:10;:12::i;:::-;5792:25;;;;;;;;;;;;;;;:34;5818:7;5792:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;5760:8;:80::i;:::-;5857:4;5850:11;;5656:212;;;;:::o;729:84:4:-;2406:4:0;766:18:4;;3925:30:0;3936:4;3942:12;:10;:12::i;:::-;3925:10;:30::i;:::-;796:10:4::1;:8;:10::i;:::-;729:84:::0;:::o;819:215::-;1348:8:8;:6;:8::i;:::-;1347:9;1339:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;375:24:4::1;3925:30:0;3936:4;3942:12;:10;:12::i;:::-;3925:10;:30::i;:::-;969:13:4::2;:11;:13::i;:::-;311:15;247::::0;934:32:::2;;;;:::i;:::-;:48;;;;:::i;:::-;924:6;:58;;916:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;1010:17;1016:2;1020:6;1010:5;:17::i;:::-;1387:1:8::1;819:215:4::0;;:::o;1034:84:8:-;1081:4;1104:7;;;;;;;;;;;1097:14;;1034:84;:::o;3305:125:3:-;3379:7;3405:9;:18;3415:7;3405:18;;;;;;;;;;;;;;;;3398:25;;3305:125;;;:::o;643:80:4:-;2406:4:0;678:18:4;;3925:30:0;3936:4;3942:12;:10;:12::i;:::-;3925:10;:30::i;:::-;708:8:4::1;:6;:8::i;:::-;643:80:::0;:::o;4329:137:0:-;4407:4;4430:6;:12;4437:4;4430:12;;;;;;;;;;;:20;;:29;4451:7;4430:29;;;;;;;;;;;;;;;;;;;;;;;;;4423:36;;4329:137;;;;:::o;2264:102:3:-;2320:13;2352:7;2345:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2264:102;:::o;2361:49:0:-;2406:4;2361:49;;;:::o;6355:405:3:-;6448:4;6464:24;6491:11;:25;6503:12;:10;:12::i;:::-;6491:25;;;;;;;;;;;;;;;:34;6517:7;6491:34;;;;;;;;;;;;;;;;6464:61;;6563:15;6543:16;:35;;6535:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6654:67;6663:12;:10;:12::i;:::-;6677:7;6705:15;6686:16;:34;6654:8;:67::i;:::-;6749:4;6742:11;;;6355:405;;;;:::o;3633:172::-;3719:4;3735:42;3745:12;:10;:12::i;:::-;3759:9;3770:6;3735:9;:42::i;:::-;3794:4;3787:11;;3633:172;;;;:::o;337:62:4:-;375:24;337:62;:::o;1598:237::-;375:24;1687:4;:19;1683:95;;;1728:16;;;;;;;;;;;1720:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;1683:95;1789:39;1814:4;1820:7;1789:24;:39::i;:::-;1598:237;;:::o;3863:149:3:-;3952:7;3978:11;:18;3990:5;3978:18;;;;;;;;;;;;;;;:27;3997:7;3978:27;;;;;;;;;;;;;;;;3971:34;;3863:149;;;;:::o;10885:121::-;;;;:::o;763:155:2:-;848:4;886:25;871:40;;;:11;:40;;;;864:47;;763:155;;;:::o;586:96:1:-;639:7;665:10;658:17;;586:96;:::o;9931:370:3:-;10079:1;10062:19;;:5;:19;;;;10054:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10159:1;10140:21;;:7;:21;;;;10132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10241:6;10211:11;:18;10223:5;10211:18;;;;;;;;;;;;;;;:27;10230:7;10211:27;;;;;;;;;;;;;;;:36;;;;10278:7;10262:32;;10271:5;10262:32;;;10287:6;10262:32;;;;;;:::i;:::-;;;;;;;;9931:370;;;:::o;4747:484:0:-;4827:22;4835:4;4841:7;4827;:22::i;:::-;4822:403;;5010:41;5038:7;5010:41;;5048:2;5010:19;:41::i;:::-;5122:38;5150:4;5142:13;;5157:2;5122:19;:38::i;:::-;4917:265;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4865:349;;;;;;;;;;;:::i;:::-;;;;;;;;4822:403;4747:484;;:::o;7234:713:3:-;7387:1;7369:20;;:6;:20;;;;7361:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7470:1;7449:23;;:9;:23;;;;7441:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7523:47;7544:6;7552:9;7563:6;7523:20;:47::i;:::-;7581:21;7605:9;:17;7615:6;7605:17;;;;;;;;;;;;;;;;7581:41;;7657:6;7640:13;:23;;7632:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;7776:6;7760:13;:22;7740:9;:17;7750:6;7740:17;;;;;;;;;;;;;;;:42;;;;7826:6;7802:9;:20;7812:9;7802:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;7865:9;7848:35;;7857:6;7848:35;;;7876:6;7848:35;;;;;;:::i;:::-;;;;;;;;7894:46;7914:6;7922:9;7933:6;7894:19;:46::i;:::-;7234:713;;;;:::o;5783:145:0:-;5866:18;5879:4;5866:12;:18::i;:::-;3925:30;3936:4;3942:12;:10;:12::i;:::-;3925:10;:30::i;:::-;5896:25:::1;5907:4;5913:7;5896:10;:25::i;:::-;5783:145:::0;;;:::o;8242:225::-;8316:22;8324:4;8330:7;8316;:22::i;:::-;8312:149;;;8386:5;8354:6;:12;8361:4;8354:12;;;;;;;;;;;:20;;:29;8375:7;8354:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;8437:12;:10;:12::i;:::-;8410:40;;8428:7;8410:40;;8422:4;8410:40;;;;;;;;;;8312:149;8242:225;;:::o;2046:117:8:-;1613:8;:6;:8::i;:::-;1605:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;2114:5:::1;2104:7;;:15;;;;;;;;;;;;;;;;;;2134:22;2143:12;:10;:12::i;:::-;2134:22;;;;;;:::i;:::-;;;;;;;;2046:117::o:0;8223:389:3:-;8325:1;8306:21;;:7;:21;;;;8298:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;8374:49;8403:1;8407:7;8416:6;8374:20;:49::i;:::-;8450:6;8434:12;;:22;;;;;;;:::i;:::-;;;;;;;;8488:6;8466:9;:18;8476:7;8466:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;8530:7;8509:37;;8526:1;8509:37;;;8539:6;8509:37;;;;;;:::i;:::-;;;;;;;;8557:48;8585:1;8589:7;8598:6;8557:19;:48::i;:::-;8223:389;;:::o;1799:115:8:-;1348:8;:6;:8::i;:::-;1347:9;1339:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;1868:4:::1;1858:7;;:14;;;;;;;;;;;;;;;;;;1887:20;1894:12;:10;:12::i;:::-;1887:20;;;;;;:::i;:::-;;;;;;;;1799:115::o:0;6162:147:0:-;6246:18;6259:4;6246:12;:18::i;:::-;3925:30;3936:4;3942:12;:10;:12::i;:::-;3925:10;:30::i;:::-;6276:26:::1;6288:4;6294:7;6276:11;:26::i;:::-;6162:147:::0;;;:::o;1535:441:9:-;1610:13;1635:19;1680:1;1671:6;1667:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;1657:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1635:47;;1692:15;:6;1699:1;1692:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;1717;:6;1724:1;1717:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;1747:9;1772:1;1763:6;1759:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;1747:26;;1742:132;1779:1;1775;:5;1742:132;;;1813:12;1834:3;1826:5;:11;1813:25;;;;;;;;;;;;;;;;;;1801:6;1808:1;1801:9;;;;;;;;;;;;;;;;;;;:37;;;;;;;;;;;1862:1;1852:11;;;;;1782:3;;;;:::i;:::-;;;1742:132;;;;1900:1;1891:5;:10;1883:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;1962:6;1948:21;;;1535:441;;;;:::o;1040:193:4:-;1348:8:8;:6;:8::i;:::-;1347:9;1339:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;1182:44:4::1;1209:4;1215:2;1219:6;1182:26;:44::i;:::-;1040:193:::0;;;:::o;11594:120:3:-;;;;:::o;8012:224:0:-;8086:22;8094:4;8100:7;8086;:22::i;:::-;8081:149;;8156:4;8124:6;:12;8131:4;8124:12;;;;;;;;;;;:20;;:29;8145:7;8124:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;8206:12;:10;:12::i;:::-;8179:40;;8197:7;8179:40;;8191:4;8179:40;;;;;;;;;;8081:149;8012:224;;:::o;7:139:10:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:137::-;;380:6;367:20;358:29;;396:32;422:5;396:32;:::i;:::-;348:86;;;;:::o;440:139::-;;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:262::-;;693:2;681:9;672:7;668:23;664:32;661:2;;;709:1;706;699:12;661:2;752:1;777:53;822:7;813:6;802:9;798:22;777:53;:::i;:::-;767:63;;723:117;651:196;;;;:::o;853:407::-;;;978:2;966:9;957:7;953:23;949:32;946:2;;;994:1;991;984:12;946:2;1037:1;1062:53;1107:7;1098:6;1087:9;1083:22;1062:53;:::i;:::-;1052:63;;1008:117;1164:2;1190:53;1235:7;1226:6;1215:9;1211:22;1190:53;:::i;:::-;1180:63;;1135:118;936:324;;;;;:::o;1266:552::-;;;;1408:2;1396:9;1387:7;1383:23;1379:32;1376:2;;;1424:1;1421;1414:12;1376:2;1467:1;1492:53;1537:7;1528:6;1517:9;1513:22;1492:53;:::i;:::-;1482:63;;1438:117;1594:2;1620:53;1665:7;1656:6;1645:9;1641:22;1620:53;:::i;:::-;1610:63;;1565:118;1722:2;1748:53;1793:7;1784:6;1773:9;1769:22;1748:53;:::i;:::-;1738:63;;1693:118;1366:452;;;;;:::o;1824:407::-;;;1949:2;1937:9;1928:7;1924:23;1920:32;1917:2;;;1965:1;1962;1955:12;1917:2;2008:1;2033:53;2078:7;2069:6;2058:9;2054:22;2033:53;:::i;:::-;2023:63;;1979:117;2135:2;2161:53;2206:7;2197:6;2186:9;2182:22;2161:53;:::i;:::-;2151:63;;2106:118;1907:324;;;;;:::o;2237:262::-;;2345:2;2333:9;2324:7;2320:23;2316:32;2313:2;;;2361:1;2358;2351:12;2313:2;2404:1;2429:53;2474:7;2465:6;2454:9;2450:22;2429:53;:::i;:::-;2419:63;;2375:117;2303:196;;;;:::o;2505:407::-;;;2630:2;2618:9;2609:7;2605:23;2601:32;2598:2;;;2646:1;2643;2636:12;2598:2;2689:1;2714:53;2759:7;2750:6;2739:9;2735:22;2714:53;:::i;:::-;2704:63;;2660:117;2816:2;2842:53;2887:7;2878:6;2867:9;2863:22;2842:53;:::i;:::-;2832:63;;2787:118;2588:324;;;;;:::o;2918:260::-;;3025:2;3013:9;3004:7;3000:23;2996:32;2993:2;;;3041:1;3038;3031:12;2993:2;3084:1;3109:52;3153:7;3144:6;3133:9;3129:22;3109:52;:::i;:::-;3099:62;;3055:116;2983:195;;;;:::o;3184:118::-;3271:24;3289:5;3271:24;:::i;:::-;3266:3;3259:37;3249:53;;:::o;3308:109::-;3389:21;3404:5;3389:21;:::i;:::-;3384:3;3377:34;3367:50;;:::o;3423:118::-;3510:24;3528:5;3510:24;:::i;:::-;3505:3;3498:37;3488:53;;:::o;3547:364::-;;3663:39;3696:5;3663:39;:::i;:::-;3718:71;3782:6;3777:3;3718:71;:::i;:::-;3711:78;;3798:52;3843:6;3838:3;3831:4;3824:5;3820:16;3798:52;:::i;:::-;3875:29;3897:6;3875:29;:::i;:::-;3870:3;3866:39;3859:46;;3639:272;;;;;:::o;3917:377::-;;4051:39;4084:5;4051:39;:::i;:::-;4106:89;4188:6;4183:3;4106:89;:::i;:::-;4099:96;;4204:52;4249:6;4244:3;4237:4;4230:5;4226:16;4204:52;:::i;:::-;4281:6;4276:3;4272:16;4265:23;;4027:267;;;;;:::o;4300:330::-;;4463:67;4527:2;4522:3;4463:67;:::i;:::-;4456:74;;4560:34;4556:1;4551:3;4547:11;4540:55;4621:2;4616:3;4612:12;4605:19;;4446:184;;;:::o;4636:367::-;;4799:67;4863:2;4858:3;4799:67;:::i;:::-;4792:74;;4896:34;4892:1;4887:3;4883:11;4876:55;4962:5;4957:2;4952:3;4948:12;4941:27;4994:2;4989:3;4985:12;4978:19;;4782:221;;;:::o;5009:318::-;;5172:67;5236:2;5231:3;5172:67;:::i;:::-;5165:74;;5269:22;5265:1;5260:3;5256:11;5249:43;5318:2;5313:3;5309:12;5302:19;;5155:172;;;:::o;5333:366::-;;5496:67;5560:2;5555:3;5496:67;:::i;:::-;5489:74;;5593:34;5589:1;5584:3;5580:11;5573:55;5659:4;5654:2;5649:3;5645:12;5638:26;5690:2;5685:3;5681:12;5674:19;;5479:220;;;:::o;5705:311::-;;5868:67;5932:2;5927:3;5868:67;:::i;:::-;5861:74;;5965:15;5961:1;5956:3;5952:11;5945:36;6007:2;6002:3;5998:12;5991:19;;5851:165;;;:::o;6022:370::-;;6185:67;6249:2;6244:3;6185:67;:::i;:::-;6178:74;;6282:34;6278:1;6273:3;6269:11;6262:55;6348:8;6343:2;6338:3;6334:12;6327:30;6383:2;6378:3;6374:12;6367:19;;6168:224;;;:::o;6398:365::-;;6561:67;6625:2;6620:3;6561:67;:::i;:::-;6554:74;;6658:34;6654:1;6649:3;6645:11;6638:55;6724:3;6719:2;6714:3;6710:12;6703:25;6754:2;6749:3;6745:12;6738:19;;6544:219;;;:::o;6769:314::-;;6932:67;6996:2;6991:3;6932:67;:::i;:::-;6925:74;;7029:18;7025:1;7020:3;7016:11;7009:39;7074:2;7069:3;7065:12;7058:19;;6915:168;;;:::o;7089:372::-;;7252:67;7316:2;7311:3;7252:67;:::i;:::-;7245:74;;7349:34;7345:1;7340:3;7336:11;7329:55;7415:10;7410:2;7405:3;7401:12;7394:32;7452:2;7447:3;7443:12;7436:19;;7235:226;;;:::o;7467:369::-;;7630:67;7694:2;7689:3;7630:67;:::i;:::-;7623:74;;7727:34;7723:1;7718:3;7714:11;7707:55;7793:7;7788:2;7783:3;7779:12;7772:29;7827:2;7822:3;7818:12;7811:19;;7613:223;;;:::o;7842:368::-;;8005:67;8069:2;8064:3;8005:67;:::i;:::-;7998:74;;8102:34;8098:1;8093:3;8089:11;8082:55;8168:6;8163:2;8158:3;8154:12;8147:28;8201:2;8196:3;8192:12;8185:19;;7988:222;;;:::o;8216:327::-;;8379:67;8443:2;8438:3;8379:67;:::i;:::-;8372:74;;8476:31;8472:1;8467:3;8463:11;8456:52;8534:2;8529:3;8525:12;8518:19;;8362:181;;;:::o;8549:357::-;;8730:85;8812:2;8807:3;8730:85;:::i;:::-;8723:92;;8845:25;8841:1;8836:3;8832:11;8825:46;8897:2;8892:3;8888:12;8881:19;;8713:193;;;:::o;8912:369::-;;9075:67;9139:2;9134:3;9075:67;:::i;:::-;9068:74;;9172:34;9168:1;9163:3;9159:11;9152:55;9238:7;9233:2;9228:3;9224:12;9217:29;9272:2;9267:3;9263:12;9256:19;;9058:223;;;:::o;9287:351::-;;9468:85;9550:2;9545:3;9468:85;:::i;:::-;9461:92;;9583:19;9579:1;9574:3;9570:11;9563:40;9629:2;9624:3;9620:12;9613:19;;9451:187;;;:::o;9644:379::-;;9807:67;9871:2;9866:3;9807:67;:::i;:::-;9800:74;;9904:34;9900:1;9895:3;9891:11;9884:55;9970:17;9965:2;9960:3;9956:12;9949:39;10014:2;10009:3;10005:12;9998:19;;9790:233;;;:::o;10029:329::-;;10192:67;10256:2;10251:3;10192:67;:::i;:::-;10185:74;;10289:33;10285:1;10280:3;10276:11;10269:54;10349:2;10344:3;10340:12;10333:19;;10175:183;;;:::o;10364:118::-;10451:24;10469:5;10451:24;:::i;:::-;10446:3;10439:37;10429:53;;:::o;10488:112::-;10571:22;10587:5;10571:22;:::i;:::-;10566:3;10559:35;10549:51;;:::o;10606:967::-;;11010:148;11154:3;11010:148;:::i;:::-;11003:155;;11175:95;11266:3;11257:6;11175:95;:::i;:::-;11168:102;;11287:148;11431:3;11287:148;:::i;:::-;11280:155;;11452:95;11543:3;11534:6;11452:95;:::i;:::-;11445:102;;11564:3;11557:10;;10992:581;;;;;:::o;11579:222::-;;11710:2;11699:9;11695:18;11687:26;;11723:71;11791:1;11780:9;11776:17;11767:6;11723:71;:::i;:::-;11677:124;;;;:::o;11807:210::-;;11932:2;11921:9;11917:18;11909:26;;11945:65;12007:1;11996:9;11992:17;11983:6;11945:65;:::i;:::-;11899:118;;;;:::o;12023:222::-;;12154:2;12143:9;12139:18;12131:26;;12167:71;12235:1;12224:9;12220:17;12211:6;12167:71;:::i;:::-;12121:124;;;;:::o;12251:313::-;;12402:2;12391:9;12387:18;12379:26;;12451:9;12445:4;12441:20;12437:1;12426:9;12422:17;12415:47;12479:78;12552:4;12543:6;12479:78;:::i;:::-;12471:86;;12369:195;;;;:::o;12570:419::-;;12774:2;12763:9;12759:18;12751:26;;12823:9;12817:4;12813:20;12809:1;12798:9;12794:17;12787:47;12851:131;12977:4;12851:131;:::i;:::-;12843:139;;12741:248;;;:::o;12995:419::-;;13199:2;13188:9;13184:18;13176:26;;13248:9;13242:4;13238:20;13234:1;13223:9;13219:17;13212:47;13276:131;13402:4;13276:131;:::i;:::-;13268:139;;13166:248;;;:::o;13420:419::-;;13624:2;13613:9;13609:18;13601:26;;13673:9;13667:4;13663:20;13659:1;13648:9;13644:17;13637:47;13701:131;13827:4;13701:131;:::i;:::-;13693:139;;13591:248;;;:::o;13845:419::-;;14049:2;14038:9;14034:18;14026:26;;14098:9;14092:4;14088:20;14084:1;14073:9;14069:17;14062:47;14126:131;14252:4;14126:131;:::i;:::-;14118:139;;14016:248;;;:::o;14270:419::-;;14474:2;14463:9;14459:18;14451:26;;14523:9;14517:4;14513:20;14509:1;14498:9;14494:17;14487:47;14551:131;14677:4;14551:131;:::i;:::-;14543:139;;14441:248;;;:::o;14695:419::-;;14899:2;14888:9;14884:18;14876:26;;14948:9;14942:4;14938:20;14934:1;14923:9;14919:17;14912:47;14976:131;15102:4;14976:131;:::i;:::-;14968:139;;14866:248;;;:::o;15120:419::-;;15324:2;15313:9;15309:18;15301:26;;15373:9;15367:4;15363:20;15359:1;15348:9;15344:17;15337:47;15401:131;15527:4;15401:131;:::i;:::-;15393:139;;15291:248;;;:::o;15545:419::-;;15749:2;15738:9;15734:18;15726:26;;15798:9;15792:4;15788:20;15784:1;15773:9;15769:17;15762:47;15826:131;15952:4;15826:131;:::i;:::-;15818:139;;15716:248;;;:::o;15970:419::-;;16174:2;16163:9;16159:18;16151:26;;16223:9;16217:4;16213:20;16209:1;16198:9;16194:17;16187:47;16251:131;16377:4;16251:131;:::i;:::-;16243:139;;16141:248;;;:::o;16395:419::-;;16599:2;16588:9;16584:18;16576:26;;16648:9;16642:4;16638:20;16634:1;16623:9;16619:17;16612:47;16676:131;16802:4;16676:131;:::i;:::-;16668:139;;16566:248;;;:::o;16820:419::-;;17024:2;17013:9;17009:18;17001:26;;17073:9;17067:4;17063:20;17059:1;17048:9;17044:17;17037:47;17101:131;17227:4;17101:131;:::i;:::-;17093:139;;16991:248;;;:::o;17245:419::-;;17449:2;17438:9;17434:18;17426:26;;17498:9;17492:4;17488:20;17484:1;17473:9;17469:17;17462:47;17526:131;17652:4;17526:131;:::i;:::-;17518:139;;17416:248;;;:::o;17670:419::-;;17874:2;17863:9;17859:18;17851:26;;17923:9;17917:4;17913:20;17909:1;17898:9;17894:17;17887:47;17951:131;18077:4;17951:131;:::i;:::-;17943:139;;17841:248;;;:::o;18095:419::-;;18299:2;18288:9;18284:18;18276:26;;18348:9;18342:4;18338:20;18334:1;18323:9;18319:17;18312:47;18376:131;18502:4;18376:131;:::i;:::-;18368:139;;18266:248;;;:::o;18520:419::-;;18724:2;18713:9;18709:18;18701:26;;18773:9;18767:4;18763:20;18759:1;18748:9;18744:17;18737:47;18801:131;18927:4;18801:131;:::i;:::-;18793:139;;18691:248;;;:::o;18945:222::-;;19076:2;19065:9;19061:18;19053:26;;19089:71;19157:1;19146:9;19142:17;19133:6;19089:71;:::i;:::-;19043:124;;;;:::o;19173:214::-;;19300:2;19289:9;19285:18;19277:26;;19313:67;19377:1;19366:9;19362:17;19353:6;19313:67;:::i;:::-;19267:120;;;;:::o;19393:99::-;;19479:5;19473:12;19463:22;;19452:40;;;:::o;19498:169::-;;19616:6;19611:3;19604:19;19656:4;19651:3;19647:14;19632:29;;19594:73;;;;:::o;19673:148::-;;19812:3;19797:18;;19787:34;;;;:::o;19827:305::-;;19886:20;19904:1;19886:20;:::i;:::-;19881:25;;19920:20;19938:1;19920:20;:::i;:::-;19915:25;;20074:1;20006:66;20002:74;19999:1;19996:81;19993:2;;;20080:18;;:::i;:::-;19993:2;20124:1;20121;20117:9;20110:16;;19871:261;;;;:::o;20138:348::-;;20201:20;20219:1;20201:20;:::i;:::-;20196:25;;20235:20;20253:1;20235:20;:::i;:::-;20230:25;;20423:1;20355:66;20351:74;20348:1;20345:81;20340:1;20333:9;20326:17;20322:105;20319:2;;;20430:18;;:::i;:::-;20319:2;20478:1;20475;20471:9;20460:20;;20186:300;;;;:::o;20492:191::-;;20552:20;20570:1;20552:20;:::i;:::-;20547:25;;20586:20;20604:1;20586:20;:::i;:::-;20581:25;;20625:1;20622;20619:8;20616:2;;;20630:18;;:::i;:::-;20616:2;20675:1;20672;20668:9;20660:17;;20537:146;;;;:::o;20689:96::-;;20755:24;20773:5;20755:24;:::i;:::-;20744:35;;20734:51;;;:::o;20791:90::-;;20868:5;20861:13;20854:21;20843:32;;20833:48;;;:::o;20887:77::-;;20953:5;20942:16;;20932:32;;;:::o;20970:149::-;;21046:66;21039:5;21035:78;21024:89;;21014:105;;;:::o;21125:126::-;;21202:42;21195:5;21191:54;21180:65;;21170:81;;;:::o;21257:77::-;;21323:5;21312:16;;21302:32;;;:::o;21340:86::-;;21415:4;21408:5;21404:16;21393:27;;21383:43;;;:::o;21432:307::-;21500:1;21510:113;21524:6;21521:1;21518:13;21510:113;;;21609:1;21604:3;21600:11;21594:18;21590:1;21585:3;21581:11;21574:39;21546:2;21543:1;21539:10;21534:15;;21510:113;;;21641:6;21638:1;21635:13;21632:2;;;21721:1;21712:6;21707:3;21703:16;21696:27;21632:2;21481:258;;;;:::o;21745:171::-;;21807:24;21825:5;21807:24;:::i;:::-;21798:33;;21853:4;21846:5;21843:15;21840:2;;;21861:18;;:::i;:::-;21840:2;21908:1;21901:5;21897:13;21890:20;;21788:128;;;:::o;21922:320::-;;22003:1;21997:4;21993:12;21983:22;;22050:1;22044:4;22040:12;22071:18;22061:2;;22127:4;22119:6;22115:17;22105:27;;22061:2;22189;22181:6;22178:14;22158:18;22155:38;22152:2;;;22208:18;;:::i;:::-;22152:2;21973:269;;;;:::o;22248:180::-;22296:77;22293:1;22286:88;22393:4;22390:1;22383:15;22417:4;22414:1;22407:15;22434:180;22482:77;22479:1;22472:88;22579:4;22576:1;22569:15;22603:4;22600:1;22593:15;22620:102;;22712:2;22708:7;22703:2;22696:5;22692:14;22688:28;22678:38;;22668:54;;;:::o;22728:122::-;22801:24;22819:5;22801:24;:::i;:::-;22794:5;22791:35;22781:2;;22840:1;22837;22830:12;22781:2;22771:79;:::o;22856:122::-;22929:24;22947:5;22929:24;:::i;:::-;22922:5;22919:35;22909:2;;22968:1;22965;22958:12;22909:2;22899:79;:::o;22984:120::-;23056:23;23073:5;23056:23;:::i;:::-;23049:5;23046:34;23036:2;;23094:1;23091;23084:12;23036:2;23026:78;:::o;23110:122::-;23183:24;23201:5;23183:24;:::i;:::-;23176:5;23173:35;23163:2;;23222:1;23219;23212:12;23163:2;23153:79;:::o

Swarm Source

ipfs://5ca9022d5798d1751bcefaed951dd8e8f45ea59bbd1cf5249124ec0a8ade4bbb
Loading