docs: def MultiOpen(self,
                  urns,
                  mode="rw",
                  token=None,
                  aff4_type=None,
                  age=NEWEST_TIME,
                  follow_symlinks=True):
      """Opens a bunch of urns efficiently."""
  
      if not data_store.AFF4Enabled():
        raise NotImplementedError("AFF4 data store has been disabled.")
  
      if token is None:
        token = data_store.default_token
  
      if mode not in ["w", "r", "rw"]:
        raise ValueError("Invalid mode %s" % mode)
  
      symlinks = {}
  
      _ValidateAFF4Type(aff4_type)
  
      for urn, values in self.GetAttributes(urns, age=age):
        try:
          obj = self.Open(
              urn,
              mode=mode,
              token=token,
              local_cache={urn: values},
              age=age,
              follow_symlinks=False)
          # We can't pass aff4_type to Open since it will raise on AFF4Symlinks.
          # Setting it here, if needed, so that BadGetAttributeError checking
          # works.
          if aff4_type:
            obj.aff4_type = aff4_type
  
          if follow_symlinks and isinstance(obj, AFF4Symlink):
            target = obj.Get(obj.Schema.SYMLINK_TARGET)
            if target is not None:
              symlinks.setdefault(target, []).append(obj.urn)
          elif aff4_type:
            if isinstance(obj, aff4_type):
              yield obj
          else:
            yield obj
        except IOError:
          pass
  
      if symlinks:
        for obj in self.MultiOpen(
            symlinks, mode=mode, token=token, aff4_type=aff4_type, age=age):
          to_link = symlinks[obj.urn]
          for additional_symlink in to_link[1:]:
            clone = obj.__class__(obj.urn, clone=obj)
            clone.symlink_urn = additional_symlink
            yield clone
  
          obj.symlink_urn = symlinks[obj.urn][0]
          yield obj