from typing import List


def remove_characters_at_indices(text: str, indices: List[int]) -> str:
    """
    Removes characters present at the given `indices` in the `text`.
    Expects `indices` to be in range (0, n-1) where n is the length of the `text`.
    Raises an IndexError if any of the given `indices` are out of bounds.
    """
    if not indices:
        return text
    indices = sorted(list(set(indices)), reverse=True)
    lowest_possible_index, highest_possible_index = 0, len(text) - 1 # Must not use negative indices
    if indices[-1] < lowest_possible_index or indices[0] > highest_possible_index:
        raise IndexError(
            f"Accepted index-range for the given text is ({lowest_possible_index}, {highest_possible_index})."
            " Cannot remove character at an index outside of this range."
        )
    list_of_chars = list(text)
    for index in indices:
        list_of_chars.pop(index)
    return "".join(list_of_chars)