def METHOD_NAME(params: cst.Parameters, *, is_overload: bool) -> cst.Parameters:
    """Remove all of the existing permissions from the kwargs of the provided cst.Parameters."""
    for param in params.params:
        if m.matches(param, PERMISSION_MATCHERS):
            raise RuntimeError(
                f"an existing permission '{param.name.value}' is defined as a "
                "non-keyword argument in a permission overloaded method."
            )
    # unlike params, these may contain generated objects
    # we only have to do this for overloads, as we only change overloads directly
    def is_not_permission(p: cst.Param) -> bool:
        return not m.matches(p.name, PERMISSION_MATCHERS)
    # n.b. this has a small implementation detail that if the first permission in ALL_PERMISSIONS
    # changed or was renamed, then this *may not* remove all permissions from the overloads.
    # this is only true when is_overload is true, but it is unlikely the first permission will change much
    # as such, this is fine for our usecase, IMO.
    if is_overload:
        filter_func = itertools.takewhile
    else:
        filter_func = filter
    existing_kwonly_params = list(
        filter_func(
            is_not_permission,
            params.kwonly_params,
        )
    )
    star_arg = params.star_arg if existing_kwonly_params else cst.MaybeSentinel.DEFAULT
    return params.with_changes(
        kwonly_params=existing_kwonly_params,
        star_arg=star_arg,
    )