docs: function (ioRes) {
              var ariaCoreDownloadMgr = require("./DownloadMgr");
              var multipart;
              // store file in cache
              var downloadFailed = (ioRes.status != '200');
              this.$assert(79, this._logicalPaths.length > 0);
  
              if (!downloadFailed) {
                  this._urlItm.status = ariaCoreCache.STATUS_AVAILABLE;
  
                  // check if the file received is multipart
                  multipart = this._multiPartHeader.exec(ioRes.responseText);
                  if (multipart != null) {
                      var savedLastLoadedFiles = ariaCoreDownloadMgr.lastLoadedFiles;
                      var lpReceived = ariaCoreDownloadMgr.lastLoadedFiles = {}; // hash table to know which logical
                      // paths were received
                      var logicalpath; // current logical path
                      if (multipart[2].charAt(0) == "a") {
                          // ioRes.responseText is expected to contain a set of calls to
                          // aria.core.DownloadMgr.loadFileContent, we simply evaluate it
                          try {
                              Aria["eval"](ioRes.responseText, ioRes.url);
                          } catch (e) {
                              this.$logError(this.ERROR_EVAL_PACKAGE, [ioRes.url], e);
                          }
                      } else {
                          // it is multipart, we split it; separator is multipart[3]
                          var parts = ioRes.responseText.split(multipart[3]), partsLength = parts.length;
                          for (var i = 1; i < partsLength; i += 2) {
                              logicalpath = this._logicalPathHeader.exec(parts[i]);
                              if (logicalpath != null) {
                                  logicalpath = logicalpath[1];
                              }
                              var content = parts[i + 1];
                              if (logicalpath == null || content == null) {
                                  this.$logError(this.INVALID_MULTIPART, [ioRes.url, (i + 1) / 2]);
                                  continue;
                              }
                              ariaCoreDownloadMgr.loadFileContent(logicalpath, content, content == null);
                          }
                      }
                      ariaCoreDownloadMgr.lastLoadedFiles = savedLastLoadedFiles;
                      var nbFilesMissing = 0;
                      // check that all expected logical paths were returned, or otherwise report an error for that
                      // logical path:
                      for (var i = 0; i < this._logicalPaths.length; i++) {
                          logicalpath = this._logicalPaths[i];
                          if (lpReceived[logicalpath] != 1) {
                              this.$logError(this.LPNOTFOUND_MULTIPART, [logicalpath, ioRes.url]);
                              ariaCoreDownloadMgr.loadFileContent(logicalpath, null, true);
                              nbFilesMissing++;
                          }
                      }
                      if (nbFilesMissing == this._logicalPaths.length) {
                          downloadFailed = true;
                      }
                  } else {
                      // we did not receive a multipart, we should have only one logical path
                      if (this._logicalPaths.length == 1) {
                          ariaCoreDownloadMgr.loadFileContent(this._logicalPaths[0], ioRes.responseText, false);
                      } else {
                          this.$logError(this.EXPECTED_MULTIPART, ioRes.url);
                          downloadFailed = true;
                      }
                  }
              }
  
              if (downloadFailed && multipart == null) {
                  // if an error occurred, and we have not yet done it,
                  // we put the error in the cache for every expected logical path
                  for (var i = 0; i < this._logicalPaths.length; i++) {
                      ariaCoreDownloadMgr.loadFileContent(this._logicalPaths[i], ioRes.responseText, true);
                  }
              }
  
              // notify listeners
              this.$raiseEvent({
                  name : "fileReady",
                  logicalPaths : this._logicalPaths,
                  url : this._url,
                  downloadFailed : downloadFailed
              });
  
              this._isProcessing = false;
  
              // send complete (ready for dispose)
              this.$raiseEvent({
                  name : "complete"
              });
          }