Backed out changeset fd24042d3bfa (bug 1488420) for bc failures on browser_pdfjs_zoom.js. CLOSED TREE
authorNarcis Beleuzu <nbeleuzu@mozilla.com>
Tue, 04 Sep 2018 18:34:18 +0300
changeset 434594 d8cc54d235c9ed041d3f08ade06f7ac357c90c97
parent 434593 7ffb06278c4c572512637d38b394ca6e2b6ddb85
child 434595 765f2d8c3340643b55647c5e4918554a27942906
push id107438
push usernbeleuzu@mozilla.com
push dateTue, 04 Sep 2018 15:34:41 +0000
treeherdermozilla-inbound@d8cc54d235c9 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs1488420
milestone63.0a1
backs outfd24042d3bfa728d0a663f9aa40ebe93cd57c17c
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Backed out changeset fd24042d3bfa (bug 1488420) for bc failures on browser_pdfjs_zoom.js. CLOSED TREE
browser/extensions/pdfjs/README.mozilla
browser/extensions/pdfjs/content/PdfJsDefaultPreferences.jsm
browser/extensions/pdfjs/content/build/pdf.js
browser/extensions/pdfjs/content/build/pdf.worker.js
browser/extensions/pdfjs/content/web/viewer.js
browser/extensions/pdfjs/moz.yaml
--- a/browser/extensions/pdfjs/README.mozilla
+++ b/browser/extensions/pdfjs/README.mozilla
@@ -1,5 +1,5 @@
 This is the PDF.js project output, https://github.com/mozilla/pdf.js
 
-Current extension version is: 2.0.813
+Current extension version is: 2.0.775
 
-Taken from upstream commit: af89ec27
+Taken from upstream commit: 20cd1b35
--- a/browser/extensions/pdfjs/content/PdfJsDefaultPreferences.jsm
+++ b/browser/extensions/pdfjs/content/PdfJsDefaultPreferences.jsm
@@ -1,46 +1,43 @@
-/* Copyright 2018 Mozilla Foundation
+/* Copyright 2017 Mozilla Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
  *     http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
-/* eslint-disable */
-
 //
-// THIS FILE IS GENERATED AUTOMATICALLY, DO NOT EDIT MANUALLY!
+// THIS FILE IS AUTOMATICALLY GENERATED, DO NOT EDIT MANUALLY!
 //
 
 "use strict";
 var EXPORTED_SYMBOLS = ["PdfJsDefaultPreferences"];
 var PdfJsDefaultPreferences = Object.freeze({
  "showPreviousViewOnLoad": true,
  "defaultZoomValue": "",
  "sidebarViewOnLoad": 0,
  "cursorToolOnLoad": 0,
  "enableWebGL": false,
- "eventBusDispatchToDOM": false,
  "pdfBugEnabled": false,
  "disableRange": false,
  "disableStream": false,
  "disableAutoFetch": false,
  "disableFontFace": false,
  "textLayerMode": 1,
  "useOnlyCssZoom": false,
  "externalLinkTarget": 0,
  "renderer": "canvas",
  "renderInteractiveForms": false,
  "enablePrintAutoRotate": false,
  "disablePageMode": false,
  "disablePageLabels": false,
  "scrollModeOnLoad": 0,
- "spreadModeOnLoad": 0
+ "spreadModeOnLoad": 0,
 });
--- a/browser/extensions/pdfjs/content/build/pdf.js
+++ b/browser/extensions/pdfjs/content/build/pdf.js
@@ -1,13 +1,13 @@
 /**
  * @licstart The following is the entire license notice for the
  * Javascript code in this page
  *
- * Copyright 2018 Mozilla Foundation
+ * Copyright 2017 Mozilla Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
  *     http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
@@ -118,18 +118,18 @@ return /******/ (function(modules) { // 
 /************************************************************************/
 /******/ ([
 /* 0 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
 
 
-var pdfjsVersion = '2.0.813';
-var pdfjsBuild = 'af89ec27';
+var pdfjsVersion = '2.0.775';
+var pdfjsBuild = '20cd1b35';
 var pdfjsSharedUtil = __w_pdfjs_require__(1);
 var pdfjsDisplayAPI = __w_pdfjs_require__(7);
 var pdfjsDisplayTextLayer = __w_pdfjs_require__(19);
 var pdfjsDisplayAnnotationLayer = __w_pdfjs_require__(20);
 var pdfjsDisplayDOMUtils = __w_pdfjs_require__(8);
 var pdfjsDisplaySVG = __w_pdfjs_require__(21);
 let pdfjsDisplayWorkerOptions = __w_pdfjs_require__(13);
 let pdfjsDisplayAPICompatibility = __w_pdfjs_require__(10);
@@ -172,40 +172,30 @@ exports.apiCompatibilityParams = pdfjsDi
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
 
 
 Object.defineProperty(exports, "__esModule", {
   value: true
 });
-exports.unreachable = exports.warn = exports.utf8StringToString = exports.stringToUTF8String = exports.stringToPDFString = exports.stringToBytes = exports.string32 = exports.shadow = exports.setVerbosityLevel = exports.URL = exports.ReadableStream = exports.removeNullCharacters = exports.readUint32 = exports.readUint16 = exports.readInt8 = exports.log2 = exports.isEvalSupported = exports.isLittleEndian = exports.createValidAbsoluteUrl = exports.isSameOrigin = exports.isSpace = exports.isString = exports.isNum = exports.isEmptyObj = exports.isBool = exports.isArrayBuffer = exports.info = exports.getVerbosityLevel = exports.getLookupTableFactory = exports.getInheritableProperty = exports.deprecated = exports.createObjectURL = exports.createPromiseCapability = exports.bytesToString = exports.assert = exports.arraysToBytes = exports.arrayByteLength = exports.FormatError = exports.XRefParseException = exports.toRomanNumerals = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.NativeImageDecoding = exports.MissingPDFException = exports.MissingDataException = exports.InvalidPDFException = exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = exports.AnnotationType = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = undefined;
+exports.unreachable = exports.warn = exports.utf8StringToString = exports.stringToUTF8String = exports.stringToPDFString = exports.stringToBytes = exports.string32 = exports.shadow = exports.setVerbosityLevel = exports.URL = exports.ReadableStream = exports.removeNullCharacters = exports.readUint32 = exports.readUint16 = exports.readInt8 = exports.log2 = exports.isEvalSupported = exports.isLittleEndian = exports.createValidAbsoluteUrl = exports.isSameOrigin = exports.isSpace = exports.isString = exports.isNum = exports.isEmptyObj = exports.isBool = exports.isArrayBuffer = exports.info = exports.getVerbosityLevel = exports.getLookupTableFactory = exports.getInheritableProperty = exports.deprecated = exports.createObjectURL = exports.createPromiseCapability = exports.bytesToString = exports.assert = exports.arraysToBytes = exports.arrayByteLength = exports.FormatError = exports.XRefParseException = exports.toRomanNumerals = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PasswordResponses = exports.PasswordException = exports.NativeImageDecoding = exports.MissingPDFException = exports.MissingDataException = exports.InvalidPDFException = exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = exports.AnnotationType = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = undefined;
 
 __w_pdfjs_require__(2);
 
 var _streams_polyfill = __w_pdfjs_require__(4);
 
 var _url_polyfill = __w_pdfjs_require__(6);
 
 var FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];
 const NativeImageDecoding = {
   NONE: 'none',
   DECODE: 'decode',
   DISPLAY: 'display'
 };
-const PermissionFlag = {
-  PRINT: 0x04,
-  MODIFY_CONTENTS: 0x08,
-  COPY: 0x10,
-  MODIFY_ANNOTATIONS: 0x20,
-  FILL_INTERACTIVE_FORMS: 0x100,
-  COPY_FOR_ACCESSIBILITY: 0x200,
-  ASSEMBLE: 0x400,
-  PRINT_HIGH_QUALITY: 0x800
-};
 var TextRenderingMode = {
   FILL: 0,
   STROKE: 1,
   FILL_STROKE: 2,
   INVISIBLE: 3,
   FILL_ADD_TO_PATH: 4,
   STROKE_ADD_TO_PATH: 5,
   FILL_STROKE_ADD_TO_PATH: 6,
@@ -918,17 +908,16 @@ exports.ImageKind = ImageKind;
 exports.CMapCompressionType = CMapCompressionType;
 exports.AbortException = AbortException;
 exports.InvalidPDFException = InvalidPDFException;
 exports.MissingDataException = MissingDataException;
 exports.MissingPDFException = MissingPDFException;
 exports.NativeImageDecoding = NativeImageDecoding;
 exports.PasswordException = PasswordException;
 exports.PasswordResponses = PasswordResponses;
-exports.PermissionFlag = PermissionFlag;
 exports.StreamType = StreamType;
 exports.TextRenderingMode = TextRenderingMode;
 exports.UnexpectedResponseException = UnexpectedResponseException;
 exports.UnknownErrorException = UnknownErrorException;
 exports.Util = Util;
 exports.toRomanNumerals = toRomanNumerals;
 exports.XRefParseException = XRefParseException;
 exports.FormatError = FormatError;
@@ -4221,17 +4210,17 @@ function _fetchDocument(worker, source, 
     return Promise.reject(new Error('Worker was destroyed'));
   }
   if (pdfDataRangeTransport) {
     source.length = pdfDataRangeTransport.length;
     source.initialData = pdfDataRangeTransport.initialData;
   }
   return worker.messageHandler.sendWithPromise('GetDocRequest', {
     docId,
-    apiVersion: '2.0.813',
+    apiVersion: '2.0.775',
     source: {
       data: source.data,
       url: source.url,
       password: source.password,
       disableAutoFetch: source.disableAutoFetch,
       rangeChunkSize: source.rangeChunkSize,
       length: source.length
     },
@@ -4329,80 +4318,80 @@ var PDFDataRangeTransport = function pdf
     },
     requestDataRange: function PDFDataRangeTransport_requestDataRange(begin, end) {
       (0, _util.unreachable)('Abstract method PDFDataRangeTransport.requestDataRange');
     },
     abort: function PDFDataRangeTransport_abort() {}
   };
   return PDFDataRangeTransport;
 }();
-class PDFDocumentProxy {
-  constructor(pdfInfo, transport, loadingTask) {
-    this.loadingTask = loadingTask;
+var PDFDocumentProxy = function PDFDocumentProxyClosure() {
+  function PDFDocumentProxy(pdfInfo, transport, loadingTask) {
     this._pdfInfo = pdfInfo;
-    this._transport = transport;
-  }
-  get numPages() {
-    return this._pdfInfo.numPages;
-  }
-  get fingerprint() {
-    return this._pdfInfo.fingerprint;
-  }
-  getPage(pageNumber) {
-    return this._transport.getPage(pageNumber);
-  }
-  getPageIndex(ref) {
-    return this._transport.getPageIndex(ref);
-  }
-  getDestinations() {
-    return this._transport.getDestinations();
-  }
-  getDestination(id) {
-    return this._transport.getDestination(id);
-  }
-  getPageLabels() {
-    return this._transport.getPageLabels();
-  }
-  getPageMode() {
-    return this._transport.getPageMode();
-  }
-  getAttachments() {
-    return this._transport.getAttachments();
-  }
-  getJavaScript() {
-    return this._transport.getJavaScript();
-  }
-  getOutline() {
-    return this._transport.getOutline();
-  }
-  getPermissions() {
-    return this._transport.getPermissions();
-  }
-  getMetadata() {
-    return this._transport.getMetadata();
-  }
-  getData() {
-    return this._transport.getData();
-  }
-  getDownloadInfo() {
-    return this._transport.downloadInfoCapability.promise;
-  }
-  getStats() {
-    return this._transport.getStats();
-  }
-  cleanup() {
-    this._transport.startCleanup();
-  }
-  destroy() {
-    return this.loadingTask.destroy();
-  }
-  get loadingParams() {
-    return this._transport.loadingParams;
-  }
-}
+    this.transport = transport;
+    this.loadingTask = loadingTask;
+  }
+  PDFDocumentProxy.prototype = {
+    get numPages() {
+      return this._pdfInfo.numPages;
+    },
+    get fingerprint() {
+      return this._pdfInfo.fingerprint;
+    },
+    getPage(pageNumber) {
+      return this.transport.getPage(pageNumber);
+    },
+    getPageIndex: function PDFDocumentProxy_getPageIndex(ref) {
+      return this.transport.getPageIndex(ref);
+    },
+    getDestinations: function PDFDocumentProxy_getDestinations() {
+      return this.transport.getDestinations();
+    },
+    getDestination: function PDFDocumentProxy_getDestination(id) {
+      return this.transport.getDestination(id);
+    },
+    getPageLabels: function PDFDocumentProxy_getPageLabels() {
+      return this.transport.getPageLabels();
+    },
+    getPageMode() {
+      return this.transport.getPageMode();
+    },
+    getAttachments: function PDFDocumentProxy_getAttachments() {
+      return this.transport.getAttachments();
+    },
+    getJavaScript() {
+      return this.transport.getJavaScript();
+    },
+    getOutline: function PDFDocumentProxy_getOutline() {
+      return this.transport.getOutline();
+    },
+    getMetadata: function PDFDocumentProxy_getMetadata() {
+      return this.transport.getMetadata();
+    },
+    getData: function PDFDocumentProxy_getData() {
+      return this.transport.getData();
+    },
+    getDownloadInfo: function PDFDocumentProxy_getDownloadInfo() {
+      return this.transport.downloadInfoCapability.promise;
+    },
+    getStats: function PDFDocumentProxy_getStats() {
+      return this.transport.getStats();
+    },
+    cleanup: function PDFDocumentProxy_cleanup() {
+      this.transport.startCleanup();
+    },
+    destroy: function PDFDocumentProxy_destroy() {
+      return this.loadingTask.destroy();
+    },
+    get loadingParams() {
+      return this.transport.loadingParams;
+    }
+  };
+  return PDFDocumentProxy;
+}();
 var PDFPageProxy = function PDFPageProxyClosure() {
   function PDFPageProxy(pageIndex, pageInfo, transport, pdfBug = false) {
     this.pageIndex = pageIndex;
     this._pageInfo = pageInfo;
     this.transport = transport;
     this._stats = pdfBug ? new _dom_utils.StatTimer() : _dom_utils.DummyStatTimer;
     this._pdfBug = pdfBug;
     this.commonObjs = transport.commonObjs;
@@ -4906,18 +4895,18 @@ var PDFWorker = function PDFWorkerClosur
     }
     return new PDFWorker(params);
   };
   PDFWorker.getWorkerSrc = function () {
     return getWorkerSrc();
   };
   return PDFWorker;
 }();
-class WorkerTransport {
-  constructor(messageHandler, loadingTask, networkStream, params) {
+var WorkerTransport = function WorkerTransportClosure() {
+  function WorkerTransport(messageHandler, loadingTask, networkStream, params) {
     this.messageHandler = messageHandler;
     this.loadingTask = loadingTask;
     this.commonObjs = new PDFObjects();
     this.fontLoader = new _font_loader.FontLoader(loadingTask.docId);
     this._params = params;
     this.CMapReaderFactory = new params.CMapReaderFactory({
       baseUrl: params.cMapUrl,
       isCompressed: params.cMapPacked
@@ -4928,440 +4917,456 @@ class WorkerTransport {
     this._networkStream = networkStream;
     this._fullReader = null;
     this._lastProgress = null;
     this.pageCache = [];
     this.pagePromises = [];
     this.downloadInfoCapability = (0, _util.createPromiseCapability)();
     this.setupMessageHandler();
   }
-  destroy() {
-    if (this.destroyCapability) {
+  WorkerTransport.prototype = {
+    destroy: function WorkerTransport_destroy() {
+      if (this.destroyCapability) {
+        return this.destroyCapability.promise;
+      }
+      this.destroyed = true;
+      this.destroyCapability = (0, _util.createPromiseCapability)();
+      if (this._passwordCapability) {
+        this._passwordCapability.reject(new Error('Worker was destroyed during onPassword callback'));
+      }
+      var waitOn = [];
+      this.pageCache.forEach(function (page) {
+        if (page) {
+          waitOn.push(page._destroy());
+        }
+      });
+      this.pageCache = [];
+      this.pagePromises = [];
+      var terminated = this.messageHandler.sendWithPromise('Terminate', null);
+      waitOn.push(terminated);
+      Promise.all(waitOn).then(() => {
+        this.fontLoader.clear();
+        if (this._networkStream) {
+          this._networkStream.cancelAllRequests();
+        }
+        if (this.messageHandler) {
+          this.messageHandler.destroy();
+          this.messageHandler = null;
+        }
+        this.destroyCapability.resolve();
+      }, this.destroyCapability.reject);
       return this.destroyCapability.promise;
-    }
-    this.destroyed = true;
-    this.destroyCapability = (0, _util.createPromiseCapability)();
-    if (this._passwordCapability) {
-      this._passwordCapability.reject(new Error('Worker was destroyed during onPassword callback'));
-    }
-    const waitOn = [];
-    this.pageCache.forEach(function (page) {
-      if (page) {
-        waitOn.push(page._destroy());
-      }
-    });
-    this.pageCache = [];
-    this.pagePromises = [];
-    const terminated = this.messageHandler.sendWithPromise('Terminate', null);
-    waitOn.push(terminated);
-    Promise.all(waitOn).then(() => {
-      this.fontLoader.clear();
-      if (this._networkStream) {
-        this._networkStream.cancelAllRequests();
-      }
-      if (this.messageHandler) {
-        this.messageHandler.destroy();
-        this.messageHandler = null;
-      }
-      this.destroyCapability.resolve();
-    }, this.destroyCapability.reject);
-    return this.destroyCapability.promise;
-  }
-  setupMessageHandler() {
-    const { messageHandler, loadingTask } = this;
-    messageHandler.on('GetReader', function (data, sink) {
-      (0, _util.assert)(this._networkStream);
-      this._fullReader = this._networkStream.getFullReader();
-      this._fullReader.onProgress = evt => {
-        this._lastProgress = {
-          loaded: evt.loaded,
-          total: evt.total
-        };
-      };
-      sink.onPull = () => {
-        this._fullReader.read().then(function ({ value, done }) {
-          if (done) {
-            sink.close();
-            return;
-          }
-          (0, _util.assert)((0, _util.isArrayBuffer)(value));
-          sink.enqueue(new Uint8Array(value), 1, [value]);
-        }).catch(reason => {
-          sink.error(reason);
-        });
-      };
-      sink.onCancel = reason => {
-        this._fullReader.cancel(reason);
-      };
-    }, this);
-    messageHandler.on('ReaderHeadersReady', function (data) {
-      const headersCapability = (0, _util.createPromiseCapability)();
-      const fullReader = this._fullReader;
-      fullReader.headersReady.then(() => {
-        if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) {
-          if (this._lastProgress) {
-            if (loadingTask.onProgress) {
-              loadingTask.onProgress(this._lastProgress);
-            }
-          }
-          fullReader.onProgress = evt => {
-            if (loadingTask.onProgress) {
-              loadingTask.onProgress({
-                loaded: evt.loaded,
-                total: evt.total
-              });
-            }
+    },
+    setupMessageHandler: function WorkerTransport_setupMessageHandler() {
+      var messageHandler = this.messageHandler;
+      var loadingTask = this.loadingTask;
+      messageHandler.on('GetReader', function (data, sink) {
+        (0, _util.assert)(this._networkStream);
+        this._fullReader = this._networkStream.getFullReader();
+        this._fullReader.onProgress = evt => {
+          this._lastProgress = {
+            loaded: evt.loaded,
+            total: evt.total
           };
-        }
-        headersCapability.resolve({
-          isStreamingSupported: fullReader.isStreamingSupported,
-          isRangeSupported: fullReader.isRangeSupported,
-          contentLength: fullReader.contentLength
-        });
-      }, headersCapability.reject);
-      return headersCapability.promise;
-    }, this);
-    messageHandler.on('GetRangeReader', function (data, sink) {
-      (0, _util.assert)(this._networkStream);
-      const rangeReader = this._networkStream.getRangeReader(data.begin, data.end);
-      sink.onPull = () => {
-        rangeReader.read().then(function ({ value, done }) {
-          if (done) {
-            sink.close();
-            return;
-          }
-          (0, _util.assert)((0, _util.isArrayBuffer)(value));
-          sink.enqueue(new Uint8Array(value), 1, [value]);
-        }).catch(reason => {
-          sink.error(reason);
-        });
-      };
-      sink.onCancel = reason => {
-        rangeReader.cancel(reason);
-      };
-    }, this);
-    messageHandler.on('GetDoc', function ({ pdfInfo }) {
-      this.numPages = pdfInfo.numPages;
-      this.pdfDocument = new PDFDocumentProxy(pdfInfo, this, loadingTask);
-      loadingTask._capability.resolve(this.pdfDocument);
-    }, this);
-    messageHandler.on('PasswordRequest', function (exception) {
-      this._passwordCapability = (0, _util.createPromiseCapability)();
-      if (loadingTask.onPassword) {
-        const updatePassword = password => {
-          this._passwordCapability.resolve({ password });
+        };
+        sink.onPull = () => {
+          this._fullReader.read().then(function ({ value, done }) {
+            if (done) {
+              sink.close();
+              return;
+            }
+            (0, _util.assert)((0, _util.isArrayBuffer)(value));
+            sink.enqueue(new Uint8Array(value), 1, [value]);
+          }).catch(reason => {
+            sink.error(reason);
+          });
+        };
+        sink.onCancel = reason => {
+          this._fullReader.cancel(reason);
         };
-        try {
-          loadingTask.onPassword(updatePassword, exception.code);
-        } catch (ex) {
-          this._passwordCapability.reject(ex);
-        }
-      } else {
-        this._passwordCapability.reject(new _util.PasswordException(exception.message, exception.code));
-      }
-      return this._passwordCapability.promise;
-    }, this);
-    messageHandler.on('PasswordException', function (exception) {
-      loadingTask._capability.reject(new _util.PasswordException(exception.message, exception.code));
-    }, this);
-    messageHandler.on('InvalidPDF', function (exception) {
-      loadingTask._capability.reject(new _util.InvalidPDFException(exception.message));
-    }, this);
-    messageHandler.on('MissingPDF', function (exception) {
-      loadingTask._capability.reject(new _util.MissingPDFException(exception.message));
-    }, this);
-    messageHandler.on('UnexpectedResponse', function (exception) {
-      loadingTask._capability.reject(new _util.UnexpectedResponseException(exception.message, exception.status));
-    }, this);
-    messageHandler.on('UnknownError', function (exception) {
-      loadingTask._capability.reject(new _util.UnknownErrorException(exception.message, exception.details));
-    }, this);
-    messageHandler.on('DataLoaded', function (data) {
-      this.downloadInfoCapability.resolve(data);
-    }, this);
-    messageHandler.on('StartRenderPage', function (data) {
-      if (this.destroyed) {
-        return;
-      }
-      const page = this.pageCache[data.pageIndex];
-      page._stats.timeEnd('Page Request');
-      page._startRenderPage(data.transparency, data.intent);
-    }, this);
-    messageHandler.on('RenderPageChunk', function (data) {
-      if (this.destroyed) {
-        return;
-      }
-      const page = this.pageCache[data.pageIndex];
-      page._renderPageChunk(data.operatorList, data.intent);
-    }, this);
-    messageHandler.on('commonobj', function (data) {
-      if (this.destroyed) {
-        return;
-      }
-      const [id, type, exportedData] = data;
-      if (this.commonObjs.hasData(id)) {
-        return;
-      }
-      switch (type) {
-        case 'Font':
-          const params = this._params;
-          if ('error' in exportedData) {
-            const exportedError = exportedData.error;
-            (0, _util.warn)(`Error during font loading: ${exportedError}`);
-            this.commonObjs.resolve(id, exportedError);
-            break;
-          }
-          let fontRegistry = null;
-          if (params.pdfBug && _global_scope2.default.FontInspector && _global_scope2.default.FontInspector.enabled) {
-            fontRegistry = {
-              registerFont(font, url) {
-                _global_scope2.default['FontInspector'].fontAdded(font, url);
+      }, this);
+      messageHandler.on('ReaderHeadersReady', function (data) {
+        let headersCapability = (0, _util.createPromiseCapability)();
+        let fullReader = this._fullReader;
+        fullReader.headersReady.then(() => {
+          if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) {
+            if (this._lastProgress) {
+              let loadingTask = this.loadingTask;
+              if (loadingTask.onProgress) {
+                loadingTask.onProgress(this._lastProgress);
+              }
+            }
+            fullReader.onProgress = evt => {
+              let loadingTask = this.loadingTask;
+              if (loadingTask.onProgress) {
+                loadingTask.onProgress({
+                  loaded: evt.loaded,
+                  total: evt.total
+                });
               }
             };
           }
-          const font = new _font_loader.FontFaceObject(exportedData, {
-            isEvalSupported: params.isEvalSupported,
-            disableFontFace: params.disableFontFace,
-            ignoreErrors: params.ignoreErrors,
-            onUnsupportedFeature: this._onUnsupportedFeature.bind(this),
-            fontRegistry
+          headersCapability.resolve({
+            isStreamingSupported: fullReader.isStreamingSupported,
+            isRangeSupported: fullReader.isRangeSupported,
+            contentLength: fullReader.contentLength
           });
-          const fontReady = fontObjs => {
-            this.commonObjs.resolve(id, font);
+        }, headersCapability.reject);
+        return headersCapability.promise;
+      }, this);
+      messageHandler.on('GetRangeReader', function (data, sink) {
+        (0, _util.assert)(this._networkStream);
+        let _rangeReader = this._networkStream.getRangeReader(data.begin, data.end);
+        sink.onPull = () => {
+          _rangeReader.read().then(function ({ value, done }) {
+            if (done) {
+              sink.close();
+              return;
+            }
+            (0, _util.assert)((0, _util.isArrayBuffer)(value));
+            sink.enqueue(new Uint8Array(value), 1, [value]);
+          }).catch(reason => {
+            sink.error(reason);
+          });
+        };
+        sink.onCancel = reason => {
+          _rangeReader.cancel(reason);
+        };
+      }, this);
+      messageHandler.on('GetDoc', function transportDoc({ pdfInfo }) {
+        this.numPages = pdfInfo.numPages;
+        var loadingTask = this.loadingTask;
+        var pdfDocument = new PDFDocumentProxy(pdfInfo, this, loadingTask);
+        this.pdfDocument = pdfDocument;
+        loadingTask._capability.resolve(pdfDocument);
+      }, this);
+      messageHandler.on('PasswordRequest', function transportPasswordRequest(exception) {
+        this._passwordCapability = (0, _util.createPromiseCapability)();
+        if (loadingTask.onPassword) {
+          var updatePassword = password => {
+            this._passwordCapability.resolve({ password });
           };
-          this.fontLoader.bind([font], fontReady);
-          break;
-        case 'FontPath':
-          this.commonObjs.resolve(id, exportedData);
-          break;
-        default:
-          throw new Error(`Got unknown common object type ${type}`);
-      }
-    }, this);
-    messageHandler.on('obj', function (data) {
-      if (this.destroyed) {
-        return;
-      }
-      const [id, pageIndex, type, imageData] = data;
-      const pageProxy = this.pageCache[pageIndex];
-      if (pageProxy.objs.hasData(id)) {
-        return;
-      }
-      switch (type) {
-        case 'JpegStream':
-          return new Promise((resolve, reject) => {
-            const img = new Image();
-            img.onload = function () {
-              resolve(img);
-            };
-            img.onerror = function () {
-              reject(new Error('Error during JPEG image loading'));
+          try {
+            loadingTask.onPassword(updatePassword, exception.code);
+          } catch (ex) {
+            this._passwordCapability.reject(ex);
+          }
+        } else {
+          this._passwordCapability.reject(new _util.PasswordException(exception.message, exception.code));
+        }
+        return this._passwordCapability.promise;
+      }, this);
+      messageHandler.on('PasswordException', function transportPasswordException(exception) {
+        loadingTask._capability.reject(new _util.PasswordException(exception.message, exception.code));
+      }, this);
+      messageHandler.on('InvalidPDF', function transportInvalidPDF(exception) {
+        this.loadingTask._capability.reject(new _util.InvalidPDFException(exception.message));
+      }, this);
+      messageHandler.on('MissingPDF', function transportMissingPDF(exception) {
+        this.loadingTask._capability.reject(new _util.MissingPDFException(exception.message));
+      }, this);
+      messageHandler.on('UnexpectedResponse', function transportUnexpectedResponse(exception) {
+        this.loadingTask._capability.reject(new _util.UnexpectedResponseException(exception.message, exception.status));
+      }, this);
+      messageHandler.on('UnknownError', function transportUnknownError(exception) {
+        this.loadingTask._capability.reject(new _util.UnknownErrorException(exception.message, exception.details));
+      }, this);
+      messageHandler.on('DataLoaded', function transportPage(data) {
+        this.downloadInfoCapability.resolve(data);
+      }, this);
+      messageHandler.on('StartRenderPage', function transportRender(data) {
+        if (this.destroyed) {
+          return;
+        }
+        var page = this.pageCache[data.pageIndex];
+        page._stats.timeEnd('Page Request');
+        page._startRenderPage(data.transparency, data.intent);
+      }, this);
+      messageHandler.on('RenderPageChunk', function transportRender(data) {
+        if (this.destroyed) {
+          return;
+        }
+        var page = this.pageCache[data.pageIndex];
+        page._renderPageChunk(data.operatorList, data.intent);
+      }, this);
+      messageHandler.on('commonobj', function transportObj(data) {
+        if (this.destroyed) {
+          return;
+        }
+        var id = data[0];
+        var type = data[1];
+        if (this.commonObjs.hasData(id)) {
+          return;
+        }
+        switch (type) {
+          case 'Font':
+            var exportedData = data[2];
+            let params = this._params;
+            if ('error' in exportedData) {
+              var exportedError = exportedData.error;
+              (0, _util.warn)('Error during font loading: ' + exportedError);
+              this.commonObjs.resolve(id, exportedError);
+              break;
+            }
+            var fontRegistry = null;
+            if (params.pdfBug && _global_scope2.default.FontInspector && _global_scope2.default.FontInspector.enabled) {
+              fontRegistry = {
+                registerFont(font, url) {
+                  _global_scope2.default['FontInspector'].fontAdded(font, url);
+                }
+              };
+            }
+            var font = new _font_loader.FontFaceObject(exportedData, {
+              isEvalSupported: params.isEvalSupported,
+              disableFontFace: params.disableFontFace,
+              ignoreErrors: params.ignoreErrors,
+              onUnsupportedFeature: this._onUnsupportedFeature.bind(this),
+              fontRegistry
+            });
+            var fontReady = fontObjs => {
+              this.commonObjs.resolve(id, font);
             };
-            img.src = imageData;
-          }).then(img => {
-            pageProxy.objs.resolve(id, img);
+            this.fontLoader.bind([font], fontReady);
+            break;
+          case 'FontPath':
+            this.commonObjs.resolve(id, data[2]);
+            break;
+          default:
+            throw new Error(`Got unknown common object type ${type}`);
+        }
+      }, this);
+      messageHandler.on('obj', function transportObj(data) {
+        if (this.destroyed) {
+          return;
+        }
+        var id = data[0];
+        var pageIndex = data[1];
+        var type = data[2];
+        var pageProxy = this.pageCache[pageIndex];
+        var imageData;
+        if (pageProxy.objs.hasData(id)) {
+          return;
+        }
+        switch (type) {
+          case 'JpegStream':
+            imageData = data[3];
+            return new Promise((resolve, reject) => {
+              const img = new Image();
+              img.onload = function () {
+                resolve(img);
+              };
+              img.onerror = function () {
+                reject(new Error('Error during JPEG image loading'));
+              };
+              img.src = imageData;
+            }).then(img => {
+              pageProxy.objs.resolve(id, img);
+            });
+          case 'Image':
+            imageData = data[3];
+            pageProxy.objs.resolve(id, imageData);
+            var MAX_IMAGE_SIZE_TO_STORE = 8000000;
+            if (imageData && 'data' in imageData && imageData.data.length > MAX_IMAGE_SIZE_TO_STORE) {
+              pageProxy.cleanupAfterRender = true;
+            }
+            break;
+          default:
+            throw new Error(`Got unknown object type ${type}`);
+        }
+      }, this);
+      messageHandler.on('DocProgress', function transportDocProgress(data) {
+        if (this.destroyed) {
+          return;
+        }
+        var loadingTask = this.loadingTask;
+        if (loadingTask.onProgress) {
+          loadingTask.onProgress({
+            loaded: data.loaded,
+            total: data.total
           });
-        case 'Image':
-          pageProxy.objs.resolve(id, imageData);
-          const MAX_IMAGE_SIZE_TO_STORE = 8000000;
-          if (imageData && 'data' in imageData && imageData.data.length > MAX_IMAGE_SIZE_TO_STORE) {
-            pageProxy.cleanupAfterRender = true;
+        }
+      }, this);
+      messageHandler.on('PageError', function transportError(data) {
+        if (this.destroyed) {
+          return;
+        }
+        var page = this.pageCache[data.pageNum - 1];
+        var intentState = page.intentStates[data.intent];
+        if (intentState.displayReadyCapability) {
+          intentState.displayReadyCapability.reject(data.error);
+        } else {
+          throw new Error(data.error);
+        }
+        if (intentState.operatorList) {
+          intentState.operatorList.lastChunk = true;
+          for (var i = 0; i < intentState.renderTasks.length; i++) {
+            intentState.renderTasks[i].operatorListChanged();
           }
-          break;
-        default:
-          throw new Error(`Got unknown object type ${type}`);
-      }
-    }, this);
-    messageHandler.on('DocProgress', function (data) {
-      if (this.destroyed) {
-        return;
-      }
-      if (loadingTask.onProgress) {
-        loadingTask.onProgress({
-          loaded: data.loaded,
-          total: data.total
+        }
+      }, this);
+      messageHandler.on('UnsupportedFeature', this._onUnsupportedFeature, this);
+      messageHandler.on('JpegDecode', function (data) {
+        if (this.destroyed) {
+          return Promise.reject(new Error('Worker was destroyed'));
+        }
+        if (typeof document === 'undefined') {
+          return Promise.reject(new Error('"document" is not defined.'));
+        }
+        var imageUrl = data[0];
+        var components = data[1];
+        if (components !== 3 && components !== 1) {
+          return Promise.reject(new Error('Only 3 components or 1 component can be returned'));
+        }
+        return new Promise(function (resolve, reject) {
+          var img = new Image();
+          img.onload = function () {
+            var width = img.width;
+            var height = img.height;
+            var size = width * height;
+            var rgbaLength = size * 4;
+            var buf = new Uint8ClampedArray(size * components);
+            var tmpCanvas = document.createElement('canvas');
+            tmpCanvas.width = width;
+            tmpCanvas.height = height;
+            var tmpCtx = tmpCanvas.getContext('2d');
+            tmpCtx.drawImage(img, 0, 0);
+            var data = tmpCtx.getImageData(0, 0, width, height).data;
+            var i, j;
+            if (components === 3) {
+              for (i = 0, j = 0; i < rgbaLength; i += 4, j += 3) {
+                buf[j] = data[i];
+                buf[j + 1] = data[i + 1];
+                buf[j + 2] = data[i + 2];
+              }
+            } else if (components === 1) {
+              for (i = 0, j = 0; i < rgbaLength; i += 4, j++) {
+                buf[j] = data[i];
+              }
+            }
+            resolve({
+              data: buf,
+              width,
+              height
+            });
+          };
+          img.onerror = function () {
+            reject(new Error('JpegDecode failed to load image'));
+          };
+          img.src = imageUrl;
         });
-      }
-    }, this);
-    messageHandler.on('PageError', function (data) {
+      }, this);
+      messageHandler.on('FetchBuiltInCMap', function (data) {
+        if (this.destroyed) {
+          return Promise.reject(new Error('Worker was destroyed'));
+        }
+        return this.CMapReaderFactory.fetch({ name: data.name });
+      }, this);
+    },
+    _onUnsupportedFeature({ featureId }) {
       if (this.destroyed) {
         return;
       }
-      const page = this.pageCache[data.pageNum - 1];
-      const intentState = page.intentStates[data.intent];
-      if (intentState.displayReadyCapability) {
-        intentState.displayReadyCapability.reject(data.error);
-      } else {
-        throw new Error(data.error);
-      }
-      if (intentState.operatorList) {
-        intentState.operatorList.lastChunk = true;
-        for (let i = 0; i < intentState.renderTasks.length; i++) {
-          intentState.renderTasks[i].operatorListChanged();
-        }
-      }
-    }, this);
-    messageHandler.on('UnsupportedFeature', this._onUnsupportedFeature, this);
-    messageHandler.on('JpegDecode', function (data) {
-      if (this.destroyed) {
-        return Promise.reject(new Error('Worker was destroyed'));
-      }
-      if (typeof document === 'undefined') {
-        return Promise.reject(new Error('"document" is not defined.'));
-      }
-      const [imageUrl, components] = data;
-      if (components !== 3 && components !== 1) {
-        return Promise.reject(new Error('Only 3 components or 1 component can be returned'));
-      }
-      return new Promise(function (resolve, reject) {
-        const img = new Image();
-        img.onload = function () {
-          const width = img.width;
-          const height = img.height;
-          const size = width * height;
-          const rgbaLength = size * 4;
-          const buf = new Uint8ClampedArray(size * components);
-          const tmpCanvas = document.createElement('canvas');
-          tmpCanvas.width = width;
-          tmpCanvas.height = height;
-          const tmpCtx = tmpCanvas.getContext('2d');
-          tmpCtx.drawImage(img, 0, 0);
-          const data = tmpCtx.getImageData(0, 0, width, height).data;
-          if (components === 3) {
-            for (let i = 0, j = 0; i < rgbaLength; i += 4, j += 3) {
-              buf[j] = data[i];
-              buf[j + 1] = data[i + 1];
-              buf[j + 2] = data[i + 2];
-            }
-          } else if (components === 1) {
-            for (let i = 0, j = 0; i < rgbaLength; i += 4, j++) {
-              buf[j] = data[i];
-            }
-          }
-          resolve({
-            data: buf,
-            width,
-            height
-          });
-        };
-        img.onerror = function () {
-          reject(new Error('JpegDecode failed to load image'));
-        };
-        img.src = imageUrl;
+      let loadingTask = this.loadingTask;
+      if (loadingTask.onUnsupportedFeature) {
+        loadingTask.onUnsupportedFeature(featureId);
+      }
+    },
+    getData: function WorkerTransport_getData() {
+      return this.messageHandler.sendWithPromise('GetData', null);
+    },
+    getPage(pageNumber) {
+      if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this.numPages) {
+        return Promise.reject(new Error('Invalid page request'));
+      }
+      var pageIndex = pageNumber - 1;
+      if (pageIndex in this.pagePromises) {
+        return this.pagePromises[pageIndex];
+      }
+      var promise = this.messageHandler.sendWithPromise('GetPage', { pageIndex }).then(pageInfo => {
+        if (this.destroyed) {
+          throw new Error('Transport destroyed');
+        }
+        let page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.pdfBug);
+        this.pageCache[pageIndex] = page;
+        return page;
+      });
+      this.pagePromises[pageIndex] = promise;
+      return promise;
+    },
+    getPageIndex: function WorkerTransport_getPageIndexByRef(ref) {
+      return this.messageHandler.sendWithPromise('GetPageIndex', { ref }).catch(function (reason) {
+        return Promise.reject(new Error(reason));
+      });
+    },
+    getAnnotations: function WorkerTransport_getAnnotations(pageIndex, intent) {
+      return this.messageHandler.sendWithPromise('GetAnnotations', {
+        pageIndex,
+        intent
       });
-    }, this);
-    messageHandler.on('FetchBuiltInCMap', function (data) {
-      if (this.destroyed) {
-        return Promise.reject(new Error('Worker was destroyed'));
-      }
-      return this.CMapReaderFactory.fetch({ name: data.name });
-    }, this);
-  }
-  _onUnsupportedFeature({ featureId }) {
-    if (this.destroyed) {
-      return;
-    }
-    if (this.loadingTask.onUnsupportedFeature) {
-      this.loadingTask.onUnsupportedFeature(featureId);
-    }
-  }
-  getData() {
-    return this.messageHandler.sendWithPromise('GetData', null);
-  }
-  getPage(pageNumber) {
-    if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this.numPages) {
-      return Promise.reject(new Error('Invalid page request'));
-    }
-    const pageIndex = pageNumber - 1;
-    if (pageIndex in this.pagePromises) {
-      return this.pagePromises[pageIndex];
-    }
-    const promise = this.messageHandler.sendWithPromise('GetPage', { pageIndex }).then(pageInfo => {
-      if (this.destroyed) {
-        throw new Error('Transport destroyed');
-      }
-      const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.pdfBug);
-      this.pageCache[pageIndex] = page;
-      return page;
-    });
-    this.pagePromises[pageIndex] = promise;
-    return promise;
-  }
-  getPageIndex(ref) {
-    return this.messageHandler.sendWithPromise('GetPageIndex', { ref }).catch(function (reason) {
-      return Promise.reject(new Error(reason));
-    });
-  }
-  getAnnotations(pageIndex, intent) {
-    return this.messageHandler.sendWithPromise('GetAnnotations', {
-      pageIndex,
-      intent
-    });
-  }
-  getDestinations() {
-    return this.messageHandler.sendWithPromise('GetDestinations', null);
-  }
-  getDestination(id) {
-    if (typeof id !== 'string') {
-      return Promise.reject(new Error('Invalid destination request.'));
-    }
-    return this.messageHandler.sendWithPromise('GetDestination', { id });
-  }
-  getPageLabels() {
-    return this.messageHandler.sendWithPromise('GetPageLabels', null);
-  }
-  getPageMode() {
-    return this.messageHandler.sendWithPromise('GetPageMode', null);
-  }
-  getAttachments() {
-    return this.messageHandler.sendWithPromise('GetAttachments', null);
-  }
-  getJavaScript() {
-    return this.messageHandler.sendWithPromise('GetJavaScript', null);
-  }
-  getOutline() {
-    return this.messageHandler.sendWithPromise('GetOutline', null);
-  }
-  getPermissions() {
-    return this.messageHandler.sendWithPromise('GetPermissions', null);
-  }
-  getMetadata() {
-    return this.messageHandler.sendWithPromise('GetMetadata', null).then(results => {
-      return {
-        info: results[0],
-        metadata: results[1] ? new _metadata.Metadata(results[1]) : null,
-        contentDispositionFilename: this._fullReader ? this._fullReader.filename : null
-      };
-    });
-  }
-  getStats() {
-    return this.messageHandler.sendWithPromise('GetStats', null);
-  }
-  startCleanup() {
-    this.messageHandler.sendWithPromise('Cleanup', null).then(() => {
-      for (let i = 0, ii = this.pageCache.length; i < ii; i++) {
-        const page = this.pageCache[i];
-        if (page) {
-          page.cleanup();
-        }
-      }
-      this.commonObjs.clear();
-      this.fontLoader.clear();
-    });
-  }
-  get loadingParams() {
-    const params = this._params;
-    return (0, _util.shadow)(this, 'loadingParams', {
-      disableAutoFetch: params.disableAutoFetch,
-      disableCreateObjectURL: params.disableCreateObjectURL,
-      disableFontFace: params.disableFontFace,
-      nativeImageDecoderSupport: params.nativeImageDecoderSupport
-    });
-  }
-}
+    },
+    getDestinations: function WorkerTransport_getDestinations() {
+      return this.messageHandler.sendWithPromise('GetDestinations', null);
+    },
+    getDestination: function WorkerTransport_getDestination(id) {
+      if (typeof id !== 'string') {
+        return Promise.reject(new Error('Invalid destination request.'));
+      }
+      return this.messageHandler.sendWithPromise('GetDestination', { id });
+    },
+    getPageLabels: function WorkerTransport_getPageLabels() {
+      return this.messageHandler.sendWithPromise('GetPageLabels', null);
+    },
+    getPageMode() {
+      return this.messageHandler.sendWithPromise('GetPageMode', null);
+    },
+    getAttachments: function WorkerTransport_getAttachments() {
+      return this.messageHandler.sendWithPromise('GetAttachments', null);
+    },
+    getJavaScript: function WorkerTransport_getJavaScript() {
+      return this.messageHandler.sendWithPromise('GetJavaScript', null);
+    },
+    getOutline: function WorkerTransport_getOutline() {
+      return this.messageHandler.sendWithPromise('GetOutline', null);
+    },
+    getMetadata: function WorkerTransport_getMetadata() {
+      return this.messageHandler.sendWithPromise('GetMetadata', null).then(results => {
+        return {
+          info: results[0],
+          metadata: results[1] ? new _metadata.Metadata(results[1]) : null,
+          contentDispositionFilename: this._fullReader ? this._fullReader.filename : null
+        };
+      });
+    },
+    getStats: function WorkerTransport_getStats() {
+      return this.messageHandler.sendWithPromise('GetStats', null);
+    },
+    startCleanup: function WorkerTransport_startCleanup() {
+      this.messageHandler.sendWithPromise('Cleanup', null).then(() => {
+        for (var i = 0, ii = this.pageCache.length; i < ii; i++) {
+          var page = this.pageCache[i];
+          if (page) {
+            page.cleanup();
+          }
+        }
+        this.commonObjs.clear();
+        this.fontLoader.clear();
+      });
+    },
+    get loadingParams() {
+      let params = this._params;
+      return (0, _util.shadow)(this, 'loadingParams', {
+        disableAutoFetch: params.disableAutoFetch,
+        disableCreateObjectURL: params.disableCreateObjectURL,
+        disableFontFace: params.disableFontFace,
+        nativeImageDecoderSupport: params.nativeImageDecoderSupport
+      });
+    }
+  };
+  return WorkerTransport;
+}();
 var PDFObjects = function PDFObjectsClosure() {
   function PDFObjects() {
     this.objs = Object.create(null);
   }
   PDFObjects.prototype = {
     ensureObj: function PDFObjects_ensureObj(objId) {
       if (this.objs[objId]) {
         return this.objs[objId];
@@ -5548,18 +5553,18 @@ var InternalRenderTask = function Intern
         }
       });
     }
   };
   return InternalRenderTask;
 }();
 var version, build;
 {
-  exports.version = version = '2.0.813';
-  exports.build = build = 'af89ec27';
+  exports.version = version = '2.0.775';
+  exports.build = build = '20cd1b35';
 }
 exports.getDocument = getDocument;
 exports.LoopbackPort = LoopbackPort;
 exports.PDFDataRangeTransport = PDFDataRangeTransport;
 exports.PDFWorker = PDFWorker;
 exports.PDFDocumentProxy = PDFDocumentProxy;
 exports.PDFPageProxy = PDFPageProxy;
 exports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory;
--- a/browser/extensions/pdfjs/content/build/pdf.worker.js
+++ b/browser/extensions/pdfjs/content/build/pdf.worker.js
@@ -1,13 +1,13 @@
 /**
  * @licstart The following is the entire license notice for the
  * Javascript code in this page
  *
- * Copyright 2018 Mozilla Foundation
+ * Copyright 2017 Mozilla Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
  *     http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
@@ -118,18 +118,18 @@ return /******/ (function(modules) { // 
 /************************************************************************/
 /******/ ([
 /* 0 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
 
 
-var pdfjsVersion = '2.0.813';
-var pdfjsBuild = 'af89ec27';
+var pdfjsVersion = '2.0.775';
+var pdfjsBuild = '20cd1b35';
 var pdfjsCoreWorker = __w_pdfjs_require__(1);
 exports.WorkerMessageHandler = pdfjsCoreWorker.WorkerMessageHandler;
 
 /***/ }),
 /* 1 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
@@ -322,17 +322,17 @@ var WorkerMessageHandler = {
     });
   },
   createDocumentHandler(docParams, port) {
     var pdfManager;
     var terminated = false;
     var cancelXHRs = null;
     var WorkerTasks = [];
     let apiVersion = docParams.apiVersion;
-    let workerVersion = '2.0.813';
+    let workerVersion = '2.0.775';
     if (apiVersion !== workerVersion) {
       throw new Error(`The API version "${apiVersion}" does not match ` + `the Worker version "${workerVersion}".`);
     }
     var docId = docParams.docId;
     var docBaseUrl = docParams.docBaseUrl;
     var workerHandlerName = docParams.docId + '_worker';
     var handler = new _message_handler.MessageHandler(workerHandlerName, docId, port);
     handler.postMessageTransfers = docParams.postMessageTransfers;
@@ -564,19 +564,16 @@ var WorkerMessageHandler = {
       return pdfManager.ensureCatalog('attachments');
     });
     handler.on('GetJavaScript', function wphSetupGetJavaScript(data) {
       return pdfManager.ensureCatalog('javaScript');
     });
     handler.on('GetOutline', function wphSetupGetOutline(data) {
       return pdfManager.ensureCatalog('documentOutline');
     });
-    handler.on('GetPermissions', function (data) {
-      return pdfManager.ensureCatalog('permissions');
-    });
     handler.on('GetMetadata', function wphSetupGetMetadata(data) {
       return Promise.all([pdfManager.ensureDoc('documentInfo'), pdfManager.ensureCatalog('metadata')]);
     });
     handler.on('GetData', function wphSetupGetData(data) {
       pdfManager.requestLoadedStream();
       return pdfManager.onLoadedStream().then(function (stream) {
         return stream.bytes;
       });
@@ -713,40 +710,30 @@ exports.WorkerMessageHandler = WorkerMes
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
 
 
 Object.defineProperty(exports, "__esModule", {
   value: true
 });
-exports.unreachable = exports.warn = exports.utf8StringToString = exports.stringToUTF8String = exports.stringToPDFString = exports.stringToBytes = exports.string32 = exports.shadow = exports.setVerbosityLevel = exports.URL = exports.ReadableStream = exports.removeNullCharacters = exports.readUint32 = exports.readUint16 = exports.readInt8 = exports.log2 = exports.isEvalSupported = exports.isLittleEndian = exports.createValidAbsoluteUrl = exports.isSameOrigin = exports.isSpace = exports.isString = exports.isNum = exports.isEmptyObj = exports.isBool = exports.isArrayBuffer = exports.info = exports.getVerbosityLevel = exports.getLookupTableFactory = exports.getInheritableProperty = exports.deprecated = exports.createObjectURL = exports.createPromiseCapability = exports.bytesToString = exports.assert = exports.arraysToBytes = exports.arrayByteLength = exports.FormatError = exports.XRefParseException = exports.toRomanNumerals = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.NativeImageDecoding = exports.MissingPDFException = exports.MissingDataException = exports.InvalidPDFException = exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = exports.AnnotationType = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = undefined;
+exports.unreachable = exports.warn = exports.utf8StringToString = exports.stringToUTF8String = exports.stringToPDFString = exports.stringToBytes = exports.string32 = exports.shadow = exports.setVerbosityLevel = exports.URL = exports.ReadableStream = exports.removeNullCharacters = exports.readUint32 = exports.readUint16 = exports.readInt8 = exports.log2 = exports.isEvalSupported = exports.isLittleEndian = exports.createValidAbsoluteUrl = exports.isSameOrigin = exports.isSpace = exports.isString = exports.isNum = exports.isEmptyObj = exports.isBool = exports.isArrayBuffer = exports.info = exports.getVerbosityLevel = exports.getLookupTableFactory = exports.getInheritableProperty = exports.deprecated = exports.createObjectURL = exports.createPromiseCapability = exports.bytesToString = exports.assert = exports.arraysToBytes = exports.arrayByteLength = exports.FormatError = exports.XRefParseException = exports.toRomanNumerals = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PasswordResponses = exports.PasswordException = exports.NativeImageDecoding = exports.MissingPDFException = exports.MissingDataException = exports.InvalidPDFException = exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = exports.AnnotationType = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = undefined;
 
 __w_pdfjs_require__(3);
 
 var _streams_polyfill = __w_pdfjs_require__(5);
 
 var _url_polyfill = __w_pdfjs_require__(7);
 
 var FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];
 const NativeImageDecoding = {
   NONE: 'none',
   DECODE: 'decode',
   DISPLAY: 'display'
 };
-const PermissionFlag = {
-  PRINT: 0x04,
-  MODIFY_CONTENTS: 0x08,
-  COPY: 0x10,
-  MODIFY_ANNOTATIONS: 0x20,
-  FILL_INTERACTIVE_FORMS: 0x100,
-  COPY_FOR_ACCESSIBILITY: 0x200,
-  ASSEMBLE: 0x400,
-  PRINT_HIGH_QUALITY: 0x800
-};
 var TextRenderingMode = {
   FILL: 0,
   STROKE: 1,
   FILL_STROKE: 2,
   INVISIBLE: 3,
   FILL_ADD_TO_PATH: 4,
   STROKE_ADD_TO_PATH: 5,
   FILL_STROKE_ADD_TO_PATH: 6,
@@ -1459,17 +1446,16 @@ exports.ImageKind = ImageKind;
 exports.CMapCompressionType = CMapCompressionType;
 exports.AbortException = AbortException;
 exports.InvalidPDFException = InvalidPDFException;
 exports.MissingDataException = MissingDataException;
 exports.MissingPDFException = MissingPDFException;
 exports.NativeImageDecoding = NativeImageDecoding;
 exports.PasswordException = PasswordException;
 exports.PasswordResponses = PasswordResponses;
-exports.PermissionFlag = PermissionFlag;
 exports.StreamType = StreamType;
 exports.TextRenderingMode = TextRenderingMode;
 exports.UnexpectedResponseException = UnexpectedResponseException;
 exports.UnknownErrorException = UnknownErrorException;
 exports.Util = Util;
 exports.toRomanNumerals = toRomanNumerals;
 exports.XRefParseException = XRefParseException;
 exports.FormatError = FormatError;
@@ -5754,674 +5740,654 @@ var _chunked_stream = __w_pdfjs_require_
 
 var _crypto = __w_pdfjs_require__(24);
 
 var _colorspace = __w_pdfjs_require__(25);
 
 function fetchDestination(dest) {
   return (0, _primitives.isDict)(dest) ? dest.get('D') : dest;
 }
-class Catalog {
-  constructor(pdfManager, xref) {
+var Catalog = function CatalogClosure() {
+  function Catalog(pdfManager, xref) {
     this.pdfManager = pdfManager;
     this.xref = xref;
     this.catDict = xref.getCatalogObj();
     if (!(0, _primitives.isDict)(this.catDict)) {
-      throw new _util.FormatError('Catalog object is not a dictionary.');
+      throw new _util.FormatError('catalog object is not a dictionary');
     }
     this.fontCache = new _primitives.RefSetCache();
     this.builtInCMapCache = new Map();
     this.pageKidsCountCache = new _primitives.RefSetCache();
   }
-  get metadata() {
-    const streamRef = this.catDict.getRaw('Metadata');
-    if (!(0, _primitives.isRef)(streamRef)) {
-      return (0, _util.shadow)(this, 'metadata', null);
-    }
-    const suppressEncryption = !(this.xref.encrypt && this.xref.encrypt.encryptMetadata);
-    const stream = this.xref.fetch(streamRef, suppressEncryption);
-    let metadata;
-    if (stream && (0, _primitives.isDict)(stream.dict)) {
-      const type = stream.dict.get('Type');
-      const subtype = stream.dict.get('Subtype');
-      if ((0, _primitives.isName)(type, 'Metadata') && (0, _primitives.isName)(subtype, 'XML')) {
-        try {
-          metadata = (0, _util.stringToUTF8String)((0, _util.bytesToString)(stream.getBytes()));
-        } catch (e) {
-          if (e instanceof _util.MissingDataException) {
-            throw e;
-          }
-          (0, _util.info)('Skipping invalid metadata.');
-        }
-      }
-    }
-    return (0, _util.shadow)(this, 'metadata', metadata);
-  }
-  get toplevelPagesDict() {
-    const pagesObj = this.catDict.get('Pages');
-    if (!(0, _primitives.isDict)(pagesObj)) {
-      throw new _util.FormatError('Invalid top-level pages dictionary.');
-    }
-    return (0, _util.shadow)(this, 'toplevelPagesDict', pagesObj);
-  }
-  get documentOutline() {
-    let obj = null;
-    try {
-      obj = this._readDocumentOutline();
-    } catch (ex) {
-      if (ex instanceof _util.MissingDataException) {
-        throw ex;
-      }
-      (0, _util.warn)('Unable to read document outline.');
-    }
-    return (0, _util.shadow)(this, 'documentOutline', obj);
-  }
-  _readDocumentOutline() {
-    let obj = this.catDict.get('Outlines');
-    if (!(0, _primitives.isDict)(obj)) {
-      return null;
-    }
-    obj = obj.getRaw('First');
-    if (!(0, _primitives.isRef)(obj)) {
-      return null;
-    }
-    const root = { items: [] };
-    const queue = [{
-      obj,
-      parent: root
-    }];
-    const processed = new _primitives.RefSet();
-    processed.put(obj);
-    const xref = this.xref,
+  Catalog.prototype = {
+    get metadata() {
+      var streamRef = this.catDict.getRaw('Metadata');
+      if (!(0, _primitives.isRef)(streamRef)) {
+        return (0, _util.shadow)(this, 'metadata', null);
+      }
+      var encryptMetadata = !this.xref.encrypt ? false : this.xref.encrypt.encryptMetadata;
+      var stream = this.xref.fetch(streamRef, !encryptMetadata);
+      var metadata;
+      if (stream && (0, _primitives.isDict)(stream.dict)) {
+        var type = stream.dict.get('Type');
+        var subtype = stream.dict.get('Subtype');
+        if ((0, _primitives.isName)(type, 'Metadata') && (0, _primitives.isName)(subtype, 'XML')) {
+          try {
+            metadata = (0, _util.stringToUTF8String)((0, _util.bytesToString)(stream.getBytes()));
+          } catch (e) {
+            if (e instanceof _util.MissingDataException) {
+              throw e;
+            }
+            (0, _util.info)('Skipping invalid metadata.');
+          }
+        }
+      }
+      return (0, _util.shadow)(this, 'metadata', metadata);
+    },
+    get toplevelPagesDict() {
+      var pagesObj = this.catDict.get('Pages');
+      if (!(0, _primitives.isDict)(pagesObj)) {
+        throw new _util.FormatError('invalid top-level pages dictionary');
+      }
+      return (0, _util.shadow)(this, 'toplevelPagesDict', pagesObj);
+    },
+    get documentOutline() {
+      var obj = null;
+      try {
+        obj = this.readDocumentOutline();
+      } catch (ex) {
+        if (ex instanceof _util.MissingDataException) {
+          throw ex;
+        }
+        (0, _util.warn)('Unable to read document outline');
+      }
+      return (0, _util.shadow)(this, 'documentOutline', obj);
+    },
+    readDocumentOutline: function Catalog_readDocumentOutline() {
+      var obj = this.catDict.get('Outlines');
+      if (!(0, _primitives.isDict)(obj)) {
+        return null;
+      }
+      obj = obj.getRaw('First');
+      if (!(0, _primitives.isRef)(obj)) {
+        return null;
+      }
+      var root = { items: [] };
+      var queue = [{
+        obj,
+        parent: root
+      }];
+      var processed = new _primitives.RefSet();
+      processed.put(obj);
+      var xref = this.xref,
           blackColor = new Uint8ClampedArray(3);
-    while (queue.length > 0) {
-      const i = queue.shift();
-      const outlineDict = xref.fetchIfRef(i.obj);
-      if (outlineDict === null) {
-        continue;
-      }
-      if (!outlineDict.has('Title')) {
-        throw new _util.FormatError('Invalid outline item encountered.');
-      }
-      const data = {
-        url: null,
-        dest: null
-      };
-      Catalog.parseDestDictionary({
-        destDict: outlineDict,
-        resultObj: data,
-        docBaseUrl: this.pdfManager.docBaseUrl
-      });
-      const title = outlineDict.get('Title');
-      const flags = outlineDict.get('F') || 0;
-      const color = outlineDict.getArray('C');
-      let rgbColor = blackColor;
-      if (Array.isArray(color) && color.length === 3 && (color[0] !== 0 || color[1] !== 0 || color[2] !== 0)) {
-        rgbColor = _colorspace.ColorSpace.singletons.rgb.getRgb(color, 0);
-      }
-      const outlineItem = {
-        dest: data.dest,
-        url: data.url,
-        unsafeUrl: data.unsafeUrl,
-        newWindow: data.newWindow,
-        title: (0, _util.stringToPDFString)(title),
-        color: rgbColor,
-        count: outlineDict.get('Count'),
-        bold: !!(flags & 2),
-        italic: !!(flags & 1),
-        items: []
-      };
-      i.parent.items.push(outlineItem);
-      obj = outlineDict.getRaw('First');
-      if ((0, _primitives.isRef)(obj) && !processed.has(obj)) {
-        queue.push({
-          obj,
-          parent: outlineItem
-        });
-        processed.put(obj);
-      }
-      obj = outlineDict.getRaw('Next');
-      if ((0, _primitives.isRef)(obj) && !processed.has(obj)) {
-        queue.push({
-          obj,
-          parent: i.parent
-        });
-        processed.put(obj);
-      }
-    }
-    return root.items.length > 0 ? root.items : null;
-  }
-  get permissions() {
-    let permissions = null;
-    try {
-      permissions = this._readPermissions();
-    } catch (ex) {
-      if (ex instanceof _util.MissingDataException) {
-        throw ex;
-      }
-      (0, _util.warn)('Unable to read permissions.');
-    }
-    return (0, _util.shadow)(this, 'permissions', permissions);
-  }
-  _readPermissions() {
-    const encrypt = this.xref.trailer.get('Encrypt');
-    if (!(0, _primitives.isDict)(encrypt)) {
-      return null;
-    }
-    let flags = encrypt.get('P');
-    if (!(0, _util.isNum)(flags)) {
+      while (queue.length > 0) {
+        var i = queue.shift();
+        var outlineDict = xref.fetchIfRef(i.obj);
+        if (outlineDict === null) {
+          continue;
+        }
+        if (!outlineDict.has('Title')) {
+          throw new _util.FormatError('Invalid outline item');
+        }
+        var data = {
+          url: null,
+          dest: null
+        };
+        Catalog.parseDestDictionary({
+          destDict: outlineDict,
+          resultObj: data,
+          docBaseUrl: this.pdfManager.docBaseUrl
+        });
+        var title = outlineDict.get('Title');
+        var flags = outlineDict.get('F') || 0;
+        var color = outlineDict.getArray('C'),
+            rgbColor = blackColor;
+        if (Array.isArray(color) && color.length === 3 && (color[0] !== 0 || color[1] !== 0 || color[2] !== 0)) {
+          rgbColor = _colorspace.ColorSpace.singletons.rgb.getRgb(color, 0);
+        }
+        var outlineItem = {
+          dest: data.dest,
+          url: data.url,
+          unsafeUrl: data.unsafeUrl,
+          newWindow: data.newWindow,
+          title: (0, _util.stringToPDFString)(title),
+          color: rgbColor,
+          count: outlineDict.get('Count'),
+          bold: !!(flags & 2),
+          italic: !!(flags & 1),
+          items: []
+        };
+        i.parent.items.push(outlineItem);
+        obj = outlineDict.getRaw('First');
+        if ((0, _primitives.isRef)(obj) && !processed.has(obj)) {
+          queue.push({
+            obj,
+            parent: outlineItem
+          });
+          processed.put(obj);
+        }
+        obj = outlineDict.getRaw('Next');
+        if ((0, _primitives.isRef)(obj) && !processed.has(obj)) {
+          queue.push({
+            obj,
+            parent: i.parent
+          });
+          processed.put(obj);
+        }
+      }
+      return root.items.length > 0 ? root.items : null;
+    },
+    get numPages() {
+      var obj = this.toplevelPagesDict.get('Count');
+      if (!Number.isInteger(obj)) {
+        throw new _util.FormatError('page count in top level pages object is not an integer');
+      }
+      return (0, _util.shadow)(this, 'numPages', obj);
+    },
+    get destinations() {
+      const obj = this._readDests(),
+            dests = Object.create(null);
+      if (obj instanceof NameTree) {
+        const names = obj.getAll();
+        for (let name in names) {
+          dests[name] = fetchDestination(names[name]);
+        }
+      } else if (obj instanceof _primitives.Dict) {
+        obj.forEach(function (key, value) {
+          if (value) {
+            dests[key] = fetchDestination(value);
+          }
+        });
+      }
+      return (0, _util.shadow)(this, 'destinations', dests);
+    },
+    getDestination(destinationId) {
+      const obj = this._readDests();
+      if (obj instanceof NameTree || obj instanceof _primitives.Dict) {
+        return fetchDestination(obj.get(destinationId) || null);
+      }
       return null;
-    }
-    flags += 2 ** 32;
-    const permissions = [];
-    for (const key in _util.PermissionFlag) {
-      const value = _util.PermissionFlag[key];
-      if (flags & value) {
-        permissions.push(value);
-      }
-    }
-    return permissions;
-  }
-  get numPages() {
-    const obj = this.toplevelPagesDict.get('Count');
-    if (!Number.isInteger(obj)) {
-      throw new _util.FormatError('Page count in top-level pages dictionary is not an integer.');
-    }
-    return (0, _util.shadow)(this, 'numPages', obj);
-  }
-  get destinations() {
-    const obj = this._readDests(),
-          dests = Object.create(null);
-    if (obj instanceof NameTree) {
-      const names = obj.getAll();
-      for (let name in names) {
-        dests[name] = fetchDestination(names[name]);
-      }
-    } else if (obj instanceof _primitives.Dict) {
-      obj.forEach(function (key, value) {
-        if (value) {
-          dests[key] = fetchDestination(value);
-        }
-      });
-    }
-    return (0, _util.shadow)(this, 'destinations', dests);
-  }
-  getDestination(destinationId) {
-    const obj = this._readDests();
-    if (obj instanceof NameTree || obj instanceof _primitives.Dict) {
-      return fetchDestination(obj.get(destinationId) || null);
-    }
-    return null;
-  }
-  _readDests() {
-    const obj = this.catDict.get('Names');
-    if (obj && obj.has('Dests')) {
-      return new NameTree(obj.getRaw('Dests'), this.xref);
-    } else if (this.catDict.has('Dests')) {
-      return this.catDict.get('Dests');
-    }
-  }
-  get pageLabels() {
-    let obj = null;
-    try {
-      obj = this._readPageLabels();
-    } catch (ex) {
-      if (ex instanceof _util.MissingDataException) {
-        throw ex;
-      }
-      (0, _util.warn)('Unable to read page labels.');
-    }
-    return (0, _util.shadow)(this, 'pageLabels', obj);
-  }
-  _readPageLabels() {
-    const obj = this.catDict.getRaw('PageLabels');
-    if (!obj) {
-      return null;
-    }
-    const pageLabels = new Array(this.numPages);
-    let style = null,
-        prefix = '';
-    const numberTree = new NumberTree(obj, this.xref);
-    const nums = numberTree.getAll();
-    let currentLabel = '',
-        currentIndex = 1;
-    for (let i = 0, ii = this.numPages; i < ii; i++) {
-      if (i in nums) {
-        const labelDict = nums[i];
-        if (!(0, _primitives.isDict)(labelDict)) {
-          throw new _util.FormatError('PageLabel is not a dictionary.');
-        }
-        if (labelDict.has('Type') && !(0, _primitives.isName)(labelDict.get('Type'), 'PageLabel')) {
-          throw new _util.FormatError('Invalid type in PageLabel dictionary.');
-        }
-        if (labelDict.has('S')) {
-          const s = labelDict.get('S');
-          if (!(0, _primitives.isName)(s)) {
-            throw new _util.FormatError('Invalid style in PageLabel dictionary.');
-          }
-          style = s.name;
-        } else {
-          style = null;
-        }
-        if (labelDict.has('P')) {
-          const p = labelDict.get('P');
-          if (!(0, _util.isString)(p)) {
-            throw new _util.FormatError('Invalid prefix in PageLabel dictionary.');
-          }
-          prefix = (0, _util.stringToPDFString)(p);
-        } else {
-          prefix = '';
-        }
-        if (labelDict.has('St')) {
-          const st = labelDict.get('St');
-          if (!(Number.isInteger(st) && st >= 1)) {
-            throw new _util.FormatError('Invalid start in PageLabel dictionary.');
-          }
-          currentIndex = st;
-        } else {
+    },
+    _readDests() {
+      const obj = this.catDict.get('Names');
+      if (obj && obj.has('Dests')) {
+        return new NameTree(obj.getRaw('Dests'), this.xref);
+      } else if (this.catDict.has('Dests')) {
+        return this.catDict.get('Dests');
+      }
+    },
+    get pageLabels() {
+      var obj = null;
+      try {
+        obj = this.readPageLabels();
+      } catch (ex) {
+        if (ex instanceof _util.MissingDataException) {
+          throw ex;
+        }
+        (0, _util.warn)('Unable to read page labels.');
+      }
+      return (0, _util.shadow)(this, 'pageLabels', obj);
+    },
+    readPageLabels: function Catalog_readPageLabels() {
+      var obj = this.catDict.getRaw('PageLabels');
+      if (!obj) {
+        return null;
+      }
+      var pageLabels = new Array(this.numPages);
+      var style = null;
+      var prefix = '';
+      var numberTree = new NumberTree(obj, this.xref);
+      var nums = numberTree.getAll();
+      var currentLabel = '',
           currentIndex = 1;
-        }
-      }
-      switch (style) {
-        case 'D':
-          currentLabel = currentIndex;
-          break;
-        case 'R':
-        case 'r':
-          currentLabel = (0, _util.toRomanNumerals)(currentIndex, style === 'r');
-          break;
-        case 'A':
-        case 'a':
-          const LIMIT = 26;
-          const A_UPPER_CASE = 0x41,
+      for (var i = 0, ii = this.numPages; i < ii; i++) {
+        if (i in nums) {
+          const labelDict = nums[i];
+          if (!(0, _primitives.isDict)(labelDict)) {
+            throw new _util.FormatError('The PageLabel is not a dictionary.');
+          }
+          if (labelDict.has('Type') && !(0, _primitives.isName)(labelDict.get('Type'), 'PageLabel')) {
+            throw new _util.FormatError('Invalid type in PageLabel dictionary.');
+          }
+          if (labelDict.has('S')) {
+            const s = labelDict.get('S');
+            if (!(0, _primitives.isName)(s)) {
+              throw new _util.FormatError('Invalid style in PageLabel dictionary.');
+            }
+            style = s.name;
+          } else {
+            style = null;
+          }
+          if (labelDict.has('P')) {
+            const p = labelDict.get('P');
+            if (!(0, _util.isString)(p)) {
+              throw new _util.FormatError('Invalid prefix in PageLabel dictionary.');
+            }
+            prefix = (0, _util.stringToPDFString)(p);
+          } else {
+            prefix = '';
+          }
+          if (labelDict.has('St')) {
+            const st = labelDict.get('St');
+            if (!(Number.isInteger(st) && st >= 1)) {
+              throw new _util.FormatError('Invalid start in PageLabel dictionary.');
+            }
+            currentIndex = st;
+          } else {
+            currentIndex = 1;
+          }
+        }
+        switch (style) {
+          case 'D':
+            currentLabel = currentIndex;
+            break;
+          case 'R':
+          case 'r':
+            currentLabel = (0, _util.toRomanNumerals)(currentIndex, style === 'r');
+            break;
+          case 'A':
+          case 'a':
+            var LIMIT = 26;
+            var A_UPPER_CASE = 0x41,
                 A_LOWER_CASE = 0x61;
-          const baseCharCode = style === 'a' ? A_LOWER_CASE : A_UPPER_CASE;
-          const letterIndex = currentIndex - 1;
-          const character = String.fromCharCode(baseCharCode + letterIndex % LIMIT);
-          const charBuf = [];
-          for (let j = 0, jj = letterIndex / LIMIT | 0; j <= jj; j++) {
-            charBuf.push(character);
-          }
-          currentLabel = charBuf.join('');
-          break;
-        default:
-          if (style) {
-            throw new _util.FormatError(`Invalid style "${style}" in PageLabel dictionary.`);
-          }
-          currentLabel = '';
-      }
-      pageLabels[i] = prefix + currentLabel;
-      currentIndex++;
-    }
-    return pageLabels;
-  }
-  get pageMode() {
-    const obj = this.catDict.get('PageMode');
-    let pageMode = 'UseNone';
-    if ((0, _primitives.isName)(obj)) {
-      switch (obj.name) {
-        case 'UseNone':
-        case 'UseOutlines':
-        case 'UseThumbs':
-        case 'FullScreen':
-        case 'UseOC':
-        case 'UseAttachments':
-          pageMode = obj.name;
-      }
-    }
-    return (0, _util.shadow)(this, 'pageMode', pageMode);
-  }
-  get attachments() {
-    const obj = this.catDict.get('Names');
-    let attachments = null;
-    if (obj && obj.has('EmbeddedFiles')) {
-      const nameTree = new NameTree(obj.getRaw('EmbeddedFiles'), this.xref);
-      const names = nameTree.getAll();
-      for (const name in names) {
-        const fs = new FileSpec(names[name], this.xref);
-        if (!attachments) {
-          attachments = Object.create(null);
-        }
-        attachments[(0, _util.stringToPDFString)(name)] = fs.serializable;
-      }
-    }
-    return (0, _util.shadow)(this, 'attachments', attachments);
-  }
-  get javaScript() {
-    const obj = this.catDict.get('Names');
-    let javaScript = null;
-    function appendIfJavaScriptDict(jsDict) {
-      const type = jsDict.get('S');
-      if (!(0, _primitives.isName)(type, 'JavaScript')) {
-        return;
-      }
-      let js = jsDict.get('JS');
-      if ((0, _primitives.isStream)(js)) {
-        js = (0, _util.bytesToString)(js.getBytes());
-      } else if (!(0, _util.isString)(js)) {
-        return;
-      }
-      if (!javaScript) {
-        javaScript = [];
-      }
-      javaScript.push((0, _util.stringToPDFString)(js));
-    }
-    if (obj && obj.has('JavaScript')) {
-      const nameTree = new NameTree(obj.getRaw('JavaScript'), this.xref);
-      const names = nameTree.getAll();
-      for (const name in names) {
-        const jsDict = names[name];
-        if ((0, _primitives.isDict)(jsDict)) {
-          appendIfJavaScriptDict(jsDict);
-        }
-      }
-    }
-    const openActionDict = this.catDict.get('OpenAction');
-    if ((0, _primitives.isDict)(openActionDict, 'Action')) {
-      const actionType = openActionDict.get('S');
-      if ((0, _primitives.isName)(actionType, 'Named')) {
-        const action = openActionDict.get('N');
-        if ((0, _primitives.isName)(action, 'Print')) {
-          if (!javaScript) {
-            javaScript = [];
-          }
-          javaScript.push('print({});');
-        }
-      } else {
-        appendIfJavaScriptDict(openActionDict);
-      }
-    }
-    return (0, _util.shadow)(this, 'javaScript', javaScript);
-  }
-  cleanup() {
-    this.pageKidsCountCache.clear();
-    const promises = [];
-    this.fontCache.forEach(function (promise) {
-      promises.push(promise);
-    });
-    return Promise.all(promises).then(translatedFonts => {
-      for (let i = 0, ii = translatedFonts.length; i < ii; i++) {
-        const font = translatedFonts[i].dict;
-        delete font.translated;
-      }
-      this.fontCache.clear();
-      this.builtInCMapCache.clear();
-    });
-  }
-  getPageDict(pageIndex) {
-    const capability = (0, _util.createPromiseCapability)();
-    const nodesToVisit = [this.catDict.getRaw('Pages')];
-    const xref = this.xref,
+            var baseCharCode = style === 'a' ? A_LOWER_CASE : A_UPPER_CASE;
+            var letterIndex = currentIndex - 1;
+            var character = String.fromCharCode(baseCharCode + letterIndex % LIMIT);
+            var charBuf = [];
+            for (var j = 0, jj = letterIndex / LIMIT | 0; j <= jj; j++) {
+              charBuf.push(character);
+            }
+            currentLabel = charBuf.join('');
+            break;
+          default:
+            if (style) {
+              throw new _util.FormatError(`Invalid style "${style}" in PageLabel dictionary.`);
+            }
+            currentLabel = '';
+        }
+        pageLabels[i] = prefix + currentLabel;
+        currentIndex++;
+      }
+      return pageLabels;
+    },
+    get pageMode() {
+      let obj = this.catDict.get('PageMode');
+      let pageMode = 'UseNone';
+      if ((0, _primitives.isName)(obj)) {
+        switch (obj.name) {
+          case 'UseNone':
+          case 'UseOutlines':
+          case 'UseThumbs':
+          case 'FullScreen':
+          case 'UseOC':
+          case 'UseAttachments':
+            pageMode = obj.name;
+        }
+      }
+      return (0, _util.shadow)(this, 'pageMode', pageMode);
+    },
+    get attachments() {
+      var xref = this.xref;
+      var attachments = null,
+          nameTreeRef;
+      var obj = this.catDict.get('Names');
+      if (obj) {
+        nameTreeRef = obj.getRaw('EmbeddedFiles');
+      }
+      if (nameTreeRef) {
+        var nameTree = new NameTree(nameTreeRef, xref);
+        var names = nameTree.getAll();
+        for (var name in names) {
+          var fs = new FileSpec(names[name], xref);
+          if (!attachments) {
+            attachments = Object.create(null);
+          }
+          attachments[(0, _util.stringToPDFString)(name)] = fs.serializable;
+        }
+      }
+      return (0, _util.shadow)(this, 'attachments', attachments);
+    },
+    get javaScript() {
+      var xref = this.xref;
+      var obj = this.catDict.get('Names');
+      let javaScript = null;
+      function appendIfJavaScriptDict(jsDict) {
+        var type = jsDict.get('S');
+        if (!(0, _primitives.isName)(type, 'JavaScript')) {
+          return;
+        }
+        var js = jsDict.get('JS');
+        if ((0, _primitives.isStream)(js)) {
+          js = (0, _util.bytesToString)(js.getBytes());
+        } else if (!(0, _util.isString)(js)) {
+          return;
+        }
+        if (!javaScript) {
+          javaScript = [];
+        }
+        javaScript.push((0, _util.stringToPDFString)(js));
+      }
+      if (obj && obj.has('JavaScript')) {
+        var nameTree = new NameTree(obj.getRaw('JavaScript'), xref);
+        var names = nameTree.getAll();
+        for (var name in names) {
+          var jsDict = names[name];
+          if ((0, _primitives.isDict)(jsDict)) {
+            appendIfJavaScriptDict(jsDict);
+          }
+        }
+      }
+      var openactionDict = this.catDict.get('OpenAction');
+      if ((0, _primitives.isDict)(openactionDict, 'Action')) {
+        var actionType = openactionDict.get('S');
+        if ((0, _primitives.isName)(actionType, 'Named')) {
+          var action = openactionDict.get('N');
+          if ((0, _primitives.isName)(action, 'Print')) {
+            if (!javaScript) {
+              javaScript = [];
+            }
+            javaScript.push('print({});');
+          }
+        } else {
+          appendIfJavaScriptDict(openactionDict);
+        }
+      }
+      return (0, _util.shadow)(this, 'javaScript', javaScript);
+    },
+    cleanup: function Catalog_cleanup() {
+      this.pageKidsCountCache.clear();
+      var promises = [];
+      this.fontCache.forEach(function (promise) {
+        promises.push(promise);
+      });
+      return Promise.all(promises).then(translatedFonts => {
+        for (var i = 0, ii = translatedFonts.length; i < ii; i++) {
+          var font = translatedFonts[i].dict;
+          delete font.translated;
+        }
+        this.fontCache.clear();
+        this.builtInCMapCache.clear();
+      });
+    },
+    getPageDict: function Catalog_getPageDict(pageIndex) {
+      var capability = (0, _util.createPromiseCapability)();
+      var nodesToVisit = [this.catDict.getRaw('Pages')];
+      var count,
+          currentPageIndex = 0;
+      var xref = this.xref,
           pageKidsCountCache = this.pageKidsCountCache;
-    let count,
-        currentPageIndex = 0;
-    function next() {
-      while (nodesToVisit.length) {
-        const currentNode = nodesToVisit.pop();
-        if ((0, _primitives.isRef)(currentNode)) {
-          count = pageKidsCountCache.get(currentNode);
-          if (count > 0 && currentPageIndex + count < pageIndex) {
-            currentPageIndex += count;
-            continue;
-          }
-          xref.fetchAsync(currentNode).then(function (obj) {
-            if ((0, _primitives.isDict)(obj, 'Page') || (0, _primitives.isDict)(obj) && !obj.has('Kids')) {
-              if (pageIndex === currentPageIndex) {
-                if (currentNode && !pageKidsCountCache.has(currentNode)) {
-                  pageKidsCountCache.put(currentNode, 1);
-                }
-                capability.resolve([obj, currentNode]);
+      function next() {
+        while (nodesToVisit.length) {
+          var currentNode = nodesToVisit.pop();
+          if ((0, _primitives.isRef)(currentNode)) {
+            count = pageKidsCountCache.get(currentNode);
+            if (count > 0 && currentPageIndex + count < pageIndex) {
+              currentPageIndex += count;
+              continue;
+            }
+            xref.fetchAsync(currentNode).then(function (obj) {
+              if ((0, _primitives.isDict)(obj, 'Page') || (0, _primitives.isDict)(obj) && !obj.has('Kids')) {
+                if (pageIndex === currentPageIndex) {
+                  if (currentNode && !pageKidsCountCache.has(currentNode)) {
+                    pageKidsCountCache.put(currentNode, 1);
+                  }
+                  capability.resolve([obj, currentNode]);
+                } else {
+                  currentPageIndex++;
+                  next();
+                }
+                return;
+              }
+              nodesToVisit.push(obj);
+              next();
+            }, capability.reject);
+            return;
+          }
+          if (!(0, _primitives.isDict)(currentNode)) {
+            capability.reject(new _util.FormatError('page dictionary kid reference points to wrong type of object'));
+            return;
+          }
+          count = currentNode.get('Count');
+          if (Number.isInteger(count) && count >= 0) {
+            var objId = currentNode.objId;
+            if (objId && !pageKidsCountCache.has(objId)) {
+              pageKidsCountCache.put(objId, count);
+            }
+            if (currentPageIndex + count <= pageIndex) {
+              currentPageIndex += count;
+              continue;
+            }
+          }
+          var kids = currentNode.get('Kids');
+          if (!Array.isArray(kids)) {
+            if ((0, _primitives.isName)(currentNode.get('Type'), 'Page') || !currentNode.has('Type') && currentNode.has('Contents')) {
+              if (currentPageIndex === pageIndex) {
+                capability.resolve([currentNode, null]);
+                return;
+              }
+              currentPageIndex++;
+              continue;
+            }
+            capability.reject(new _util.FormatError('page dictionary kids object is not an array'));
+            return;
+          }
+          for (var last = kids.length - 1; last >= 0; last--) {
+            nodesToVisit.push(kids[last]);
+          }
+        }
+        capability.reject(new Error('Page index ' + pageIndex + ' not found.'));
+      }
+      next();
+      return capability.promise;
+    },
+    getPageIndex: function Catalog_getPageIndex(pageRef) {
+      var xref = this.xref;
+      function pagesBeforeRef(kidRef) {
+        var total = 0;
+        var parentRef;
+        return xref.fetchAsync(kidRef).then(function (node) {
+          if ((0, _primitives.isRefsEqual)(kidRef, pageRef) && !(0, _primitives.isDict)(node, 'Page') && !((0, _primitives.isDict)(node) && !node.has('Type') && node.has('Contents'))) {
+            throw new _util.FormatError('The reference does not point to a /Page Dict.');
+          }
+          if (!node) {
+            return null;
+          }
+          if (!(0, _primitives.isDict)(node)) {
+            throw new _util.FormatError('node must be a Dict.');
+          }
+          parentRef = node.getRaw('Parent');
+          return node.getAsync('Parent');
+        }).then(function (parent) {
+          if (!parent) {
+            return null;
+          }
+          if (!(0, _primitives.isDict)(parent)) {
+            throw new _util.FormatError('parent must be a Dict.');
+          }
+          return parent.getAsync('Kids');
+        }).then(function (kids) {
+          if (!kids) {
+            return null;
+          }
+          var kidPromises = [];
+          var found = false;
+          for (var i = 0; i < kids.length; i++) {
+            var kid = kids[i];
+            if (!(0, _primitives.isRef)(kid)) {
+              throw new _util.FormatError('kid must be a Ref.');
+            }
+            if ((0, _primitives.isRefsEqual)(kid, kidRef)) {
+              found = true;
+              break;
+            }
+            kidPromises.push(xref.fetchAsync(kid).then(function (kid) {
+              if (!(0, _primitives.isDict)(kid)) {
+                throw new _util.FormatError('kid node must be a Dict.');
+              }
+              if (kid.has('Count')) {
+                var count = kid.get('Count');
+                total += count;
               } else {
-                currentPageIndex++;
-                next();
-              }
-              return;
-            }
-            nodesToVisit.push(obj);
-            next();
-          }, capability.reject);
-          return;
-        }
-        if (!(0, _primitives.isDict)(currentNode)) {
-          capability.reject(new _util.FormatError('Page dictionary kid reference points to wrong type of object.'));
-          return;
-        }
-        count = currentNode.get('Count');
-        if (Number.isInteger(count) && count >= 0) {
-          const objId = currentNode.objId;
-          if (objId && !pageKidsCountCache.has(objId)) {
-            pageKidsCountCache.put(objId, count);
-          }
-          if (currentPageIndex + count <= pageIndex) {
-            currentPageIndex += count;
-            continue;
-          }
-        }
-        const kids = currentNode.get('Kids');
-        if (!Array.isArray(kids)) {
-          if ((0, _primitives.isName)(currentNode.get('Type'), 'Page') || !currentNode.has('Type') && currentNode.has('Contents')) {
-            if (currentPageIndex === pageIndex) {
-              capability.resolve([currentNode, null]);
-              return;
-            }
-            currentPageIndex++;
-            continue;
-          }
-          capability.reject(new _util.FormatError('Page dictionary kids object is not an array.'));
-          return;
-        }
-        for (let last = kids.length - 1; last >= 0; last--) {
-          nodesToVisit.push(kids[last]);
-        }
-      }
-      capability.reject(new Error(`Page index ${pageIndex} not found.`));
-    }
-    next();
-    return capability.promise;
-  }
-  getPageIndex(pageRef) {
-    const xref = this.xref;
-    function pagesBeforeRef(kidRef) {
-      let total = 0,
-          parentRef;
-      return xref.fetchAsync(kidRef).then(function (node) {
-        if ((0, _primitives.isRefsEqual)(kidRef, pageRef) && !(0, _primitives.isDict)(node, 'Page') && !((0, _primitives.isDict)(node) && !node.has('Type') && node.has('Contents'))) {
-          throw new _util.FormatError('The reference does not point to a /Page dictionary.');
-        }
-        if (!node) {
-          return null;
-        }
-        if (!(0, _primitives.isDict)(node)) {
-          throw new _util.FormatError('Node must be a dictionary.');
-        }
-        parentRef = node.getRaw('Parent');
-        return node.getAsync('Parent');
-      }).then(function (parent) {
-        if (!parent) {
-          return null;
-        }
-        if (!(0, _primitives.isDict)(parent)) {
-          throw new _util.FormatError('Parent must be a dictionary.');
-        }
-        return parent.getAsync('Kids');
-      }).then(function (kids) {
-        if (!kids) {
-          return null;
-        }
-        const kidPromises = [];
-        let found = false;
-        for (let i = 0, ii = kids.length; i < ii; i++) {
-          const kid = kids[i];
-          if (!(0, _primitives.isRef)(kid)) {
-            throw new _util.FormatError('Kid must be a reference.');
-          }
-          if ((0, _primitives.isRefsEqual)(kid, kidRef)) {
-            found = true;
-            break;
-          }
-          kidPromises.push(xref.fetchAsync(kid).then(function (kid) {
-            if (!(0, _primitives.isDict)(kid)) {
-              throw new _util.FormatError('Kid node must be a dictionary.');
-            }
-            if (kid.has('Count')) {
-              total += kid.get('Count');
-            } else {
-              total++;
-            }
-          }));
-        }
-        if (!found) {
-          throw new _util.FormatError('Kid reference not found in parent\'s kids.');
-        }
-        return Promise.all(kidPromises).then(function () {
-          return [total, parentRef];
-        });
-      });
-    }
-    let total = 0;
-    function next(ref) {
-      return pagesBeforeRef(ref).then(function (args) {
-        if (!args) {
-          return total;
-        }
-        const [count, parentRef] = args;
-        total += count;
-        return next(parentRef);
-      });
-    }
-    return next(pageRef);
-  }
-  static parseDestDictionary(params) {
+                total++;
+              }
+            }));
+          }
+          if (!found) {
+            throw new _util.FormatError('kid ref not found in parents kids');
+          }
+          return Promise.all(kidPromises).then(function () {
+            return [total, parentRef];
+          });
+        });
+      }
+      var total = 0;
+      function next(ref) {
+        return pagesBeforeRef(ref).then(function (args) {
+          if (!args) {
+            return total;
+          }
+          var count = args[0];
+          var parentRef = args[1];
+          total += count;
+          return next(parentRef);
+        });
+      }
+      return next(pageRef);
+    }
+  };
+  Catalog.parseDestDictionary = function Catalog_parseDestDictionary(params) {
     function addDefaultProtocolToUrl(url) {
       if (url.indexOf('www.') === 0) {
-        return `http://${url}`;
+        return 'http://' + url;
       }
       return url;
     }
     function tryConvertUrlEncoding(url) {
       try {
         return (0, _util.stringToUTF8String)(url);
       } catch (e) {
         return url;
       }
     }
-    const destDict = params.destDict;
+    var destDict = params.destDict;
     if (!(0, _primitives.isDict)(destDict)) {
-      (0, _util.warn)('parseDestDictionary: `destDict` must be a dictionary.');
-      return;
-    }
-    const resultObj = params.resultObj;
+      (0, _util.warn)('parseDestDictionary: "destDict" must be a dictionary.');
+      return;
+    }
+    var resultObj = params.resultObj;
     if (typeof resultObj !== 'object') {
-      (0, _util.warn)('parseDestDictionary: `resultObj` must be an object.');
-      return;
-    }
-    const docBaseUrl = params.docBaseUrl || null;
-    let action = destDict.get('A'),
+      (0, _util.warn)('parseDestDictionary: "resultObj" must be an object.');
+      return;
+    }
+    var docBaseUrl = params.docBaseUrl || null;
+    var action = destDict.get('A'),
         url,
         dest;
     if (!(0, _primitives.isDict)(action) && destDict.has('Dest')) {
       action = destDict.get('Dest');
     }
     if ((0, _primitives.isDict)(action)) {
-      const actionType = action.get('S');
+      let actionType = action.get('S');
       if (!(0, _primitives.isName)(actionType)) {
         (0, _util.warn)('parseDestDictionary: Invalid type in Action dictionary.');
         return;
       }
-      const actionName = actionType.name;
+      let actionName = actionType.name;
       switch (actionName) {
         case 'URI':
           url = action.get('URI');
           if ((0, _primitives.isName)(url)) {
             url = '/' + url.name;
           } else if ((0, _util.isString)(url)) {
             url = addDefaultProtocolToUrl(url);
           }
           break;
         case 'GoTo':
           dest = action.get('D');
           break;
         case 'Launch':
         case 'GoToR':
-          const urlDict = action.get('F');
+          var urlDict = action.get('F');
           if ((0, _primitives.isDict)(urlDict)) {
             url = urlDict.get('F') || null;
           } else if ((0, _util.isString)(urlDict)) {
             url = urlDict;
           }
-          let remoteDest = action.get('D');
+          var remoteDest = action.get('D');
           if (remoteDest) {
             if ((0, _primitives.isName)(remoteDest)) {
               remoteDest = remoteDest.name;
             }
             if ((0, _util.isString)(url)) {
-              const baseUrl = url.split('#')[0];
+              let baseUrl = url.split('#')[0];
               if ((0, _util.isString)(remoteDest)) {
                 url = baseUrl + '#' + remoteDest;
               } else if (Array.isArray(remoteDest)) {
                 url = baseUrl + '#' + JSON.stringify(remoteDest);
               }
             }
           }
-          const newWindow = action.get('NewWindow');
+          var newWindow = action.get('NewWindow');
           if ((0, _util.isBool)(newWindow)) {
             resultObj.newWindow = newWindow;
           }
           break;
         case 'Named':
-          const namedAction = action.get('N');
+          var namedAction = action.get('N');
           if ((0, _primitives.isName)(namedAction)) {
             resultObj.action = namedAction.name;
           }
           break;
         case 'JavaScript':
-          const jsAction = action.get('JS');
-          let js;
+          var jsAction = action.get('JS'),
+              js;
           if ((0, _primitives.isStream)(jsAction)) {
             js = (0, _util.bytesToString)(jsAction.getBytes());
           } else if ((0, _util.isString)(jsAction)) {
             js = jsAction;
           }
           if (js) {
-            const URL_OPEN_METHODS = ['app.launchURL', 'window.open'];
-            const regex = new RegExp('^\\s*(' + URL_OPEN_METHODS.join('|').split('.').join('\\.') + ')\\((?:\'|\")([^\'\"]*)(?:\'|\")(?:,\\s*(\\w+)\\)|\\))', 'i');
-            const jsUrl = regex.exec((0, _util.stringToPDFString)(js));
+            var URL_OPEN_METHODS = ['app.launchURL', 'window.open'];
+            var regex = new RegExp('^\\s*(' + URL_OPEN_METHODS.join('|').split('.').join('\\.') + ')\\((?:\'|\")([^\'\"]*)(?:\'|\")(?:,\\s*(\\w+)\\)|\\))', 'i');
+            var jsUrl = regex.exec((0, _util.stringToPDFString)(js));
             if (jsUrl && jsUrl[2]) {
               url = jsUrl[2];
               if (jsUrl[3] === 'true' && jsUrl[1] === 'app.launchURL') {
                 resultObj.newWindow = true;
               }
               break;
             }
           }
         default:
-          (0, _util.warn)(`parseDestDictionary: unsupported action type "${actionName}".`);
+          (0, _util.warn)(`parseDestDictionary: Unsupported Action type "${actionName}".`);
           break;
       }
     } else if (destDict.has('Dest')) {
       dest = destDict.get('Dest');
     }
     if ((0, _util.isString)(url)) {
       url = tryConvertUrlEncoding(url);
-      const absoluteUrl = (0, _util.createValidAbsoluteUrl)(url, docBaseUrl);
+      var absoluteUrl = (0, _util.createValidAbsoluteUrl)(url, docBaseUrl);
       if (absoluteUrl) {
         resultObj.url = absoluteUrl.href;
       }
       resultObj.unsafeUrl = url;
     }
     if (dest) {
       if ((0, _primitives.isName)(dest)) {
         dest = dest.name;
       }
       if ((0, _util.isString)(dest) || Array.isArray(dest)) {
         resultObj.dest = dest;
       }
     }
-  }
-}
+  };
+  return Catalog;
+}();
 var XRef = function XRefClosure() {
   function XRef(stream, pdfManager) {
     this.stream = stream;
     this.pdfManager = pdfManager;
     this.entries = [];
     this.xrefstms = Object.create(null);
     this.cache = [];
     this.stats = {
@@ -7918,87 +7884,76 @@ var Parser = function ParserClosure() {
       if (cacheKey !== undefined) {
         imageStream.cacheKey = 'inline_' + length + '_' + cacheKey;
         this.imageCache[cacheKey] = imageStream;
       }
       this.buf2 = _primitives.Cmd.get('EI');
       this.shift();
       return imageStream;
     },
-    _findStreamLength(startPos, signature) {
-      const { stream } = this.lexer;
-      stream.pos = startPos;
-      const SCAN_BLOCK_LENGTH = 2048;
-      const signatureLength = signature.length;
-      while (stream.pos < stream.end) {
-        const scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH);
-        const scanLength = scanBytes.length - signatureLength;
-        if (scanLength <= 0) {
-          break;
-        }
-        let pos = 0;
-        while (pos < scanLength) {
-          let j = 0;
-          while (j < signatureLength && scanBytes[pos + j] === signature[j]) {
-            j++;
-          }
-          if (j >= signatureLength) {
-            stream.pos += pos;
-            return stream.pos - startPos;
-          }
-          pos++;
-        }
-        stream.pos += scanLength;
-      }
-      return -1;
-    },
     makeStream: function Parser_makeStream(dict, cipherTransform) {
       var lexer = this.lexer;
       var stream = lexer.stream;
       lexer.skipToNextLine();
-      const startPos = stream.pos - 1;
+      var pos = stream.pos - 1;
       var length = dict.get('Length');
       if (!Number.isInteger(length)) {
         (0, _util.info)('Bad ' + length + ' attribute in stream');
         length = 0;
       }
-      stream.pos = startPos + length;
+      stream.pos = pos + length;
       lexer.nextChar();
       if (this.tryShift() && (0, _primitives.isCmd)(this.buf2, 'endstream')) {
         this.shift();
       } else {
-        const ENDSTREAM_SIGNATURE = new Uint8Array([0x65, 0x6E, 0x64, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6D]);
-        let actualLength = this._findStreamLength(startPos, ENDSTREAM_SIGNATURE);
-        if (actualLength < 0) {
-          const MAX_TRUNCATION = 1;
-          for (let i = 1; i <= MAX_TRUNCATION; i++) {
-            const end = ENDSTREAM_SIGNATURE.length - i;
-            const TRUNCATED_SIGNATURE = ENDSTREAM_SIGNATURE.slice(0, end);
-            let maybeLength = this._findStreamLength(startPos, TRUNCATED_SIGNATURE);
-            if (maybeLength >= 0) {
-              const lastByte = stream.peekBytes(end + 1)[end];
-              if (!(0, _util.isSpace)(lastByte)) {
-                break;
-              }
-              (0, _util.info)(`Found "${(0, _util.bytesToString)(TRUNCATED_SIGNATURE)}" when ` + 'searching for endstream command.');
-              actualLength = maybeLength;
-              break;
-            }
-          }
-          if (actualLength < 0) {
-            throw new _util.FormatError('Missing endstream command.');
-          }
-        }
-        length = actualLength;
+        stream.pos = pos;
+        var SCAN_BLOCK_SIZE = 2048;
+        var ENDSTREAM_SIGNATURE_LENGTH = 9;
+        var ENDSTREAM_SIGNATURE = [0x65, 0x6E, 0x64, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6D];
+        var skipped = 0,
+            found = false,
+            i,
+            j;
+        while (stream.pos < stream.end) {
+          var scanBytes = stream.peekBytes(SCAN_BLOCK_SIZE);
+          var scanLength = scanBytes.length - ENDSTREAM_SIGNATURE_LENGTH;
+          if (scanLength <= 0) {
+            break;
+          }
+          found = false;
+          i = 0;
+          while (i < scanLength) {
+            j = 0;
+            while (j < ENDSTREAM_SIGNATURE_LENGTH && scanBytes[i + j] === ENDSTREAM_SIGNATURE[j]) {
+              j++;
+            }
+            if (j >= ENDSTREAM_SIGNATURE_LENGTH) {
+              found = true;
+              break;
+            }
+            i++;
+          }
+          if (found) {
+            skipped += i;
+            stream.pos += i;
+            break;
+          }
+          skipped += scanLength;
+          stream.pos += scanLength;
+        }
+        if (!found) {
+          throw new _util.FormatError('Missing endstream');
+        }
+        length = skipped;
         lexer.nextChar();
         this.shift();
         this.shift();
       }
       this.shift();
-      stream = stream.makeSubStream(startPos, length, dict);
+      stream = stream.makeSubStream(pos, length, dict);
       if (cipherTransform) {
         stream = cipherTransform.createStream(stream, length);
       }
       stream = this.filter(stream, dict, length);
       stream.dict = dict;
       return stream;
     },
     filter: function Parser_filter(stream, dict, length) {
@@ -12441,22 +12396,17 @@ let JpegStream = function JpegStreamClos
     if ((0, _primitives.isDict)(this.params)) {
       let colorTransform = this.params.get('ColorTransform');
       if (Number.isInteger(colorTransform)) {
         jpegOptions.colorTransform = colorTransform;
       }
     }
     const jpegImage = new _jpg.JpegImage(jpegOptions);
     jpegImage.parse(this.bytes);
-    let data = jpegImage.getData({
-      width: this.drawWidth,
-      height: this.drawHeight,
-      forceRGB: this.forceRGB,
-      isSourcePDF: true
-    });
+    let data = jpegImage.getData(this.drawWidth, this.drawHeight, this.forceRGB);
     this.buffer = data;
     this.bufferLength = data.length;
     this.eof = true;
   };
   JpegStream.prototype.getIR = function (forceDataSchema = false) {
     return (0, _util.createObjectURL)(this.bytes, 'image/jpeg', forceDataSchema);
   };
   return JpegStream;
@@ -13282,17 +13232,17 @@ var JpegImage = function JpegImageClosur
           scaleX: component.h / frame.maxH,
           scaleY: component.v / frame.maxV,
           blocksPerLine: component.blocksPerLine,
           blocksPerColumn: component.blocksPerColumn
         });
       }
       this.numComponents = this.components.length;
     },
-    _getLinearizedBlockData(width, height, isSourcePDF = false) {
+    _getLinearizedBlockData: function getLinearizedBlockData(width, height) {
       var scaleX = this.width / width,
           scaleY = this.height / height;
       var component, componentScaleX, componentScaleY, blocksPerScanline;
       var x, y, i, j, k;
       var index;
       var offset = 0;
       var output;
       var numComponents = this.components.length;
@@ -13315,30 +13265,27 @@ var JpegImage = function JpegImageClosur
           j = 0 | y * componentScaleY;
           index = blocksPerScanline * (j & mask3LSB) | (j & 7) << 3;
           for (x = 0; x < width; x++) {
             data[offset] = output[index + xScaleBlockOffset[x]];
             offset += numComponents;
           }
         }
       }
-      let transform = this._decodeTransform;
-      if (!transform && numComponents === 4 && !isSourcePDF) {
-        transform = new Int32Array([-256, 255, -256, 255, -256, 255, -256, 255]);
-      }
+      const transform = this._decodeTransform;
       if (transform) {
         for (i = 0; i < dataLength;) {
           for (j = 0, k = 0; j < numComponents; j++, i++, k += 2) {
             data[i] = (data[i] * transform[k] >> 8) + transform[k + 1];
           }
         }
       }
       return data;
     },
-    get _isColorConversionNeeded() {
+    _isColorConversionNeeded() {
       if (this.adobe) {
         return !!this.adobe.transformCode;
       }
       if (this.numComponents === 3) {
         if (this._colorTransform === 0) {
           return false;
         }
         return true;
@@ -13396,41 +13343,41 @@ var JpegImage = function JpegImageClosur
         y = data[i + 2] * scale;
         k = data[i + 3] * scale;
         data[offset++] = 255 + c * (-4.387332384609988 * c + 54.48615194189176 * m + 18.82290502165302 * y + 212.25662451639585 * k - 285.2331026137004) + m * (1.7149763477362134 * m - 5.6096736904047315 * y - 17.873870861415444 * k - 5.497006427196366) + y * (-2.5217340131683033 * y - 21.248923337353073 * k + 17.5119270841813) - k * (21.86122147463605 * k + 189.48180835922747);
         data[offset++] = 255 + c * (8.841041422036149 * c + 60.118027045597366 * m + 6.871425592049007 * y + 31.159100130055922 * k - 79.2970844816548) + m * (-15.310361306967817 * m + 17.575251261109482 * y + 131.35250912493976 * k - 190.9453302588951) + y * (4.444339102852739 * y + 9.8632861493405 * k - 24.86741582555878) - k * (20.737325471181034 * k + 187.80453709719578);
         data[offset++] = 255 + c * (0.8842522430003296 * c + 8.078677503112928 * m + 30.89978309703729 * y - 0.23883238689178934 * k - 14.183576799673286) + m * (10.49593273432072 * m + 63.02378494754052 * y + 50.606957656360734 * k - 112.23884253719248) + y * (0.03296041114873217 * y + 115.60384449646641 * k - 193.58209356861505) - k * (22.33816807309886 * k + 180.12613974708367);
       }
       return data.subarray(0, offset);
     },
-    getData({ width, height, forceRGB = false, isSourcePDF = false }) {
+    getData: function getData(width, height, forceRGBoutput) {
       if (this.numComponents > 4) {
         throw new JpegError('Unsupported color mode');
       }
-      var data = this._getLinearizedBlockData(width, height, isSourcePDF);
-      if (this.numComponents === 1 && forceRGB) {
+      var data = this._getLinearizedBlockData(width, height);
+      if (this.numComponents === 1 && forceRGBoutput) {
         var dataLength = data.length;
         var rgbData = new Uint8ClampedArray(dataLength * 3);
         var offset = 0;
         for (var i = 0; i < dataLength; i++) {
           var grayColor = data[i];
           rgbData[offset++] = grayColor;
           rgbData[offset++] = grayColor;
           rgbData[offset++] = grayColor;
         }
         return rgbData;
-      } else if (this.numComponents === 3 && this._isColorConversionNeeded) {
+      } else if (this.numComponents === 3 && this._isColorConversionNeeded()) {
         return this._convertYccToRgb(data);
       } else if (this.numComponents === 4) {
-        if (this._isColorConversionNeeded) {
-          if (forceRGB) {
+        if (this._isColorConversionNeeded()) {
+          if (forceRGBoutput) {
             return this._convertYcckToRgb(data);
           }
           return this._convertYcckToCmyk(data);
-        } else if (forceRGB) {
+        } else if (forceRGBoutput) {
           return this._convertCmykToRgb(data);
         }
       }
       return data;
     }
   };
   return JpegImage;
 }();
@@ -16790,174 +16737,176 @@ Object.defineProperty(exports, "__esModu
   value: true
 });
 exports.ColorSpace = undefined;
 
 var _util = __w_pdfjs_require__(2);
 
 var _primitives = __w_pdfjs_require__(12);
 
-function resizeRgbImage(src, dest, w1, h1, w2, h2, alpha01) {
-  const COMPONENTS = 3;
-  alpha01 = alpha01 !== 1 ? 0 : alpha01;
-  let xRatio = w1 / w2;
-  let yRatio = h1 / h2;
-  let newIndex = 0,
-      oldIndex;
-  let xScaled = new Uint16Array(w2);
-  let w1Scanline = w1 * COMPONENTS;
-  for (let i = 0; i < w2; i++) {
-    xScaled[i] = Math.floor(i * xRatio) * COMPONENTS;
-  }
-  for (let i = 0; i < h2; i++) {
-    const py = Math.floor(i * yRatio) * w1Scanline;
-    for (let j = 0; j < w2; j++) {
-      oldIndex = py + xScaled[j];
-      dest[newIndex++] = src[oldIndex++];
-      dest[newIndex++] = src[oldIndex++];
-      dest[newIndex++] = src[oldIndex++];
-      newIndex += alpha01;
-    }
-  }
-}
-class ColorSpace {
-  constructor(name, numComps) {
-    if (this.constructor === ColorSpace) {
-      (0, _util.unreachable)('Cannot initialize ColorSpace.');
-    }
-    this.name = name;
-    this.numComps = numComps;
-  }
-  getRgb(src, srcOffset) {
-    let rgb = new Uint8ClampedArray(3);
-    this.getRgbItem(src, srcOffset, rgb, 0);
-    return rgb;
-  }
-  getRgbItem(src, srcOffset, dest, destOffset) {
-    (0, _util.unreachable)('Should not call ColorSpace.getRgbItem');
-  }
-  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
-    (0, _util.unreachable)('Should not call ColorSpace.getRgbBuffer');
-  }
-  getOutputLength(inputLength, alpha01) {
-    (0, _util.unreachable)('Should not call ColorSpace.getOutputLength');
-  }
-  isPassthrough(bits) {
-    return false;
-  }
-  fillRgb(dest, originalWidth, originalHeight, width, height, actualHeight, bpc, comps, alpha01) {
-    let count = originalWidth * originalHeight;
-    let rgbBuf = null;
-    let numComponentColors = 1 << bpc;
-    let needsResizing = originalHeight !== height || originalWidth !== width;
-    if (this.isPassthrough(bpc)) {
-      rgbBuf = comps;
-    } else if (this.numComps === 1 && count > numComponentColors && this.name !== 'DeviceGray' && this.name !== 'DeviceRGB') {
-      let allColors = bpc <= 8 ? new Uint8Array(numComponentColors) : new Uint16Array(numComponentColors);
-      for (let i = 0; i < numComponentColors; i++) {
-        allColors[i] = i;
-      }
-      let colorMap = new Uint8ClampedArray(numComponentColors * 3);
-      this.getRgbBuffer(allColors, 0, numComponentColors, colorMap, 0, bpc, 0);
-      if (!needsResizing) {
-        let destPos = 0;
-        for (let i = 0; i < count; ++i) {
-          const key = comps[i] * 3;
-          dest[destPos++] = colorMap[key];
-          dest[destPos++] = colorMap[key + 1];
-          dest[destPos++] = colorMap[key + 2];
-          destPos += alpha01;
-        }
-      } else {
-        rgbBuf = new Uint8Array(count * 3);
-        let rgbPos = 0;
-        for (let i = 0; i < count; ++i) {
-          const key = comps[i] * 3;
-          rgbBuf[rgbPos++] = colorMap[key];
-          rgbBuf[rgbPos++] = colorMap[key + 1];
-          rgbBuf[rgbPos++] = colorMap[key + 2];
-        }
-      }
-    } else {
-      if (!needsResizing) {
-        this.getRgbBuffer(comps, 0, width * actualHeight, dest, 0, bpc, alpha01);
-      } else {
-        rgbBuf = new Uint8ClampedArray(count * 3);
-        this.getRgbBuffer(comps, 0, count, rgbBuf, 0, bpc, 0);
-      }
-    }
-    if (rgbBuf) {
-      if (needsResizing) {
-        resizeRgbImage(rgbBuf, dest, originalWidth, originalHeight, width, height, alpha01);
-      } else {
-        let destPos = 0,
-            rgbPos = 0;
-        for (let i = 0, ii = width * actualHeight; i < ii; i++) {
-          dest[destPos++] = rgbBuf[rgbPos++];
-          dest[destPos++] = rgbBuf[rgbPos++];
-          dest[destPos++] = rgbBuf[rgbPos++];
-          destPos += alpha01;
-        }
-      }
-    }
-  }
-  get usesZeroToOneRange() {
-    return (0, _util.shadow)(this, 'usesZeroToOneRange', true);
-  }
-  static parse(cs, xref, res, pdfFunctionFactory) {
-    let IR = this.parseToIR(cs, xref, res, pdfFunctionFactory);
-    return this.fromIR(IR);
-  }
-  static fromIR(IR) {
-    let name = Array.isArray(IR) ? IR[0] : IR;
-    let whitePoint, blackPoint, gamma;
+var ColorSpace = function ColorSpaceClosure() {
+  function resizeRgbImage(src, dest, w1, h1, w2, h2, alpha01) {
+    var COMPONENTS = 3;
+    alpha01 = alpha01 !== 1 ? 0 : alpha01;
+    var xRatio = w1 / w2;
+    var yRatio = h1 / h2;
+    var i,
+        j,
+        py,
+        newIndex = 0,
+        oldIndex;
+    var xScaled = new Uint16Array(w2);
+    var w1Scanline = w1 * COMPONENTS;
+    for (i = 0; i < w2; i++) {
+      xScaled[i] = Math.floor(i * xRatio) * COMPONENTS;
+    }
+    for (i = 0; i < h2; i++) {
+      py = Math.floor(i * yRatio) * w1Scanline;
+      for (j = 0; j < w2; j++) {
+        oldIndex = py + xScaled[j];
+        dest[newIndex++] = src[oldIndex++];
+        dest[newIndex++] = src[oldIndex++];
+        dest[newIndex++] = src[oldIndex++];
+        newIndex += alpha01;
+      }
+    }
+  }
+  function ColorSpace() {
+    (0, _util.unreachable)('should not call ColorSpace constructor');
+  }
+  ColorSpace.prototype = {
+    getRgb(src, srcOffset) {
+      let rgb = new Uint8ClampedArray(3);
+      this.getRgbItem(src, srcOffset, rgb, 0);
+      return rgb;
+    },
+    getRgbItem(src, srcOffset, dest, destOffset) {
+      (0, _util.unreachable)('Should not call ColorSpace.getRgbItem');
+    },
+    getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
+      (0, _util.unreachable)('Should not call ColorSpace.getRgbBuffer');
+    },
+    getOutputLength(inputLength, alpha01) {
+      (0, _util.unreachable)('Should not call ColorSpace.getOutputLength');
+    },
+    isPassthrough(bits) {
+      return false;
+    },
+    fillRgb(dest, originalWidth, originalHeight, width, height, actualHeight, bpc, comps, alpha01) {
+      var count = originalWidth * originalHeight;
+      var rgbBuf = null;
+      var numComponentColors = 1 << bpc;
+      var needsResizing = originalHeight !== height || originalWidth !== width;
+      var i, ii;
+      if (this.isPassthrough(bpc)) {
+        rgbBuf = comps;
+      } else if (this.numComps === 1 && count > numComponentColors && this.name !== 'DeviceGray' && this.name !== 'DeviceRGB') {
+        var allColors = bpc <= 8 ? new Uint8Array(numComponentColors) : new Uint16Array(numComponentColors);
+        var key;
+        for (i = 0; i < numComponentColors; i++) {
+          allColors[i] = i;
+        }
+        var colorMap = new Uint8ClampedArray(numComponentColors * 3);
+        this.getRgbBuffer(allColors, 0, numComponentColors, colorMap, 0, bpc, 0);
+        var destPos, rgbPos;
+        if (!needsResizing) {
+          destPos = 0;
+          for (i = 0; i < count; ++i) {
+            key = comps[i] * 3;
+            dest[destPos++] = colorMap[key];
+            dest[destPos++] = colorMap[key + 1];
+            dest[destPos++] = colorMap[key + 2];
+            destPos += alpha01;
+          }
+        } else {
+          rgbBuf = new Uint8Array(count * 3);
+          rgbPos = 0;
+          for (i = 0; i < count; ++i) {
+            key = comps[i] * 3;
+            rgbBuf[rgbPos++] = colorMap[key];
+            rgbBuf[rgbPos++] = colorMap[key + 1];
+            rgbBuf[rgbPos++] = colorMap[key + 2];
+          }
+        }
+      } else {
+        if (!needsResizing) {
+          this.getRgbBuffer(comps, 0, width * actualHeight, dest, 0, bpc, alpha01);
+        } else {
+          rgbBuf = new Uint8ClampedArray(count * 3);
+          this.getRgbBuffer(comps, 0, count, rgbBuf, 0, bpc, 0);
+        }
+      }
+      if (rgbBuf) {
+        if (needsResizing) {
+          resizeRgbImage(rgbBuf, dest, originalWidth, originalHeight, width, height, alpha01);
+        } else {
+          rgbPos = 0;
+          destPos = 0;
+          for (i = 0, ii = width * actualHeight; i < ii; i++) {
+            dest[destPos++] = rgbBuf[rgbPos++];
+            dest[destPos++] = rgbBuf[rgbPos++];
+            dest[destPos++] = rgbBuf[rgbPos++];
+            destPos += alpha01;
+          }
+        }
+      }
+    },
+    usesZeroToOneRange: true
+  };
+  ColorSpace.parse = function (cs, xref, res, pdfFunctionFactory) {
+    let IR = ColorSpace.parseToIR(cs, xref, res, pdfFunctionFactory);
+    return ColorSpace.fromIR(IR);
+  };
+  ColorSpace.fromIR = function (IR) {
+    var name = Array.isArray(IR) ? IR[0] : IR;
+    var whitePoint, blackPoint, gamma;
     switch (name) {
       case 'DeviceGrayCS':
         return this.singletons.gray;
       case 'DeviceRgbCS':
         return this.singletons.rgb;
       case 'DeviceCmykCS':
         return this.singletons.cmyk;
       case 'CalGrayCS':
         whitePoint = IR[1];
         blackPoint = IR[2];
         gamma = IR[3];
         return new CalGrayCS(whitePoint, blackPoint, gamma);
       case 'CalRGBCS':
         whitePoint = IR[1];
         blackPoint = IR[2];
         gamma = IR[3];
-        let matrix = IR[4];
+        var matrix = IR[4];
         return new CalRGBCS(whitePoint, blackPoint, gamma, matrix);
       case 'PatternCS':
-        let basePatternCS = IR[1];
+        var basePatternCS = IR[1];
         if (basePatternCS) {
-          basePatternCS = this.fromIR(basePatternCS);
+          basePatternCS = ColorSpace.fromIR(basePatternCS);
         }
         return new PatternCS(basePatternCS);
       case 'IndexedCS':
-        let baseIndexedCS = IR[1];
-        let hiVal = IR[2];
-        let lookup = IR[3];
-        return new IndexedCS(this.fromIR(baseIndexedCS), hiVal, lookup);
+        var baseIndexedCS = IR[1];
+        var hiVal = IR[2];
+        var lookup = IR[3];
+        return new IndexedCS(ColorSpace.fromIR(baseIndexedCS), hiVal, lookup);
       case 'AlternateCS':
-        let numComps = IR[1];
-        let alt = IR[2];
-        let tintFn = IR[3];
-        return new AlternateCS(numComps, this.fromIR(alt), tintFn);
+        var numComps = IR[1];
+        var alt = IR[2];
+        var tintFn = IR[3];
+        return new AlternateCS(numComps, ColorSpace.fromIR(alt), tintFn);
       case 'LabCS':
         whitePoint = IR[1];
         blackPoint = IR[2];
-        let range = IR[3];
+        var range = IR[3];
         return new LabCS(whitePoint, blackPoint, range);
       default:
         throw new _util.FormatError(`Unknown colorspace name: ${name}`);
     }
-  }
-  static parseToIR(cs, xref, res = null, pdfFunctionFactory) {
+  };
+  ColorSpace.parseToIR = function (cs, xref, res = null, pdfFunctionFactory) {
     cs = xref.fetchIfRef(cs);
     if ((0, _primitives.isName)(cs)) {
       switch (cs.name) {
         case 'DeviceGray':
         case 'G':
           return 'DeviceGrayCS';
         case 'DeviceRGB':
         case 'RGB':
@@ -16969,29 +16918,29 @@ class ColorSpace {
           return ['PatternCS', null];
         default:
           if ((0, _primitives.isDict)(res)) {
             let colorSpaces = res.get('ColorSpace');
             if ((0, _primitives.isDict)(colorSpaces)) {
               let resCS = colorSpaces.get(cs.name);
               if (resCS) {
                 if ((0, _primitives.isName)(resCS)) {
-                  return this.parseToIR(resCS, xref, res, pdfFunctionFactory);
+                  return ColorSpace.parseToIR(resCS, xref, res, pdfFunctionFactory);
                 }
                 cs = resCS;
                 break;
               }
             }
           }
           throw new _util.FormatError(`unrecognized colorspace ${cs.name}`);
       }
     }
     if (Array.isArray(cs)) {
-      let mode = xref.fetchIfRef(cs[0]).name;
-      let numComps, params, alt, whitePoint, blackPoint, gamma;
+      var mode = xref.fetchIfRef(cs[0]).name;
+      var numComps, params, alt, whitePoint, blackPoint, gamma;
       switch (mode) {
         case 'DeviceGray':
         case 'G':
           return 'DeviceGrayCS';
         case 'DeviceRGB':
         case 'RGB':
           return 'DeviceRgbCS';
         case 'DeviceCMYK':
@@ -17003,381 +16952,475 @@ class ColorSpace {
           blackPoint = params.getArray('BlackPoint');
           gamma = params.get('Gamma');
           return ['CalGrayCS', whitePoint, blackPoint, gamma];
         case 'CalRGB':
           params = xref.fetchIfRef(cs[1]);
           whitePoint = params.getArray('WhitePoint');
           blackPoint = params.getArray('BlackPoint');
           gamma = params.getArray('Gamma');
-          let matrix = params.getArray('Matrix');
+          var matrix = params.getArray('Matrix');
           return ['CalRGBCS', whitePoint, blackPoint, gamma, matrix];
         case 'ICCBased':
-          let stream = xref.fetchIfRef(cs[1]);
-          let dict = stream.dict;
+          var stream = xref.fetchIfRef(cs[1]);
+          var dict = stream.dict;
           numComps = dict.get('N');
           alt = dict.get('Alternate');
           if (alt) {
-            let altIR = this.parseToIR(alt, xref, res, pdfFunctionFactory);
-            let altCS = this.fromIR(altIR, pdfFunctionFactory);
+            var altIR = ColorSpace.parseToIR(alt, xref, res, pdfFunctionFactory);
+            var altCS = ColorSpace.fromIR(altIR, pdfFunctionFactory);
             if (altCS.numComps === numComps) {
               return altIR;
             }
             (0, _util.warn)('ICCBased color space: Ignoring incorrect /Alternate entry.');
           }
           if (numComps === 1) {
             return 'DeviceGrayCS';
           } else if (numComps === 3) {
             return 'DeviceRgbCS';
           } else if (numComps === 4) {
             return 'DeviceCmykCS';
           }
           break;
         case 'Pattern':
-          let basePatternCS = cs[1] || null;
+          var basePatternCS = cs[1] || null;
           if (basePatternCS) {
-            basePatternCS = this.parseToIR(basePatternCS, xref, res, pdfFunctionFactory);
+            basePatternCS = ColorSpace.parseToIR(basePatternCS, xref, res, pdfFunctionFactory);
           }
           return ['PatternCS', basePatternCS];
         case 'Indexed':
         case 'I':
-          let baseIndexedCS = this.parseToIR(cs[1], xref, res, pdfFunctionFactory);
-          let hiVal = xref.fetchIfRef(cs[2]) + 1;
-          let lookup = xref.fetchIfRef(cs[3]);
+          var baseIndexedCS = ColorSpace.parseToIR(cs[1], xref, res, pdfFunctionFactory);
+          var hiVal = xref.fetchIfRef(cs[2]) + 1;
+          var lookup = xref.fetchIfRef(cs[3]);
           if ((0, _primitives.isStream)(lookup)) {
             lookup = lookup.getBytes();
           }
           return ['IndexedCS', baseIndexedCS, hiVal, lookup];
         case 'Separation':
         case 'DeviceN':
-          let name = xref.fetchIfRef(cs[1]);
+          var name = xref.fetchIfRef(cs[1]);
           numComps = Array.isArray(name) ? name.length : 1;
-          alt = this.parseToIR(cs[2], xref, res, pdfFunctionFactory);
+          alt = ColorSpace.parseToIR(cs[2], xref, res, pdfFunctionFactory);
           let tintFn = pdfFunctionFactory.create(xref.fetchIfRef(cs[3]));
           return ['AlternateCS', numComps, alt, tintFn];
         case 'Lab':
           params = xref.fetchIfRef(cs[1]);
           whitePoint = params.getArray('WhitePoint');
           blackPoint = params.getArray('BlackPoint');
-          let range = params.getArray('Range');
+          var range = params.getArray('Range');
           return ['LabCS', whitePoint, blackPoint, range];
         default:
           throw new _util.FormatError(`unimplemented color space object "${mode}"`);
       }
     }
     throw new _util.FormatError(`unrecognized color space object: "${cs}"`);
-  }
-  static isDefaultDecode(decode, n) {
+  };
+  ColorSpace.isDefaultDecode = function (decode, n) {
     if (!Array.isArray(decode)) {
       return true;
     }
     if (n * 2 !== decode.length) {
       (0, _util.warn)('The decode map is not the correct length');
       return true;
     }
-    for (let i = 0, ii = decode.length; i < ii; i += 2) {
+    for (var i = 0, ii = decode.length; i < ii; i += 2) {
       if (decode[i] !== 0 || decode[i + 1] !== 1) {
         return false;
       }
     }
     return true;
-  }
-  static get singletons() {
-    return (0, _util.shadow)(this, 'singletons', {
-      get gray() {
-        return (0, _util.shadow)(this, 'gray', new DeviceGrayCS());
-      },
-      get rgb() {
-        return (0, _util.shadow)(this, 'rgb', new DeviceRgbCS());
-      },
-      get cmyk() {
-        return (0, _util.shadow)(this, 'cmyk', new DeviceCmykCS());
-      }
-    });
-  }
-}
-class AlternateCS extends ColorSpace {
-  constructor(numComps, base, tintFn) {
-    super('Alternate', numComps);
+  };
+  ColorSpace.singletons = {
+    get gray() {
+      return (0, _util.shadow)(this, 'gray', new DeviceGrayCS());
+    },
+    get rgb() {
+      return (0, _util.shadow)(this, 'rgb', new DeviceRgbCS());
+    },
+    get cmyk() {
+      return (0, _util.shadow)(this, 'cmyk', new DeviceCmykCS());
+    }
+  };
+  return ColorSpace;
+}();
+var AlternateCS = function AlternateCSClosure() {
+  function AlternateCS(numComps, base, tintFn) {
+    this.name = 'Alternate';
+    this.numComps = numComps;
+    this.defaultColor = new Float32Array(numComps);
+    for (var i = 0; i < numComps; ++i) {
+      this.defaultColor[i] = 1;
+    }
     this.base = base;
     this.tintFn = tintFn;
     this.tmpBuf = new Float32Array(base.numComps);
   }
-  getRgbItem(src, srcOffset, dest, destOffset) {
-    let tmpBuf = this.tmpBuf;
-    this.tintFn(src, srcOffset, tmpBuf, 0);
-    this.base.getRgbItem(tmpBuf, 0, dest, destOffset);
-  }
-  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
-    let tintFn = this.tintFn;
-    let base = this.base;
-    let scale = 1 / ((1 << bits) - 1);
-    let baseNumComps = base.numComps;
-    let usesZeroToOneRange = base.usesZeroToOneRange;
-    let isPassthrough = (base.isPassthrough(8) || !usesZeroToOneRange) && alpha01 === 0;
-    let pos = isPassthrough ? destOffset : 0;
-    let baseBuf = isPassthrough ? dest : new Uint8ClampedArray(baseNumComps * count);
-    let numComps = this.numComps;
-    let scaled = new Float32Array(numComps);
-    let tinted = new Float32Array(baseNumComps);
-    let i, j;
-    for (i = 0; i < count; i++) {
-      for (j = 0; j < numComps; j++) {
-        scaled[j] = src[srcOffset++] * scale;
-      }
-      tintFn(scaled, 0, tinted, 0);
-      if (usesZeroToOneRange) {
-        for (j = 0; j < baseNumComps; j++) {
-          baseBuf[pos++] = tinted[j] * 255;
-        }
-      } else {
-        base.getRgbItem(tinted, 0, baseBuf, pos);
-        pos += baseNumComps;
-      }
-    }
-    if (!isPassthrough) {
-      base.getRgbBuffer(baseBuf, 0, count, dest, destOffset, 8, alpha01);
-    }
-  }
-  getOutputLength(inputLength, alpha01) {
-    return this.base.getOutputLength(inputLength * this.base.numComps / this.numComps, alpha01);
-  }
-  isDefaultDecode(decodeMap) {
-    return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
-  }
-}
-class PatternCS extends ColorSpace {
-  constructor(baseCS) {
-    super('Pattern', null);
+  AlternateCS.prototype = {
+    getRgb: ColorSpace.prototype.getRgb,
+    getRgbItem(src, srcOffset, dest, destOffset) {
+      var tmpBuf = this.tmpBuf;
+      this.tintFn(src, srcOffset, tmpBuf, 0);
+      this.base.getRgbItem(tmpBuf, 0, dest, destOffset);
+    },
+    getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
+      var tintFn = this.tintFn;
+      var base = this.base;
+      var scale = 1 / ((1 << bits) - 1);
+      var baseNumComps = base.numComps;
+      var usesZeroToOneRange = base.usesZeroToOneRange;
+      var isPassthrough = (base.isPassthrough(8) || !usesZeroToOneRange) && alpha01 === 0;
+      var pos = isPassthrough ? destOffset : 0;
+      let baseBuf = isPassthrough ? dest : new Uint8ClampedArray(baseNumComps * count);
+      var numComps = this.numComps;
+      var scaled = new Float32Array(numComps);
+      var tinted = new Float32Array(baseNumComps);
+      var i, j;
+      for (i = 0; i < count; i++) {
+        for (j = 0; j < numComps; j++) {
+          scaled[j] = src[srcOffset++] * scale;
+        }
+        tintFn(scaled, 0, tinted, 0);
+        if (usesZeroToOneRange) {
+          for (j = 0; j < baseNumComps; j++) {
+            baseBuf[pos++] = tinted[j] * 255;
+          }
+        } else {
+          base.getRgbItem(tinted, 0, baseBuf, pos);
+          pos += baseNumComps;
+        }
+      }
+      if (!isPassthrough) {
+        base.getRgbBuffer(baseBuf, 0, count, dest, destOffset, 8, alpha01);
+      }
+    },
+    getOutputLength(inputLength, alpha01) {
+      return this.base.getOutputLength(inputLength * this.base.numComps / this.numComps, alpha01);
+    },
+    isPassthrough: ColorSpace.prototype.isPassthrough,
+    fillRgb: ColorSpace.prototype.fillRgb,
+    isDefaultDecode(decodeMap) {
+      return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
+    },
+    usesZeroToOneRange: true
+  };
+  return AlternateCS;
+}();
+var PatternCS = function PatternCSClosure() {
+  function PatternCS(baseCS) {
+    this.name = 'Pattern';
     this.base = baseCS;
   }
-}
-class IndexedCS extends ColorSpace {
-  constructor(base, highVal, lookup) {
-    super('Indexed', 1);
+  PatternCS.prototype = {};
+  return PatternCS;
+}();
+var IndexedCS = function IndexedCSClosure() {
+  function IndexedCS(base, highVal, lookup) {
+    this.name = 'Indexed';
+    this.numComps = 1;
+    this.defaultColor = new Uint8Array(this.numComps);
     this.base = base;
     this.highVal = highVal;
-    let baseNumComps = base.numComps;
-    let length = baseNumComps * highVal;
+    var baseNumComps = base.numComps;
+    var length = baseNumComps * highVal;
     if ((0, _primitives.isStream)(lookup)) {
       this.lookup = new Uint8Array(length);
-      let bytes = lookup.getBytes(length);
+      var bytes = lookup.getBytes(length);
       this.lookup.set(bytes);
     } else if ((0, _util.isString)(lookup)) {
       this.lookup = new Uint8Array(length);
-      for (let i = 0; i < length; ++i) {
+      for (var i = 0; i < length; ++i) {
         this.lookup[i] = lookup.charCodeAt(i);
       }
     } else if (lookup instanceof Uint8Array) {
       this.lookup = lookup;
     } else {
       throw new _util.FormatError(`Unrecognized lookup table: ${lookup}`);
     }
   }
-  getRgbItem(src, srcOffset, dest, destOffset) {
-    let numComps = this.base.numComps;
-    let start = src[srcOffset] * numComps;
-    this.base.getRgbBuffer(this.lookup, start, 1, dest, destOffset, 8, 0);
-  }
-  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
-    let base = this.base;
-    let numComps = base.numComps;
-    let outputDelta = base.getOutputLength(numComps, alpha01);
-    let lookup = this.lookup;
-    for (let i = 0; i < count; ++i) {
-      let lookupPos = src[srcOffset++] * numComps;
-      base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8, alpha01);
-      destOffset += outputDelta;
-    }
-  }
-  getOutputLength(inputLength, alpha01) {
-    return this.base.getOutputLength(inputLength * this.base.numComps, alpha01);
-  }
-  isDefaultDecode(decodeMap) {
-    return true;
-  }
-}
-class DeviceGrayCS extends ColorSpace {
-  constructor() {
-    super('DeviceGray', 1);
-  }
-  getRgbItem(src, srcOffset, dest, destOffset) {
-    let c = src[srcOffset] * 255;
-    dest[destOffset] = dest[destOffset + 1] = dest[destOffset + 2] = c;
-  }
-  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
-    let scale = 255 / ((1 << bits) - 1);
-    let j = srcOffset,
-        q = destOffset;
-    for (let i = 0; i < count; ++i) {
-      let c = scale * src[j++];
-      dest[q++] = c;
-      dest[q++] = c;
-      dest[q++] = c;
-      q += alpha01;
-    }
-  }
-  getOutputLength(inputLength, alpha01) {
-    return inputLength * (3 + alpha01);
-  }
-  isDefaultDecode(decodeMap) {
-    return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
-  }
-}
-class DeviceRgbCS extends ColorSpace {
-  constructor() {
-    super('DeviceRGB', 3);
-  }
-  getRgbItem(src, srcOffset, dest, destOffset) {
-    dest[destOffset] = src[srcOffset] * 255;
-    dest[destOffset + 1] = src[srcOffset + 1] * 255;
-    dest[destOffset + 2] = src[srcOffset + 2] * 255;
-  }
-  getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
-    if (bits === 8 && alpha01 === 0) {
-      dest.set(src.subarray(srcOffset, srcOffset + count * 3), destOffset);
-      return;
-    }
-    let scale = 255 / ((1 << bits) - 1);
-    let j = srcOffset,
-        q = destOffset;
-    for (let i = 0; i < count; ++i) {
-      dest[q++] = scale * src[j++];
-      dest[q++] = scale * src[j++];
-      dest[q++] = scale * src[j++];
-      q += alpha01;
-    }
-  }
-  getOutputLength(inputLength, alpha01) {
-    return inputLength * (3 + alpha01) / 3 | 0;
-  }
-  isPassthrough(bits) {
-    return bits === 8;
-  }
-  isDefaultDecode(decodeMap) {
-    return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
-  }
-}
-const DeviceCmykCS = function DeviceCmykCSClosure() {
+  IndexedCS.prototype = {
+    getRgb: ColorSpace.prototype.getRgb,
+    getRgbItem(src, srcOffset, dest, destOffset) {
+      var numComps = this.base.numComps;
+      var start = src[srcOffset] * numComps;
+      this.base.getRgbBuffer(this.lookup, start, 1, dest, destOffset, 8, 0);
+    },
+    getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
+      var base = this.base;
+      var numComps = base.numComps;
+      var outputDelta = base.getOutputLength(numComps, alpha01);
+      var lookup = this.lookup;
+      for (var i = 0; i < count; ++i) {
+        var lookupPos = src[srcOffset++] * numComps;
+        base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8, alpha01);
+        destOffset += outputDelta;
+      }
+    },
+    getOutputLength(inputLength, alpha01) {
+      return this.base.getOutputLength(inputLength * this.base.numComps, alpha01);
+    },
+    isPassthrough: ColorSpace.prototype.isPassthrough,
+    fillRgb: ColorSpace.prototype.fillRgb,
+    isDefaultDecode(decodeMap) {
+      return true;
+    },
+    usesZeroToOneRange: true
+  };
+  return IndexedCS;
+}();
+var DeviceGrayCS = function DeviceGrayCSClosure() {
+  function DeviceGrayCS() {
+    this.name = 'DeviceGray';
+    this.numComps = 1;
+    this.defaultColor = new Float32Array(this.numComps);
+  }
+  DeviceGrayCS.prototype = {
+    getRgb: ColorSpace.prototype.getRgb,
+    getRgbItem(src, srcOffset, dest, destOffset) {
+      let c = src[srcOffset] * 255;
+      dest[destOffset] = dest[destOffset + 1] = dest[destOffset + 2] = c;
+    },
+    getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
+      var scale = 255 / ((1 << bits) - 1);
+      var j = srcOffset,
+          q = destOffset;
+      for (var i = 0; i < count; ++i) {
+        let c = scale * src[j++];
+        dest[q++] = c;
+        dest[q++] = c;
+        dest[q++] = c;
+        q += alpha01;
+      }
+    },
+    getOutputLength(inputLength, alpha01) {
+      return inputLength * (3 + alpha01);
+    },
+    isPassthrough: ColorSpace.prototype.isPassthrough,
+    fillRgb: ColorSpace.prototype.fillRgb,
+    isDefaultDecode(decodeMap) {
+      return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
+    },
+    usesZeroToOneRange: true
+  };
+  return DeviceGrayCS;
+}();
+var DeviceRgbCS = function DeviceRgbCSClosure() {
+  function DeviceRgbCS() {
+    this.name = 'DeviceRGB';
+    this.numComps = 3;
+    this.defaultColor = new Float32Array(this.numComps);
+  }
+  DeviceRgbCS.prototype = {
+    getRgb: ColorSpace.prototype.getRgb,
+    getRgbItem(src, srcOffset, dest, destOffset) {
+      dest[destOffset] = src[srcOffset] * 255;
+      dest[destOffset + 1] = src[srcOffset + 1] * 255;
+      dest[destOffset + 2] = src[srcOffset + 2] * 255;
+    },
+    getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
+      if (bits === 8 && alpha01 === 0) {
+        dest.set(src.subarray(srcOffset, srcOffset + count * 3), destOffset);
+        return;
+      }
+      var scale = 255 / ((1 << bits) - 1);
+      var j = srcOffset,
+          q = destOffset;
+      for (var i = 0; i < count; ++i) {
+        dest[q++] = scale * src[j++];
+        dest[q++] = scale * src[j++];
+        dest[q++] = scale * src[j++];
+        q += alpha01;
+      }
+    },
+    getOutputLength(inputLength, alpha01) {
+      return inputLength * (3 + alpha01) / 3 | 0;
+    },
+    isPassthrough(bits) {
+      return bits === 8;
+    },
+    fillRgb: ColorSpace.prototype.fillRgb,
+    isDefaultDecode(decodeMap) {
+      return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
+    },
+    usesZeroToOneRange: true
+  };
+  return DeviceRgbCS;
+}();
+var DeviceCmykCS = function DeviceCmykCSClosure() {
   function convertToRgb(src, srcOffset, srcScale, dest, destOffset) {
-    let c = src[srcOffset] * srcScale;
-    let m = src[srcOffset + 1] * srcScale;
-    let y = src[srcOffset + 2] * srcScale;
-    let k = src[srcOffset + 3] * srcScale;
+    var c = src[srcOffset] * srcScale;
+    var m = src[srcOffset + 1] * srcScale;
+    var y = src[srcOffset + 2] * srcScale;
+    var k = src[srcOffset + 3] * srcScale;
     dest[destOffset] = 255 + c * (-4.387332384609988 * c + 54.48615194189176 * m + 18.82290502165302 * y + 212.25662451639585 * k + -285.2331026137004) + m * (1.7149763477362134 * m - 5.6096736904047315 * y + -17.873870861415444 * k - 5.497006427196366) + y * (-2.5217340131683033 * y - 21.248923337353073 * k + 17.5119270841813) + k * (-21.86122147463605 * k - 189.48180835922747);
     dest[destOffset + 1] = 255 + c * (8.841041422036149 * c + 60.118027045597366 * m + 6.871425592049007 * y + 31.159100130055922 * k + -79.2970844816548) + m * (-15.310361306967817 * m + 17.575251261109482 * y + 131.35250912493976 * k - 190.9453302588951) + y * (4.444339102852739 * y + 9.8632861493405 * k - 24.86741582555878) + k * (-20.737325471181034 * k - 187.80453709719578);
     dest[destOffset + 2] = 255 + c * (0.8842522430003296 * c + 8.078677503112928 * m + 30.89978309703729 * y - 0.23883238689178934 * k + -14.183576799673286) + m * (10.49593273432072 * m + 63.02378494754052 * y + 50.606957656360734 * k - 112.23884253719248) + y * (0.03296041114873217 * y + 115.60384449646641 * k + -193.58209356861505) + k * (-22.33816807309886 * k - 180.12613974708367);
   }
-  class DeviceCmykCS extends ColorSpace {
-    constructor() {
-      super('DeviceCMYK', 4);
-    }
+  function DeviceCmykCS() {
+    this.name = 'DeviceCMYK';
+    this.numComps = 4;
+    this.defaultColor = new Float32Array(this.numComps);
+    this.defaultColor[3] = 1;
+  }
+  DeviceCmykCS.prototype = {
+    getRgb: ColorSpace.prototype.getRgb,
     getRgbItem(src, srcOffset, dest, destOffset) {
       convertToRgb(src, srcOffset, 1, dest, destOffset);
-    }
+    },
     getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
-      let scale = 1 / ((1 << bits) - 1);
-      for (let i = 0; i < count; i++) {
+      var scale = 1 / ((1 << bits) - 1);
+      for (var i = 0; i < count; i++) {
         convertToRgb(src, srcOffset, scale, dest, destOffset);
         srcOffset += 4;
         destOffset += 3 + alpha01;
       }
-    }
+    },
     getOutputLength(inputLength, alpha01) {
       return inputLength / 4 * (3 + alpha01) | 0;
-    }
+    },
+    isPassthrough: ColorSpace.prototype.isPassthrough,
+    fillRgb: ColorSpace.prototype.fillRgb,
     isDefaultDecode(decodeMap) {
       return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
-    }
-  }
+    },
+    usesZeroToOneRange: true
+  };
   return DeviceCmykCS;
 }();
-const CalGrayCS = function CalGrayCSClosure() {
+var CalGrayCS = function CalGrayCSClosure() {
+  function CalGrayCS(whitePoint, blackPoint, gamma) {
+    this.name = 'CalGray';
+    this.numComps = 1;
+    this.defaultColor = new Float32Array(this.numComps);
+    if (!whitePoint) {
+      throw new _util.FormatError('WhitePoint missing - required for color space CalGray');
+    }
+    blackPoint = blackPoint || [0, 0, 0];
+    gamma = gamma || 1;
+    this.XW = whitePoint[0];
+    this.YW = whitePoint[1];
+    this.ZW = whitePoint[2];
+    this.XB = blackPoint[0];
+    this.YB = blackPoint[1];
+    this.ZB = blackPoint[2];
+    this.G = gamma;
+    if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) {
+      throw new _util.FormatError(`Invalid WhitePoint components for ${this.name}` + ', no fallback available');
+    }
+    if (this.XB < 0 || this.YB < 0 || this.ZB < 0) {
+      (0, _util.info)('Invalid BlackPoint for ' + this.name + ', falling back to default');
+      this.XB = this.YB = this.ZB = 0;
+    }
+    if (this.XB !== 0 || this.YB !== 0 || this.ZB !== 0) {
+      (0, _util.warn)(this.name + ', BlackPoint: XB: ' + this.XB + ', YB: ' + this.YB + ', ZB: ' + this.ZB + ', only default values are supported.');
+    }
+    if (this.G < 1) {
+      (0, _util.info)('Invalid Gamma: ' + this.G + ' for ' + this.name + ', falling back to default');
+      this.G = 1;
+    }
+  }
   function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) {
-    let A = src[srcOffset] * scale;
-    let AG = Math.pow(A, cs.G);
-    let L = cs.YW * AG;
+    var A = src[srcOffset] * scale;
+    var AG = Math.pow(A, cs.G);
+    var L = cs.YW * AG;
     let val = Math.max(295.8 * Math.pow(L, 0.333333333333333333) - 40.8, 0);
     dest[destOffset] = val;
     dest[destOffset + 1] = val;
     dest[destOffset + 2] = val;
   }
-  class CalGrayCS extends ColorSpace {
-    constructor(whitePoint, blackPoint, gamma) {
-      super('CalGray', 1);
-      if (!whitePoint) {
-        throw new _util.FormatError('WhitePoint missing - required for color space CalGray');
-      }
-      blackPoint = blackPoint || [0, 0, 0];
-      gamma = gamma || 1;
-      this.XW = whitePoint[0];
-      this.YW = whitePoint[1];
-      this.ZW = whitePoint[2];
-      this.XB = blackPoint[0];
-      this.YB = blackPoint[1];
-      this.ZB = blackPoint[2];
-      this.G = gamma;
-      if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) {
-        throw new _util.FormatError(`Invalid WhitePoint components for ${this.name}` + ', no fallback available');
-      }
-      if (this.XB < 0 || this.YB < 0 || this.ZB < 0) {
-        (0, _util.info)(`Invalid BlackPoint for ${this.name}, falling back to default.`);
-        this.XB = this.YB = this.ZB = 0;
-      }
-      if (this.XB !== 0 || this.YB !== 0 || this.ZB !== 0) {
-        (0, _util.warn)(`${this.name}, BlackPoint: XB: ${this.XB}, YB: ${this.YB}, ` + `ZB: ${this.ZB}, only default values are supported.`);
-      }
-      if (this.G < 1) {
-        (0, _util.info)(`Invalid Gamma: ${this.G} for ${this.name}, ` + 'falling back to default.');
-        this.G = 1;
-      }
-    }
+  CalGrayCS.prototype = {
+    getRgb: ColorSpace.prototype.getRgb,
     getRgbItem(src, srcOffset, dest, destOffset) {
       convertToRgb(this, src, srcOffset, dest, destOffset, 1);
-    }
+    },
     getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
-      let scale = 1 / ((1 << bits) - 1);
-      for (let i = 0; i < count; ++i) {
+      var scale = 1 / ((1 << bits) - 1);
+      for (var i = 0; i < count; ++i) {
         convertToRgb(this, src, srcOffset, dest, destOffset, scale);
         srcOffset += 1;
         destOffset += 3 + alpha01;
       }
-    }
+    },
     getOutputLength(inputLength, alpha01) {
       return inputLength * (3 + alpha01);
-    }
+    },
+    isPassthrough: ColorSpace.prototype.isPassthrough,
+    fillRgb: ColorSpace.prototype.fillRgb,
     isDefaultDecode(decodeMap) {
       return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
-    }
-  }
+    },
+    usesZeroToOneRange: true
+  };
   return CalGrayCS;
 }();
-const CalRGBCS = function CalRGBCSClosure() {
-  const BRADFORD_SCALE_MATRIX = new Float32Array([0.8951, 0.2664, -0.1614, -0.7502, 1.7135, 0.0367, 0.0389, -0.0685, 1.0296]);
-  const BRADFORD_SCALE_INVERSE_MATRIX = new Float32Array([0.9869929, -0.1470543, 0.1599627, 0.4323053, 0.5183603, 0.0492912, -0.0085287, 0.0400428, 0.9684867]);
-  const SRGB_D65_XYZ_TO_RGB_MATRIX = new Float32Array([3.2404542, -1.5371385, -0.4985314, -0.9692660, 1.8760108, 0.0415560, 0.0556434, -0.2040259, 1.0572252]);
-  const FLAT_WHITEPOINT_MATRIX = new Float32Array([1, 1, 1]);
-  let tempNormalizeMatrix = new Float32Array(3);
-  let tempConvertMatrix1 = new Float32Array(3);
-  let tempConvertMatrix2 = new Float32Array(3);
-  const DECODE_L_CONSTANT = Math.pow((8 + 16) / 116, 3) / 8.0;
+var CalRGBCS = function CalRGBCSClosure() {
+  var BRADFORD_SCALE_MATRIX = new Float32Array([0.8951, 0.2664, -0.1614, -0.7502, 1.7135, 0.0367, 0.0389, -0.0685, 1.0296]);
+  var BRADFORD_SCALE_INVERSE_MATRIX = new Float32Array([0.9869929, -0.1470543, 0.1599627, 0.4323053, 0.5183603, 0.0492912, -0.0085287, 0.0400428, 0.9684867]);
+  var SRGB_D65_XYZ_TO_RGB_MATRIX = new Float32Array([3.2404542, -1.5371385, -0.4985314, -0.9692660, 1.8760108, 0.0415560, 0.0556434, -0.2040259, 1.0572252]);
+  var FLAT_WHITEPOINT_MATRIX = new Float32Array([1, 1, 1]);
+  var tempNormalizeMatrix = new Float32Array(3);
+  var tempConvertMatrix1 = new Float32Array(3);
+  var tempConvertMatrix2 = new Float32Array(3);
+  var DECODE_L_CONSTANT = Math.pow((8 + 16) / 116, 3) / 8.0;
+  function CalRGBCS(whitePoint, blackPoint, gamma, matrix) {
+    this.name = 'CalRGB';
+    this.numComps = 3;
+    this.defaultColor = new Float32Array(this.numComps);
+    if (!whitePoint) {
+      throw new _util.FormatError('WhitePoint missing - required for color space CalRGB');
+    }
+    blackPoint = blackPoint || new Float32Array(3);
+    gamma = gamma || new Float32Array([1, 1, 1]);
+    matrix = matrix || new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]);
+    var XW = whitePoint[0];
+    var YW = whitePoint[1];
+    var ZW = whitePoint[2];
+    this.whitePoint = whitePoint;
+    var XB = blackPoint[0];
+    var YB = blackPoint[1];
+    var ZB = blackPoint[2];
+    this.blackPoint = blackPoint;
+    this.GR = gamma[0];
+    this.GG = gamma[1];
+    this.GB = gamma[2];
+    this.MXA = matrix[0];
+    this.MYA = matrix[1];
+    this.MZA = matrix[2];
+    this.MXB = matrix[3];
+    this.MYB = matrix[4];
+    this.MZB = matrix[5];
+    this.MXC = matrix[6];
+    this.MYC = matrix[7];
+    this.MZC = matrix[8];
+    if (XW < 0 || ZW < 0 || YW !== 1) {
+      throw new _util.FormatError(`Invalid WhitePoint components for ${this.name}` + ', no fallback available');
+    }
+    if (XB < 0 || YB < 0 || ZB < 0) {
+      (0, _util.info)('Invalid BlackPoint for ' + this.name + ' [' + XB + ', ' + YB + ', ' + ZB + '], falling back to default');
+      this.blackPoint = new Float32Array(3);
+    }
+    if (this.GR < 0 || this.GG < 0 || this.GB < 0) {
+      (0, _util.info)('Invalid Gamma [' + this.GR + ', ' + this.GG + ', ' + this.GB + '] for ' + this.name + ', falling back to default');
+      this.GR = this.GG = this.GB = 1;
+    }
+  }
   function matrixProduct(a, b, result) {
     result[0] = a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
     result[1] = a[3] * b[0] + a[4] * b[1] + a[5] * b[2];
     result[2] = a[6] * b[0] + a[7] * b[1] + a[8] * b[2];
   }
   function convertToFlat(sourceWhitePoint, LMS, result) {
     result[0] = LMS[0] * 1 / sourceWhitePoint[0];
     result[1] = LMS[1] * 1 / sourceWhitePoint[1];
     result[2] = LMS[2] * 1 / sourceWhitePoint[2];
   }
   function convertToD65(sourceWhitePoint, LMS, result) {
-    const D65X = 0.95047;
-    const D65Y = 1;
-    const D65Z = 1.08883;
+    var D65X = 0.95047;
+    var D65Y = 1;
+    var D65Z = 1.08883;
     result[0] = LMS[0] * D65X / sourceWhitePoint[0];
     result[1] = LMS[1] * D65Y / sourceWhitePoint[1];
     result[2] = LMS[2] * D65Z / sourceWhitePoint[2];
   }
   function sRGBTransferFunction(color) {
     if (color <= 0.0031308) {
       return adjustToRange(0, 1, 12.92 * color);
     }
@@ -17397,238 +17440,205 @@ const CalRGBCS = function CalRGBCSClosur
   }
   function compensateBlackPoint(sourceBlackPoint, XYZ_Flat, result) {
     if (sourceBlackPoint[0] === 0 && sourceBlackPoint[1] === 0 && sourceBlackPoint[2] === 0) {
       result[0] = XYZ_Flat[0];
       result[1] = XYZ_Flat[1];
       result[2] = XYZ_Flat[2];
       return;
     }
-    let zeroDecodeL = decodeL(0);
-    let X_DST = zeroDecodeL;
-    let X_SRC = decodeL(sourceBlackPoint[0]);
-    let Y_DST = zeroDecodeL;
-    let Y_SRC = decodeL(sourceBlackPoint[1]);
-    let Z_DST = zeroDecodeL;
-    let Z_SRC = decodeL(sourceBlackPoint[2]);
-    let X_Scale = (1 - X_DST) / (1 - X_SRC);
-    let X_Offset = 1 - X_Scale;
-    let Y_Scale = (1 - Y_DST) / (1 - Y_SRC);
-    let Y_Offset = 1 - Y_Scale;
-    let Z_Scale = (1 - Z_DST) / (1 - Z_SRC);
-    let Z_Offset = 1 - Z_Scale;
+    var zeroDecodeL = decodeL(0);
+    var X_DST = zeroDecodeL;
+    var X_SRC = decodeL(sourceBlackPoint[0]);
+    var Y_DST = zeroDecodeL;
+    var Y_SRC = decodeL(sourceBlackPoint[1]);
+    var Z_DST = zeroDecodeL;
+    var Z_SRC = decodeL(sourceBlackPoint[2]);
+    var X_Scale = (1 - X_DST) / (1 - X_SRC);
+    var X_Offset = 1 - X_Scale;
+    var Y_Scale = (1 - Y_DST) / (1 - Y_SRC);
+    var Y_Offset = 1 - Y_Scale;
+    var Z_Scale = (1 - Z_DST) / (1 - Z_SRC);
+    var Z_Offset = 1 - Z_Scale;
     result[0] = XYZ_Flat[0] * X_Scale + X_Offset;
     result[1] = XYZ_Flat[1] * Y_Scale + Y_Offset;
     result[2] = XYZ_Flat[2] * Z_Scale + Z_Offset;
   }
   function normalizeWhitePointToFlat(sourceWhitePoint, XYZ_In, result) {
     if (sourceWhitePoint[0] === 1 && sourceWhitePoint[2] === 1) {
       result[0] = XYZ_In[0];
       result[1] = XYZ_In[1];
       result[2] = XYZ_In[2];
       return;
     }
-    let LMS = result;
+    var LMS = result;
     matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS);
-    let LMS_Flat = tempNormalizeMatrix;
+    var LMS_Flat = tempNormalizeMatrix;
     convertToFlat(sourceWhitePoint, LMS, LMS_Flat);
     matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_Flat, result);
   }
   function normalizeWhitePointToD65(sourceWhitePoint, XYZ_In, result) {
-    let LMS = result;
+    var LMS = result;
     matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS);
-    let LMS_D65 = tempNormalizeMatrix;
+    var LMS_D65 = tempNormalizeMatrix;
     convertToD65(sourceWhitePoint, LMS, LMS_D65);
     matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_D65, result);
   }
   function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) {
-    let A = adjustToRange(0, 1, src[srcOffset] * scale);
-    let B = adjustToRange(0, 1, src[srcOffset + 1] * scale);
-    let C = adjustToRange(0, 1, src[srcOffset + 2] * scale);
-    let AGR = Math.pow(A, cs.GR);
-    let BGG = Math.pow(B, cs.GG);
-    let CGB = Math.pow(C, cs.GB);
-    let X = cs.MXA * AGR + cs.MXB * BGG + cs.MXC * CGB;
-    let Y = cs.MYA * AGR + cs.MYB * BGG + cs.MYC * CGB;
-    let Z = cs.MZA * AGR + cs.MZB * BGG + cs.MZC * CGB;
-    let XYZ = tempConvertMatrix1;
+    var A = adjustToRange(0, 1, src[srcOffset] * scale);
+    var B = adjustToRange(0, 1, src[srcOffset + 1] * scale);
+    var C = adjustToRange(0, 1, src[srcOffset + 2] * scale);
+    var AGR = Math.pow(A, cs.GR);
+    var BGG = Math.pow(B, cs.GG);
+    var CGB = Math.pow(C, cs.GB);
+    var X = cs.MXA * AGR + cs.MXB * BGG + cs.MXC * CGB;
+    var Y = cs.MYA * AGR + cs.MYB * BGG + cs.MYC * CGB;
+    var Z = cs.MZA * AGR + cs.MZB * BGG + cs.MZC * CGB;
+    var XYZ = tempConvertMatrix1;
     XYZ[0] = X;
     XYZ[1] = Y;
     XYZ[2] = Z;
-    let XYZ_Flat = tempConvertMatrix2;
+    var XYZ_Flat = tempConvertMatrix2;
     normalizeWhitePointToFlat(cs.whitePoint, XYZ, XYZ_Flat);
-    let XYZ_Black = tempConvertMatrix1;
+    var XYZ_Black = tempConvertMatrix1;
     compensateBlackPoint(cs.blackPoint, XYZ_Flat, XYZ_Black);
-    let XYZ_D65 = tempConvertMatrix2;
+    var XYZ_D65 = tempConvertMatrix2;
     normalizeWhitePointToD65(FLAT_WHITEPOINT_MATRIX, XYZ_Black, XYZ_D65);
-    let SRGB = tempConvertMatrix1;
+    var SRGB = tempConvertMatrix1;
     matrixProduct(SRGB_D65_XYZ_TO_RGB_MATRIX, XYZ_D65, SRGB);
     dest[destOffset] = sRGBTransferFunction(SRGB[0]) * 255;
     dest[destOffset + 1] = sRGBTransferFunction(SRGB[1]) * 255;
     dest[destOffset + 2] = sRGBTransferFunction(SRGB[2]) * 255;
   }
-  class CalRGBCS extends ColorSpace {
-    constructor(whitePoint, blackPoint, gamma, matrix) {
-      super('CalRGB', 3);
-      if (!whitePoint) {
-        throw new _util.FormatError('WhitePoint missing - required for color space CalRGB');
-      }
-      blackPoint = blackPoint || new Float32Array(3);
-      gamma = gamma || new Float32Array([1, 1, 1]);
-      matrix = matrix || new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]);
-      let XW = whitePoint[0];
-      let YW = whitePoint[1];
-      let ZW = whitePoint[2];
-      this.whitePoint = whitePoint;
-      let XB = blackPoint[0];
-      let YB = blackPoint[1];
-      let ZB = blackPoint[2];
-      this.blackPoint = blackPoint;
-      this.GR = gamma[0];
-      this.GG = gamma[1];
-      this.GB = gamma[2];
-      this.MXA = matrix[0];
-      this.MYA = matrix[1];
-      this.MZA = matrix[2];
-      this.MXB = matrix[3];
-      this.MYB = matrix[4];
-      this.MZB = matrix[5];
-      this.MXC = matrix[6];
-      this.MYC = matrix[7];
-      this.MZC = matrix[8];
-      if (XW < 0 || ZW < 0 || YW !== 1) {
-        throw new _util.FormatError(`Invalid WhitePoint components for ${this.name}` + ', no fallback available');
-      }
-      if (XB < 0 || YB < 0 || ZB < 0) {
-        (0, _util.info)(`Invalid BlackPoint for ${this.name} [${XB}, ${YB}, ${ZB}], ` + 'falling back to default.');
-        this.blackPoint = new Float32Array(3);
-      }
-      if (this.GR < 0 || this.GG < 0 || this.GB < 0) {
-        (0, _util.info)(`Invalid Gamma [${this.GR}, ${this.GG}, ${this.GB}] for ` + `${this.name}, falling back to default.`);
-        this.GR = this.GG = this.GB = 1;
-      }
-    }
+  CalRGBCS.prototype = {
+    getRgb: ColorSpace.prototype.getRgb,
     getRgbItem(src, srcOffset, dest, destOffset) {
       convertToRgb(this, src, srcOffset, dest, destOffset, 1);
-    }
+    },
     getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
-      let scale = 1 / ((1 << bits) - 1);
-      for (let i = 0; i < count; ++i) {
+      var scale = 1 / ((1 << bits) - 1);
+      for (var i = 0; i < count; ++i) {
         convertToRgb(this, src, srcOffset, dest, destOffset, scale);
         srcOffset += 3;
         destOffset += 3 + alpha01;
       }
-    }
+    },
     getOutputLength(inputLength, alpha01) {
       return inputLength * (3 + alpha01) / 3 | 0;
-    }
+    },
+    isPassthrough: ColorSpace.prototype.isPassthrough,
+    fillRgb: ColorSpace.prototype.fillRgb,
     isDefaultDecode(decodeMap) {
       return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
-    }
-  }
+    },
+    usesZeroToOneRange: true
+  };
   return CalRGBCS;
 }();
-const LabCS = function LabCSClosure() {
+var LabCS = function LabCSClosure() {
+  function LabCS(whitePoint, blackPoint, range) {
+    this.name = 'Lab';
+    this.numComps = 3;
+    this.defaultColor = new Float32Array(this.numComps);
+    if (!whitePoint) {
+      throw new _util.FormatError('WhitePoint missing - required for color space Lab');
+    }
+    blackPoint = blackPoint || [0, 0, 0];
+    range = range || [-100, 100, -100, 100];
+    this.XW = whitePoint[0];
+    this.YW = whitePoint[1];
+    this.ZW = whitePoint[2];
+    this.amin = range[0];
+    this.amax = range[1];
+    this.bmin = range[2];
+    this.bmax = range[3];
+    this.XB = blackPoint[0];
+    this.YB = blackPoint[1];
+    this.ZB = blackPoint[2];
+    if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) {
+      throw new _util.FormatError('Invalid WhitePoint components, no fallback available');
+    }
+    if (this.XB < 0 || this.YB < 0 || this.ZB < 0) {
+      (0, _util.info)('Invalid BlackPoint, falling back to default');
+      this.XB = this.YB = this.ZB = 0;
+    }
+    if (this.amin > this.amax || this.bmin > this.bmax) {
+      (0, _util.info)('Invalid Range, falling back to defaults');
+      this.amin = -100;
+      this.amax = 100;
+      this.bmin = -100;
+      this.bmax = 100;
+    }
+  }
   function fn_g(x) {
-    let result;
+    var result;
     if (x >= 6 / 29) {
       result = x * x * x;
     } else {
       result = 108 / 841 * (x - 4 / 29);
     }
     return result;
   }
   function decode(value, high1, low2, high2) {
     return low2 + value * (high2 - low2) / high1;
   }
   function convertToRgb(cs, src, srcOffset, maxVal, dest, destOffset) {
-    let Ls = src[srcOffset];
-    let as = src[srcOffset + 1];
-    let bs = src[srcOffset + 2];
+    var Ls = src[srcOffset];
+    var as = src[srcOffset + 1];
+    var bs = src[srcOffset + 2];
     if (maxVal !== false) {
       Ls = decode(Ls, maxVal, 0, 100);
       as = decode(as, maxVal, cs.amin, cs.amax);
       bs = decode(bs, maxVal, cs.bmin, cs.bmax);
     }
     as = as > cs.amax ? cs.amax : as < cs.amin ? cs.amin : as;
     bs = bs > cs.bmax ? cs.bmax : bs < cs.bmin ? cs.bmin : bs;
-    let M = (Ls + 16) / 116;
-    let L = M + as / 500;
-    let N = M - bs / 200;
-    let X = cs.XW * fn_g(L);
-    let Y = cs.YW * fn_g(M);
-    let Z = cs.ZW * fn_g(N);
-    let r, g, b;
+    var M = (Ls + 16) / 116;
+    var L = M + as / 500;
+    var N = M - bs / 200;
+    var X = cs.XW * fn_g(L);
+    var Y = cs.YW * fn_g(M);
+    var Z = cs.ZW * fn_g(N);
+    var r, g, b;
     if (cs.ZW < 1) {
       r = X * 3.1339 + Y * -1.6170 + Z * -0.4906;
       g = X * -0.9785 + Y * 1.9160 + Z * 0.0333;
       b = X * 0.0720 + Y * -0.2290 + Z * 1.4057;
     } else {
       r = X * 3.2406 + Y * -1.5372 + Z * -0.4986;
       g = X * -0.9689 + Y * 1.8758 + Z * 0.0415;
       b = X * 0.0557 + Y * -0.2040 + Z * 1.0570;
     }
     dest[destOffset] = Math.sqrt(r) * 255;
     dest[destOffset + 1] = Math.sqrt(g) * 255;
     dest[destOffset + 2] = Math.sqrt(b) * 255;
   }
-  class LabCS extends ColorSpace {
-    constructor(whitePoint, blackPoint, range) {
-      super('Lab', 3);
-      if (!whitePoint) {
-        throw new _util.FormatError('WhitePoint missing - required for color space Lab');
-      }
-      blackPoint = blackPoint || [0, 0, 0];
-      range = range || [-100, 100, -100, 100];
-      this.XW = whitePoint[0];
-      this.YW = whitePoint[1];
-      this.ZW = whitePoint[2];
-      this.amin = range[0];
-      this.amax = range[1];
-      this.bmin = range[2];
-      this.bmax = range[3];
-      this.XB = blackPoint[0];
-      this.YB = blackPoint[1];
-      this.ZB = blackPoint[2];
-      if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) {
-        throw new _util.FormatError('Invalid WhitePoint components, no fallback available');
-      }
-      if (this.XB < 0 || this.YB < 0 || this.ZB < 0) {
-        (0, _util.info)('Invalid BlackPoint, falling back to default');
-        this.XB = this.YB = this.ZB = 0;
-      }
-      if (this.amin > this.amax || this.bmin > this.bmax) {
-        (0, _util.info)('Invalid Range, falling back to defaults');
-        this.amin = -100;
-        this.amax = 100;
-        this.bmin = -100;
-        this.bmax = 100;
-      }
-    }
+  LabCS.prototype = {
+    getRgb: ColorSpace.prototype.getRgb,
     getRgbItem(src, srcOffset, dest, destOffset) {
       convertToRgb(this, src, srcOffset, false, dest, destOffset);
-    }
+    },
     getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {
-      let maxVal = (1 << bits) - 1;
-      for (let i = 0; i < count; i++) {
+      var maxVal = (1 << bits) - 1;
+      for (var i = 0; i < count; i++) {
         convertToRgb(this, src, srcOffset, maxVal, dest, destOffset);
         srcOffset += 3;
         destOffset += 3 + alpha01;
       }
-    }
+    },
     getOutputLength(inputLength, alpha01) {
       return inputLength * (3 + alpha01) / 3 | 0;
-    }
+    },
+    isPassthrough: ColorSpace.prototype.isPassthrough,
+    fillRgb: ColorSpace.prototype.fillRgb,
     isDefaultDecode(decodeMap) {
       return true;
-    }
-    get usesZeroToOneRange() {
-      return (0, _util.shadow)(this, 'usesZeroToOneRange', false);
-    }
-  }
+    },
+    usesZeroToOneRange: false
+  };
   return LabCS;
 }();
 exports.ColorSpace = ColorSpace;
 
 /***/ }),
 /* 26 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
@@ -20054,24 +20064,16 @@ var PartialEvaluator = function PartialE
           return;
         }
         textContentItem.width *= textContentItem.textAdvanceScale;
         textContentItem.height *= textContentItem.textAdvanceScale;
         textContent.items.push(runBidiTransform(textContentItem));
         textContentItem.initialized = false;
         textContentItem.str.length = 0;
       }
-      function isIdenticalSetFont(name, size) {
-        return textState.font && name === textState.fontName && size === textState.fontSize;
-      }
-      function handleBeginText() {
-        flushTextContentItem();
-        textState.textMatrix = _util.IDENTITY_MATRIX.slice();
-        textState.textLineMatrix = _util.IDENTITY_MATRIX.slice();
-      }
       function enqueueChunk() {
         let length = textContent.items.length;
         if (length > 0) {
           sink.enqueue(textContent, length);
           textContent.items = [];
           textContent.styles = Object.create(null);
         }
       }
@@ -20087,45 +20089,31 @@ var PartialEvaluator = function PartialE
             }
           }, reject);
         };
         task.ensureNotTerminated();
         timeSlotManager.reset();
         var stop,
             operation = {},
             args = [];
-        let pendingBeginText = false;
         while (!(stop = timeSlotManager.check())) {
           args.length = 0;
           operation.args = args;
           if (!preprocessor.read(operation)) {
             break;
           }
           textState = stateManager.state;
-          var fn = operation.fn | 0;
+          var fn = operation.fn;
           args = operation.args;
           var advance, diff;
-          if (pendingBeginText) {
-            if (fn === _util.OPS.setFont) {
-              const fontNameArg = args[0].name,
-                    fontSizeArg = args[1];
-              if (isIdenticalSetFont(fontNameArg, fontSizeArg)) {
-                continue;
-              }
-            }
-            if (fn !== _util.OPS.setTextMatrix) {
-              handleBeginText();
-            }
-            pendingBeginText = false;
-          }
-          switch (fn) {
+          switch (fn | 0) {
             case _util.OPS.setFont:
               var fontNameArg = args[0].name,
                   fontSizeArg = args[1];
-              if (isIdenticalSetFont(fontNameArg, fontSizeArg)) {
+              if (textState.font && fontNameArg === textState.fontName && fontSizeArg === textState.fontSize) {
                 break;
               }
               flushTextContentItem();
               textState.fontName = fontNameArg;
               textState.fontSize = fontSizeArg;
               next(handleSetFont(fontNameArg, null));
               return;
             case _util.OPS.setTextRise:
@@ -20181,21 +20169,19 @@ var PartialEvaluator = function PartialE
               break;
             case _util.OPS.setCharSpacing:
               textState.charSpacing = args[0];
               break;
             case _util.OPS.setWordSpacing:
               textState.wordSpacing = args[0];
               break;
             case _util.OPS.beginText:
-              if (combineTextItems) {
-                pendingBeginText = true;
-                break;
-              }
-              handleBeginText();
+              flushTextContentItem();
+              textState.textMatrix = _util.IDENTITY_MATRIX.slice();
+              textState.textLineMatrix = _util.IDENTITY_MATRIX.slice();
               break;
             case _util.OPS.showSpacedText:
               var items = args[0];
               var offset;
               for (var j = 0, jj = items.length; j < jj; j++) {
                 if (typeof items[j] === 'string') {
                   buildTextContentItem(items[j]);
                 } else if ((0, _util.isNum)(items[j])) {
--- a/browser/extensions/pdfjs/content/web/viewer.js
+++ b/browser/extensions/pdfjs/content/web/viewer.js
@@ -1,13 +1,13 @@
 /**
  * @licstart The following is the entire license notice for the
  * Javascript code in this page
  *
- * Copyright 2018 Mozilla Foundation
+ * Copyright 2017 Mozilla Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
  *     http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
@@ -391,17 +391,17 @@ let PDFViewerApplication = {
         _app_options.AppOptions.set('externalLinkTarget', _pdfjsLib.LinkTarget.TOP);
       }
       return this._initializeViewerComponents();
     }).then(() => {
       this.bindEvents();
       this.bindWindowEvents();
       let appContainer = appConfig.appContainer || document.documentElement;
       this.l10n.translate(appContainer).then(() => {
-        this.eventBus.dispatch('localized', { source: this });
+        this.eventBus.dispatch('localized');
       });
       this.initialized = true;
     });
   },
   _readPreferences() {
     const OVERRIDES = {
       disableFontFace: true,
       disableRange: true,
@@ -475,18 +475,17 @@ let PDFViewerApplication = {
     return this.l10n.getDirection().then(dir => {
       document.getElementsByTagName('html')[0].dir = dir;
     });
   },
   _initializeViewerComponents() {
     let { appConfig } = this;
     return new Promise((resolve, reject) => {
       this.overlayManager = new _overlay_manager.OverlayManager();
-      const dispatchToDOM = _app_options.AppOptions.get('eventBusDispatchToDOM');
-      let eventBus = appConfig.eventBus || (0, _dom_events.getGlobalEventBus)(dispatchToDOM);
+      let eventBus = appConfig.eventBus || (0, _dom_events.getGlobalEventBus)();
       this.eventBus = eventBus;
       let pdfRenderingQueue = new _pdf_rendering_queue.PDFRenderingQueue();
       pdfRenderingQueue.onIdle = this.cleanup.bind(this);
       this.pdfRenderingQueue = pdfRenderingQueue;
       let pdfLinkService = new _pdf_link_service.PDFLinkService({
         eventBus,
         externalLinkTarget: _app_options.AppOptions.get('externalLinkTarget'),
         externalLinkRel: _app_options.AppOptions.get('externalLinkRel')
@@ -881,17 +880,16 @@ let PDFViewerApplication = {
     }
   },
   load(pdfDocument) {
     this.pdfDocument = pdfDocument;
     pdfDocument.getDownloadInfo().then(() => {
       this.downloadComplete = true;
       this.loadingBar.hide();
       firstPagePromise.then(() => {
-        this.eventBus.dispatch('documentloaded', { source: this });
         this.eventBus.dispatch('documentload', { source: this });
       });
     });
     let pageModePromise = pdfDocument.getPageMode().catch(function () {});
     this.toolbar.setPagesCount(pdfDocument.numPages, false);
     this.secondaryToolbar.setPagesCount(pdfDocument.numPages);
     const store = this.store = new _view_history.ViewHistory(pdfDocument.fingerprint);
     let baseDocumentUrl;
@@ -957,17 +955,16 @@ let PDFViewerApplication = {
         initialParams.bookmark = this.initialBookmark;
         initialParams.hash = hash;
         this.setInitialView(hash, {
           rotation,
           sidebarView,
           scrollMode,
           spreadMode
         });
-        this.eventBus.dispatch('documentinit', { source: this });
         if (!this.isViewerEmbedded) {
           pdfViewer.focus();
         }
         return Promise.race([pagesPromise, new Promise(resolve => {
           setTimeout(resolve, FORCE_PAGES_LOADED_TIMEOUT);
         })]);
       }).then(() => {
         if (!initialParams.bookmark && !initialParams.hash) {
@@ -1217,26 +1214,23 @@ let PDFViewerApplication = {
     eventBus.on('findfromurlhash', webViewerFindFromUrlHash);
   },
   bindWindowEvents() {
     let { eventBus, _boundEvents } = this;
     _boundEvents.windowResize = () => {
       eventBus.dispatch('resize', { source: window });
     };
     _boundEvents.windowHashChange = () => {
-      eventBus.dispatch('hashchange', {
-        source: window,
-        hash: document.location.hash.substring(1)
-      });
+      eventBus.dispatch('hashchange', { hash: document.location.hash.substring(1) });
     };
     _boundEvents.windowBeforePrint = () => {
-      eventBus.dispatch('beforeprint', { source: window });
+      eventBus.dispatch('beforeprint');
     };
     _boundEvents.windowAfterPrint = () => {
-      eventBus.dispatch('afterprint', { source: window });
+      eventBus.dispatch('afterprint');
     };
     window.addEventListener('wheel', webViewerWheel);
     window.addEventListener('click', webViewerClick);
     window.addEventListener('keydown', webViewerKeyDown);
     window.addEventListener('resize', _boundEvents.windowResize);
     window.addEventListener('hashchange', _boundEvents.windowHashChange);
     window.addEventListener('beforeprint', _boundEvents.windowBeforePrint);
     window.addEventListener('afterprint', _boundEvents.windowAfterPrint);
@@ -2285,21 +2279,18 @@ function waitOnEventOrTimeout({ target, 
     const timeoutHandler = handler.bind(null, WaitOnType.TIMEOUT);
     let timeout = setTimeout(timeoutHandler, delay);
   });
 }
 let animationStarted = new Promise(function (resolve) {
   window.requestAnimationFrame(resolve);
 });
 class EventBus {
-  constructor({
-    dispatchToDOM = false
-  } = {}) {
+  constructor() {
     this._listeners = Object.create(null);
-    this._dispatchToDOM = dispatchToDOM === true;
   }
   on(eventName, listener) {
     let eventListeners = this._listeners[eventName];
     if (!eventListeners) {
       eventListeners = [];
       this._listeners[eventName] = eventListeners;
     }
     eventListeners.push(listener);
@@ -2310,50 +2301,22 @@ class EventBus {
     if (!eventListeners || (i = eventListeners.indexOf(listener)) < 0) {
       return;
     }
     eventListeners.splice(i, 1);
   }
   dispatch(eventName) {
     let eventListeners = this._listeners[eventName];
     if (!eventListeners || eventListeners.length === 0) {
-      if (this._dispatchToDOM) {
-        this._dispatchDOMEvent(eventName);
-      }
       return;
     }
     let args = Array.prototype.slice.call(arguments, 1);
     eventListeners.slice(0).forEach(function (listener) {
       listener.apply(null, args);
     });
-    if (this._dispatchToDOM) {
-      this._dispatchDOMEvent(eventName, args);
-    }
-  }
-  _dispatchDOMEvent(eventName, args = null) {
-    if (!this._dispatchToDOM) {
-      return;
-    }
-    const details = Object.create(null);
-    if (args && args.length > 0) {
-      const obj = args[0];
-      for (let key in obj) {
-        const value = obj[key];
-        if (key === 'source') {
-          if (value === window || value === document) {
-            return;
-          }
-          continue;
-        }
-        details[key] = value;
-      }
-    }
-    const event = document.createEvent('CustomEvent');
-    event.initCustomEvent(eventName, true, true, details);
-    document.dispatchEvent(event);
   }
 }
 function clamp(v, min, max) {
   return Math.min(Math.max(v, min), max);
 }
 class ProgressBar {
   constructor(id, { height, width, units } = {}) {
     this.visible = true;
@@ -3173,20 +3136,16 @@ const defaultOptions = {
   enablePrintAutoRotate: {
     value: false,
     kind: OptionKind.VIEWER
   },
   enableWebGL: {
     value: false,
     kind: OptionKind.VIEWER
   },
-  eventBusDispatchToDOM: {
-    value: false,
-    kind: OptionKind.VIEWER
-  },
   externalLinkRel: {
     value: 'noopener noreferrer nofollow',
     kind: OptionKind.VIEWER
   },
   externalLinkTarget: {
     value: 0,
     kind: OptionKind.VIEWER
   },
@@ -3444,23 +3403,22 @@ function attachDOMEventsToEventBus(event
   });
   eventBus.on('outlineloaded', function (evt) {
     let event = document.createEvent('CustomEvent');
     event.initCustomEvent('outlineloaded', true, true, { outlineCount: evt.outlineCount });
     evt.source.container.dispatchEvent(event);
   });
 }
 let globalEventBus = null;
-function getGlobalEventBus(dispatchToDOM = false) {
-  if (!globalEventBus) {
-    globalEventBus = new _ui_utils.EventBus({ dispatchToDOM });
-    if (!dispatchToDOM) {
-      attachDOMEventsToEventBus(globalEventBus);
-    }
-  }
+function getGlobalEventBus() {
+  if (globalEventBus) {
+    return globalEventBus;
+  }
+  globalEventBus = new _ui_utils.EventBus();
+  attachDOMEventsToEventBus(globalEventBus);
   return globalEventBus;
 }
 exports.attachDOMEventsToEventBus = attachDOMEventsToEventBus;
 exports.getGlobalEventBus = getGlobalEventBus;
 
 /***/ }),
 /* 11 */
 /***/ (function(module, exports, __webpack_require__) {
@@ -5429,29 +5387,29 @@ class PDFPresentationMode {
     this.args = null;
     this.contextMenuOpen = false;
     this.mouseScrollTimeStamp = 0;
     this.mouseScrollDelta = 0;
     this.touchSwipeState = null;
     if (contextMenuItems) {
       contextMenuItems.contextFirstPage.addEventListener('click', () => {
         this.contextMenuOpen = false;
-        this.eventBus.dispatch('firstpage', { source: this });
+        this.eventBus.dispatch('firstpage');
       });
       contextMenuItems.contextLastPage.addEventListener('click', () => {
         this.contextMenuOpen = false;
-        this.eventBus.dispatch('lastpage', { source: this });
+        this.eventBus.dispatch('lastpage');
       });
       contextMenuItems.contextPageRotateCw.addEventListener('click', () => {
         this.contextMenuOpen = false;
-        this.eventBus.dispatch('rotatecw', { source: this });
+        this.eventBus.dispatch('rotatecw');
       });
       contextMenuItems.contextPageRotateCcw.addEventListener('click', () => {
         this.contextMenuOpen = false;
-        this.eventBus.dispatch('rotateccw', { source: this });
+        this.eventBus.dispatch('rotateccw');
       });
     }
   }
   request() {
     if (this.switchInProgress || this.active || !this.viewer.hasChildNodes()) {
       return false;
     }
     this._addFullscreenChangeListeners();
@@ -8494,26 +8452,26 @@ class Toolbar {
     this.pageScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;
     this.pageScale = _ui_utils.DEFAULT_SCALE;
     this._updateUIState(true);
   }
   _bindListeners() {
     let { eventBus, items } = this;
     let self = this;
     items.previous.addEventListener('click', function () {
-      eventBus.dispatch('previouspage', { source: self });
+      eventBus.dispatch('previouspage');
     });
     items.next.addEventListener('click', function () {
-      eventBus.dispatch('nextpage', { source: self });
+      eventBus.dispatch('nextpage');
     });
     items.zoomIn.addEventListener('click', function () {
-      eventBus.dispatch('zoomin', { source: self });
+      eventBus.dispatch('zoomin');
     });
     items.zoomOut.addEventListener('click', function () {
-      eventBus.dispatch('zoomout', { source: self });
+      eventBus.dispatch('zoomout');
     });
     items.pageNumber.addEventListener('click', function () {
       this.select();
     });
     items.pageNumber.addEventListener('change', function () {
       eventBus.dispatch('pagenumberchanged', {
         source: self,
         value: this.value
@@ -8524,26 +8482,26 @@ class Toolbar {
         return;
       }
       eventBus.dispatch('scalechanged', {
         source: self,
         value: this.value
       });
     });
     items.presentationModeButton.addEventListener('click', function () {
-      eventBus.dispatch('presentationmode', { source: self });
+      eventBus.dispatch('presentationmode');
     });
     items.openFile.addEventListener('click', function () {
-      eventBus.dispatch('openfile', { source: self });
+      eventBus.dispatch('openfile');
     });
     items.print.addEventListener('click', function () {
-      eventBus.dispatch('print', { source: self });
+      eventBus.dispatch('print');
     });
     items.download.addEventListener('click', function () {
-      eventBus.dispatch('download', { source: self });
+      eventBus.dispatch('download');
     });
     items.scaleSelect.oncontextmenu = _ui_utils.noContextMenuHandler;
     eventBus.on('localized', () => {
       this._localized();
     });
   }
   _localized() {
     this._wasLocalized = true;
@@ -9071,17 +9029,16 @@ let defaultPreferences = null;
 function getDefaultPreferences() {
   if (!defaultPreferences) {
     defaultPreferences = Promise.resolve({
       "showPreviousViewOnLoad": true,
       "defaultZoomValue": "",
       "sidebarViewOnLoad": 0,
       "cursorToolOnLoad": 0,
       "enableWebGL": false,
-      "eventBusDispatchToDOM": false,
       "pdfBugEnabled": false,
       "disableRange": false,
       "disableStream": false,
       "disableAutoFetch": false,
       "disableFontFace": false,
       "textLayerMode": 1,
       "useOnlyCssZoom": false,
       "externalLinkTarget": 0,
--- a/browser/extensions/pdfjs/moz.yaml
+++ b/browser/extensions/pdfjs/moz.yaml
@@ -15,15 +15,15 @@ origin:
   description: Portable Document Format (PDF) viewer that is built with HTML5
 
   # Full URL for the package's homepage/etc
   # Usually different from repository url
   url: https://github.com/mozilla/pdf.js
 
   # Human-readable identifier for this version/release
   # Generally "version NNN", "tag SSS", "bookmark SSS"
-  release: version 2.0.813
+  release: version 2.0.775
 
   # The package's license, where possible using the mnemonic from
   # https://spdx.org/licenses/
   # Multiple licenses can be specified (as a YAML list)
   # A "LICENSE" file must exist containing the full license text
   license: Apache-2.0