Loads container of elements from the reader. Supports the container ref.
        Returns loaded container.

        :param reader:
        :param container_type:
        :param params:
        :param container:
        :return:

async def _load_container(
            self, reader, container_type, params=None, container=None
    ):
        """
        Loads container of elements from the reader. Supports the container ref.
        Returns loaded container.

        :param reader:
        :param container_type:
        :param params:
        :param container:
        :return:
        """

        c_len = (
            container_type.SIZE
            if container_type.FIX_SIZE
            else await load_uvarint(reader)
        )
        if container and get_elem(container) and c_len != len(container):
            raise ValueError("Size mismatch")

        elem_type = container_elem_type(container_type, params)
        res = container if container else []
        for i in range(c_len):
            try:
                self.tracker.push_index(i)
                fvalue = await self.load_field(
                    reader,
                    elem_type,
                    params[1:] if params else None,
                    eref(res, i) if container else None,
                )
                self.tracker.pop()
            except Exception as e:
                raise helpers.ArchiveException(e, tracker=self.tracker) from e

            if not container:
                res.append(fvalue)
        return res