abstract contract AdminRole is Context {
    using Roles for Roles.Role;

    event AdminAdded(address indexed account);
    event AdminRemoved(address indexed account);

    Roles.Role private _admins;

    constructor () {

    }

    /**
     * @dev Makes function callable only if sender is an admin.
     */
    modifier onlyAdmin() {
        require(isAdmin(_msgSender()), "AdminRole: caller does not have the Admin role");
        _;
    }

    /**
     * @dev Checks if the address is an admin.
     */
    function isAdmin(address account) public view returns (bool) {
        return _admins.has(account);
    }

    function _addAdmin(address account) internal {
        _admins.add(account);
        emit AdminAdded(account);
    }

    function _removeAdmin(address account) internal {
        _admins.remove(account);
        emit AdminRemoved(account);
    }
}
/**
 * @title AdminRole
 * @dev An operator role contract.
 */
function isAdmin(address account) public view returns (bool) {
    return _admins.has(account);
}

/**
 * @dev Checks if the address is an admin.
 */