From be6ccdca34a1cced706ce385e671556acb23faa5 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Fri, 6 Apr 2012 15:52:57 -0700 Subject: [PATCH 01/52] Rebuilding invalid OS/2 table --- src/fonts.js | 52 ++++++++++++++++++++++++------------ test/pdfs/issue1502.pdf.link | 1 + test/test_manifest.json | 8 ++++++ 3 files changed, 44 insertions(+), 17 deletions(-) create mode 100644 test/pdfs/issue1502.pdf.link diff --git a/src/fonts.js b/src/fonts.js index 7fdab8fbb..2757b8851 100644 --- a/src/fonts.js +++ b/src/fonts.js @@ -1727,6 +1727,16 @@ var Font = (function FontClosure() { properties.glyphNames = glyphNames; } + function isOS2Valid(os2Table) { + var data = os2Table.data; + // usWinAscent == 0 makes font unreadable by windows + var usWinAscent = (data[74] << 8) | data[75]; + if (usWinAscent == 0) + return false; + + return true; + } + // Check that required tables are present var requiredTables = ['OS/2', 'cmap', 'head', 'hhea', 'hmtx', 'maxp', 'name', 'post']; @@ -1734,7 +1744,7 @@ var Font = (function FontClosure() { var header = readOpenTypeHeader(font); var numTables = header.numTables; - var cmap, post, maxp, hhea, hmtx, vhea, vmtx, head, loca, glyf; + var cmap, post, maxp, hhea, hmtx, vhea, vmtx, head, loca, glyf, os2; var tables = []; for (var i = 0; i < numTables; i++) { var table = readTableEntry(font); @@ -1752,6 +1762,8 @@ var Font = (function FontClosure() { hmtx = table; else if (table.tag == 'head') head = table; + else if (table.tag == 'OS/2') + os2 = table; requiredTables.splice(index, 1); } else { @@ -1767,7 +1779,7 @@ var Font = (function FontClosure() { tables.push(table); } - var numTables = header.numTables + requiredTables.length; + var numTables = tables.length + requiredTables.length; // header and new offsets. Table entry information is appended to the // end of file. The virtualOffset represents where to put the actual @@ -1781,21 +1793,10 @@ var Font = (function FontClosure() { // of missing tables createOpenTypeHeader(header.version, ttf, numTables); - if (requiredTables.indexOf('OS/2') != -1) { - // extract some more font properties from the OpenType head and - // hhea tables; yMin and descent value are always negative - var override = { - unitsPerEm: int16([head.data[18], head.data[19]]), - yMax: int16([head.data[42], head.data[43]]), - yMin: int16([head.data[38], head.data[39]]) - 0x10000, - ascent: int16([hhea.data[4], hhea.data[5]]), - descent: int16([hhea.data[6], hhea.data[7]]) - 0x10000 - }; - - tables.push({ - tag: 'OS/2', - data: stringToArray(createOS2Table(properties, null, override)) - }); + // Invalid OS/2 can break the font for the Windows + if (os2 && !isOS2Valid(os2)) { + tables.splice(tables.indexOf(os2), 1); + os2 = null; } // Ensure the [h/v]mtx tables contains the advance width and @@ -2076,6 +2077,23 @@ var Font = (function FontClosure() { } this.unicodeIsEnabled = unicodeIsEnabled; + if (!os2) { + // extract some more font properties from the OpenType head and + // hhea tables; yMin and descent value are always negative + var override = { + unitsPerEm: int16([head.data[18], head.data[19]]), + yMax: int16([head.data[42], head.data[43]]), + yMin: int16([head.data[38], head.data[39]]) - 0x10000, + ascent: int16([hhea.data[4], hhea.data[5]]), + descent: int16([hhea.data[6], hhea.data[7]]) - 0x10000 + }; + + tables.push({ + tag: 'OS/2', + data: stringToArray(createOS2Table(properties, glyphs, override)) + }); + } + // Rewrite the 'post' table if needed if (requiredTables.indexOf('post') != -1) { tables.push({ diff --git a/test/pdfs/issue1502.pdf.link b/test/pdfs/issue1502.pdf.link new file mode 100644 index 000000000..37b4e80c0 --- /dev/null +++ b/test/pdfs/issue1502.pdf.link @@ -0,0 +1 @@ +http://register.consilium.europa.eu/pdf/en/11/st12/st12196.en11.pdf diff --git a/test/test_manifest.json b/test/test_manifest.json index 6a083bdf7..00ad7be11 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -559,6 +559,14 @@ "link": true, "type": "eq" }, + { "id": "issue1502", + "file": "pdfs/issue1502.pdf", + "md5": "6f0569b7e85561ea784cb0403de89d84", + "rounds": 1, + "pageLimit": 5, + "link": true, + "type": "eq" + }, { "id": "issue1317", "file": "pdfs/issue1317.pdf", "md5": "6fb46275b30c48c8985617d4f86199e3", From 25d6aedad75f861b993489c3383f75d7edb97175 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Fri, 6 Apr 2012 21:27:47 -0700 Subject: [PATCH 02/52] Fix make file for older sed (for msys/Windows); depth=1 git clone --- Makefile | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index 3cc423350..9fe35e804 100644 --- a/Makefile +++ b/Makefile @@ -74,7 +74,8 @@ bundle: | $(BUILD_DIR) @cd src; \ cat $(PDF_JS_FILES) > all_files.tmp; \ sed '/PDFJSSCRIPT_INCLUDE_ALL/ r all_files.tmp' pdf.js > ../$(BUILD_TARGET); \ - sed -i.bak "s/PDFJSSCRIPT_BUNDLE_VER/`git log --format="%h" -n 1`/" ../$(BUILD_TARGET); \ + cp ../$(BUILD_TARGET) ../$(BUILD_TARGET).bak; \ + sed "s/PDFJSSCRIPT_BUNDLE_VER/`git log --format="%h" -n 1`/" ../$(BUILD_TARGET).bak > ../$(BUILD_TARGET); \ rm -f ../$(BUILD_TARGET).bak; \ rm -f *.tmp; \ cd .. @@ -184,7 +185,7 @@ web: | production extension compiler pages-repo # and deletions. pages-repo: | $(BUILD_DIR) @if [ ! -d "$(GH_PAGES)" ]; then \ - git clone -b gh-pages $(REPO) $(GH_PAGES); \ + git clone --depth 1 -b gh-pages $(REPO) $(GH_PAGES); \ rm -rf $(GH_PAGES)/*; \ fi; @mkdir -p $(GH_PAGES)/web; @@ -273,25 +274,34 @@ extension: | production @cp web/viewer-snippet-firefox-extension.html $(FIREFOX_BUILD_CONTENT)/web/ # Modify the viewer so it does all the extension only stuff. @cd $(FIREFOX_BUILD_CONTENT)/web; \ - sed -i.bak '/PDFJSSCRIPT_INCLUDE_BUNDLE/ r ../build/pdf.js' viewer-snippet-firefox-extension.html; \ - sed -i.bak '/PDFJSSCRIPT_REMOVE_CORE/d' viewer.html; \ - sed -i.bak '/PDFJSSCRIPT_REMOVE_FIREFOX_EXTENSION/d' viewer.html; \ - sed -i.bak '/PDFJSSCRIPT_INCLUDE_FIREFOX_EXTENSION/ r viewer-snippet-firefox-extension.html' viewer.html; \ + cp viewer-snippet-firefox-extension.html viewer-snippet-firefox-extension.html.bak; \ + sed '/PDFJSSCRIPT_INCLUDE_BUNDLE/ r ../build/pdf.js' viewer-snippet-firefox-extension.html.bak > viewer-snippet-firefox-extension.html; \ + cp viewer.html viewer.html.bak; \ + sed '/PDFJSSCRIPT_REMOVE_CORE/d' viewer.html.bak > viewer.html; \ + cp viewer.html viewer.html.bak; \ + sed '/PDFJSSCRIPT_REMOVE_FIREFOX_EXTENSION/d' viewer.html.bak > viewer.html; \ + cp viewer.html viewer.html.bak; \ + sed '/PDFJSSCRIPT_INCLUDE_FIREFOX_EXTENSION/ r viewer-snippet-firefox-extension.html' viewer.html.bak > viewer.html; \ rm -f *.bak; # We don't need pdf.js anymore since its inlined @rm -Rf $(FIREFOX_BUILD_CONTENT)/$(BUILD_DIR)/; # Update the build version number - @sed -i.bak "s/PDFJSSCRIPT_VERSION/$(PDFJSSCRIPT_VERSION)/" $(FIREFOX_BUILD_DIR)/install.rdf - @sed -i.bak "s/PDFJSSCRIPT_VERSION/$(PDFJSSCRIPT_VERSION)/" $(FIREFOX_BUILD_DIR)/install.rdf.in - @sed -i.bak "s/PDFJSSCRIPT_VERSION/$(PDFJSSCRIPT_VERSION)/" $(FIREFOX_BUILD_DIR)/update.rdf - @sed -i.bak "s/PDFJSSCRIPT_VERSION/$(PDFJSSCRIPT_VERSION)/" $(FIREFOX_BUILD_DIR)/README.mozilla + cp $(FIREFOX_BUILD_DIR)/install.rdf $(FIREFOX_BUILD_DIR)/install.rdf.bak + @sed "s/PDFJSSCRIPT_VERSION/$(PDFJSSCRIPT_VERSION)/" $(FIREFOX_BUILD_DIR)/install.rdf.bak > $(FIREFOX_BUILD_DIR)/install.rdf + cp $(FIREFOX_BUILD_DIR)/install.rdf.in $(FIREFOX_BUILD_DIR)/install.rdf.in.bak + @sed "s/PDFJSSCRIPT_VERSION/$(PDFJSSCRIPT_VERSION)/" $(FIREFOX_BUILD_DIR)/install.rdf.in.bak > $(FIREFOX_BUILD_DIR)/install.rdf.in + cp $(FIREFOX_BUILD_DIR)/update.rdf $(FIREFOX_BUILD_DIR)/update.rdf.bak + @sed "s/PDFJSSCRIPT_VERSION/$(PDFJSSCRIPT_VERSION)/" $(FIREFOX_BUILD_DIR)/update.rdf.bak > $(FIREFOX_BUILD_DIR)/update.rdf + cp $(FIREFOX_BUILD_DIR)/README.mozilla $(FIREFOX_BUILD_DIR)/README.mozilla.bak + @sed "s/PDFJSSCRIPT_VERSION/$(PDFJSSCRIPT_VERSION)/" $(FIREFOX_BUILD_DIR)/README.mozilla.bak > $(FIREFOX_BUILD_DIR)/README.mozilla @rm -f $(FIREFOX_BUILD_DIR)/*.bak @find $(FIREFOX_BUILD_DIR) -name ".*" -delete # Create the xpi @cd $(FIREFOX_BUILD_DIR); zip -r $(FIREFOX_EXTENSION_NAME) $(FIREFOX_EXTENSION_FILES) @echo "extension created: " $(FIREFOX_EXTENSION_NAME) # Build the amo extension too (remove the updateUrl) - @sed -i.bak "/updateURL/d" $(FIREFOX_BUILD_DIR)/install.rdf + cp $(FIREFOX_BUILD_DIR)/install.rdf $(FIREFOX_BUILD_DIR)/install.rdf.bak + @sed "/updateURL/d" $(FIREFOX_BUILD_DIR)/install.rdf.bak > $(FIREFOX_BUILD_DIR)/install.rdf @rm -f $(FIREFOX_BUILD_DIR)/*.bak @cd $(FIREFOX_BUILD_DIR); zip -r $(FIREFOX_AMO_EXTENSION_NAME) $(FIREFOX_EXTENSION_FILES) @echo "AMO extension created: " $(FIREFOX_AMO_EXTENSION_NAME) From c21a95c430c969bb8d31abee76bfed0ab7e740de Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Fri, 6 Apr 2012 22:34:49 -0700 Subject: [PATCH 03/52] Update MD5s for the linked pdfs --- test/test_manifest.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/test_manifest.json b/test/test_manifest.json index 6a083bdf7..4990beac0 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -19,7 +19,7 @@ }, { "id": "intelisa-eq", "file": "pdfs/intelisa.pdf", - "md5": "83032ccbfdc5a66269b1403971110abe", + "md5": "c1444b7ccd935c0577d094297e1a6448", "link": true, "pageLimit": 100, "rounds": 1, @@ -34,7 +34,7 @@ }, { "id": "shavian-load", "file": "pdfs/shavian.pdf", - "md5": "4fabf0a03e82693007435020bc446f9b", + "md5": "79253352f48b55b7fa28a2586875d8b7", "link": true, "rounds": 1, "type": "load" @@ -243,7 +243,7 @@ }, { "id": "tcpdf_033", "file": "pdfs/tcpdf_033.pdf", - "md5": "861294df58d185aae80919173f2732ff", + "md5": "d7d9165a5e37029a67308a4dec3a8aeb", "link": true, "rounds": 1, "type": "eq" From 737ed8417472b9c5084f963de95e3f87779dd7b2 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Mon, 9 Apr 2012 22:20:57 -0700 Subject: [PATCH 04/52] Initial API implementation --- src/api.js | 141 +++++++++++++++++++++++++++++++ src/util.js | 17 +++- web/viewer.html | 1 + web/viewer.js | 220 +++++++++++++++++++++++++++--------------------- 4 files changed, 281 insertions(+), 98 deletions(-) create mode 100644 src/api.js diff --git a/src/api.js b/src/api.js new file mode 100644 index 000000000..a8bb5fb65 --- /dev/null +++ b/src/api.js @@ -0,0 +1,141 @@ +/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ + +(function pdfApiWrapper() { + function PdfPageWrapper(page) { + this.page = page; + } + PdfPageWrapper.prototype = { + get width() { + return this.page.width; + }, + get height() { + return this.page.height; + }, + get stats() { + return this.page.stats; + }, + get ref() { + return this.page.ref; + }, + get view() { + return this.page.view; + }, + rotatePoint: function(x, y) { + return this.page.rotatePoint(x, y); + }, + getAnnotations: function() { + var promise = new PDFJS.Promise(); + var annotations = this.page.getAnnotations(); + promise.resolve(annotations); + return promise; + }, + render: function(renderContext) { + var promise = new PDFJS.Promise(); + this.page.startRendering(renderContext.canvasContext, + function complete(error) { + if (error) + promise.reject(error); + else + promise.resolve(); + }, + renderContext.textLayer); + return promise; + }, + getTextContent: function() { + var promise = new PDFJS.Promise(); + var textContent = 'page text'; // not implemented + promise.resolve(textContent); + return promise; + }, + getOperationList: function() { + var promise = new PDFJS.Promise(); + var operationList = { // not implemented + dependencyFontsID: null, + operatorList: null + }; + promise.resolve(operationList); + return promise; + } + }; + + function PdfDocumentWrapper(pdf) { + this.pdf = pdf; + } + PdfDocumentWrapper.prototype = { + get numPages() { + return this.pdf.numPages; + }, + get fingerprint() { + return this.pdf.fingerPrint; + }, + getPage: function(number) { + var promise = new PDFJS.Promise(); + var page = this.pdf.getPage(number); + promise.resolve(new PdfPageWrapper(page)); + return promise; + }, + getDestinations: function() { + var promise = new PDFJS.Promise(); + var destinations = this.pdf.catalog.destinations; + promise.resolve(destinations); + return promise; + }, + getOutline: function() { + var promise = new PDFJS.Promise(); + var outline = this.pdf.catalog.documentOutline; + promise.resolve(outline); + return promise; + }, + getMetadata: function() { + var promise = new PDFJS.Promise(); + var info = this.pdf.info; + var metadata = this.pdf.catalog.metadata; + promise.resolve(info, metadata ? new PDFJS.Metadata(metadata) : null); + return promise; + } + }; + + PDFJS.getDocument = function getDocument(source) { + var promise = new PDFJS.Promise(); + if (typeof source === 'string') { + // fetch url + PDFJS.getPdf( + { + url: source, + progress: function getPdfProgress(evt) { + if (evt.lengthComputable) + promise.progress({ + loaded: evt.loaded, + total: evt.total + }); + }, + error: function getPdfError(e) { + promise.reject('Unexpected server response of ' + + e.target.status + '.'); + } + }, + function getPdfLoad(data) { + var pdf = null; + try { + pdf = new PDFJS.PDFDoc(data); + } catch (e) { + promise.reject('An error occurred while reading the PDF.', e); + } + if (pdf) + promise.resolve(new PdfDocumentWrapper(pdf)); + }); + } else { + // assuming the source is array, instantiating directly from it + var pdf = null; + try { + pdf = new PDFJS.PDFDoc(source); + } catch (e) { + promise.reject('An error occurred while reading the PDF.', e); + } + if (pdf) + promise.resolve(new PdfDocumentWrapper(pdf)); + } + return promise; + }; +})(); diff --git a/src/util.js b/src/util.js index de7f3c1d5..30fc799f9 100644 --- a/src/util.js +++ b/src/util.js @@ -275,7 +275,7 @@ function isPDFFunction(v) { * can be set. If any of these happens twice or the data is required before * it was set, an exception is throw. */ -var Promise = (function PromiseClosure() { +var Promise = PDFJS.Promise = (function PromiseClosure() { var EMPTY_PROMISE = {}; /** @@ -297,6 +297,7 @@ var Promise = (function PromiseClosure() { } this.callbacks = []; this.errbacks = []; + this.progressbacks = []; }; /** * Builds a promise that is resolved when all the passed in promises are @@ -312,7 +313,7 @@ var Promise = (function PromiseClosure() { deferred.resolve(results); return deferred; } - for (var i = 0; i < unresolved; ++i) { + for (var i = 0, ii = promises.length; i < ii; ++i) { var promise = promises[i]; promise.then((function(i) { return function(value) { @@ -376,6 +377,13 @@ var Promise = (function PromiseClosure() { } }, + progress: function Promise_progress(data) { + var callbacks = this.progressbacks; + for (var i = 0, ii = callbacks.length; i < ii; i++) { + callbacks[i].call(null, data); + } + }, + reject: function Promise_reject(reason) { if (this.isRejected) { error('A Promise can be rejected only once ' + this.name); @@ -393,7 +401,7 @@ var Promise = (function PromiseClosure() { } }, - then: function Promise_then(callback, errback) { + then: function Promise_then(callback, errback, progressback) { if (!callback) { error('Requiring callback' + this.name); } @@ -410,6 +418,9 @@ var Promise = (function PromiseClosure() { if (errback) this.errbacks.push(errback); } + + if (progressback) + this.progressbacks.push(progressback); } }; diff --git a/web/viewer.html b/web/viewer.html index d275f77c1..ef61ce697 100644 --- a/web/viewer.html +++ b/web/viewer.html @@ -11,6 +11,7 @@ + diff --git a/web/viewer.js b/web/viewer.js index 3587c96bd..3ca4f805f 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -318,27 +318,25 @@ var PDFView = { } var self = this; - PDFJS.getPdf( - { - url: url, - progress: function getPdfProgress(evt) { - if (evt.lengthComputable) - self.progress(evt.loaded / evt.total); - }, - error: function getPdfError(e) { - var loadingIndicator = document.getElementById('loading'); - loadingIndicator.textContent = 'Error'; - var moreInfo = { - message: 'Unexpected server response of ' + e.target.status + '.' - }; - self.error('An error occurred while loading the PDF.', moreInfo); - } - }, - function getPdfLoad(data) { - self.loading = true; - self.load(data, scale); + self.loading = true; + PDFJS.getDocument(url).then( + function getDocumentCallback(pdfDocument) { + self.load(pdfDocument, scale); self.loading = false; - }); + }, + function getDocumentError(message, exception) { + var loadingIndicator = document.getElementById('loading'); + loadingIndicator.textContent = 'Error'; + var moreInfo = { + message: message + }; + self.error('An error occurred while loading the PDF.', moreInfo); + self.loading = false; + }, + function getDocumentProgress(progressData) { + self.progress(progressData.loaded / progressData.total); + } + ); }, download: function pdfViewDownload() { @@ -461,7 +459,7 @@ var PDFView = { PDFView.loadingBar.percent = percent; }, - load: function pdfViewLoad(data, scale) { + load: function pdfViewLoad(pdfDocument, scale) { function bindOnAfterDraw(pageView, thumbnailView) { // when page is painted, using the image as thumbnail base pageView.onAfterDraw = function pdfViewLoadOnAfterDraw() { @@ -489,14 +487,8 @@ var PDFView = { while (container.hasChildNodes()) container.removeChild(container.lastChild); - var pdf; - try { - pdf = new PDFJS.PDFDoc(data); - } catch (e) { - this.error('An error occurred while reading the PDF.', e); - } - var pagesCount = pdf.numPages; - var id = pdf.fingerprint; + var pagesCount = pdfDocument.numPages; + var id = pdfDocument.fingerprint; var storedHash = null; document.getElementById('numPages').textContent = pagesCount; document.getElementById('pageNumber').max = pagesCount; @@ -514,30 +506,68 @@ var PDFView = { var pages = this.pages = []; var pagesRefMap = {}; var thumbnails = this.thumbnails = []; - for (var i = 1; i <= pagesCount; i++) { - var page = pdf.getPage(i); - var pageView = new PageView(container, page, i, page.width, page.height, - page.stats, this.navigateTo.bind(this)); - var thumbnailView = new ThumbnailView(sidebar, page, i, - page.width / page.height); - bindOnAfterDraw(pageView, thumbnailView); + var pagePromises = []; + for (var i = 1; i <= pagesCount; i++) + pagePromises.push(pdfDocument.getPage(i)); + var self = this; + var pagesPromise = PDFJS.Promise.all(pagePromises); + pagesPromise.then(function(promisedPages) { + for (var i = 1; i <= pagesCount; i++) { + var page = promisedPages[i - 1]; + var pageView = new PageView(container, page, i, page.width, page.height, + page.stats, self.navigateTo.bind(self)); + var thumbnailView = new ThumbnailView(sidebar, page, i, + page.width / page.height); + bindOnAfterDraw(pageView, thumbnailView); - pages.push(pageView); - thumbnails.push(thumbnailView); - var pageRef = page.ref; - pagesRefMap[pageRef.num + ' ' + pageRef.gen + ' R'] = i; - } + pages.push(pageView); + thumbnails.push(thumbnailView); + var pageRef = page.ref; + pagesRefMap[pageRef.num + ' ' + pageRef.gen + ' R'] = i; + } - this.pagesRefMap = pagesRefMap; - this.destinations = pdf.catalog.destinations; + self.pagesRefMap = pagesRefMap; + }); - if (pdf.catalog.documentOutline) { - this.outline = new DocumentOutlineView(pdf.catalog.documentOutline); - var outlineSwitchButton = document.getElementById('outlineSwitch'); - outlineSwitchButton.removeAttribute('disabled'); - this.switchSidebarView('outline'); - } + var destinationsPromise = pdfDocument.getDestinations(); + destinationsPromise.then(function(destinations) { + self.destinations = destinations; + }); + // outline and initial view depends on destinations and pagesRefMap + PDFJS.Promise.all([pagesPromise, destinationsPromise]).then(function() { + pdfDocument.getOutline().then(function(outline) { + if (!outline) + return; + + self.outline = new DocumentOutlineView(outline); + var outlineSwitchButton = document.getElementById('outlineSwitch'); + outlineSwitchButton.removeAttribute('disabled'); + self.switchSidebarView('outline'); + }); + + self.setInitialView(storedHash, scale); + }); + + pdfDocument.getMetadata().then(function(info, metadata) { + self.documentInfo = info; + self.metadata = metadata; + + var pdfTitle; + if (metadata) { + if (metadata.has('dc:title')) + pdfTitle = metadata.get('dc:title'); + } + + if (!pdfTitle && info && info['Title']) + pdfTitle = info['Title']; + + if (pdfTitle) + document.title = pdfTitle + ' - ' + document.title; + }); + }, + + setInitialView: function pdfViewSetInitialView(storedHash, scale) { // Reset the current scale, as otherwise the page's scale might not get // updated if the zoom level stayed the same. this.currentScale = 0; @@ -558,24 +588,6 @@ var PDFView = { // Setting the default one. this.parseScale(kDefaultScale, true); } - - this.metadata = null; - var metadata = pdf.catalog.metadata; - var info = this.documentInfo = pdf.info; - var pdfTitle; - - if (metadata) { - this.metadata = metadata = new PDFJS.Metadata(metadata); - - if (metadata.has('dc:title')) - pdfTitle = metadata.get('dc:title'); - } - - if (!pdfTitle && info && info['Title']) - pdfTitle = info['Title']; - - if (pdfTitle) - document.title = pdfTitle + ' - ' + document.title; }, setHash: function pdfViewSetHash(hash) { @@ -711,12 +723,12 @@ var PDFView = { } }; -var PageView = function pageView(container, content, id, pageWidth, pageHeight, +var PageView = function pageView(container, pdfPage, id, pageWidth, pageHeight, stats, navigateTo) { this.id = id; - this.content = content; + this.pdfPage = pdfPage; - var view = this.content.view; + var view = pdfPage.view; this.x = view.x; this.y = view.y; this.width = view.width; @@ -748,7 +760,7 @@ var PageView = function pageView(container, content, id, pageWidth, pageHeight, div.appendChild(this.loadingIconDiv); }; - function setupAnnotations(content, scale) { + function setupAnnotations(pdfPage, scale) { function bindLink(link, dest) { link.href = PDFView.getDestinationHash(dest); link.onclick = function pageViewSetupLinksOnclick() { @@ -809,29 +821,30 @@ var PageView = function pageView(container, content, id, pageWidth, pageHeight, return container; } - var items = content.getAnnotations(); - for (var i = 0; i < items.length; i++) { - var item = items[i]; - switch (item.type) { - case 'Link': - var link = createElementWithStyle('a', item); - link.href = item.url || ''; - if (!item.url) - bindLink(link, ('dest' in item) ? item.dest : null); - div.appendChild(link); - break; - case 'Text': - var comment = createCommentAnnotation(item.name, item); - if (comment) - div.appendChild(comment); - break; + pdfPage.getAnnotations().then(function(items) { + for (var i = 0; i < items.length; i++) { + var item = items[i]; + switch (item.type) { + case 'Link': + var link = createElementWithStyle('a', item); + link.href = item.url || ''; + if (!item.url) + bindLink(link, ('dest' in item) ? item.dest : null); + div.appendChild(link); + break; + case 'Text': + var comment = createCommentAnnotation(item.name, item); + if (comment) + div.appendChild(comment); + break; + } } - } + }); } this.getPagePoint = function pageViewGetPagePoint(x, y) { var scale = PDFView.currentScale; - return this.content.rotatePoint(x / scale, y / scale); + return this.pdfPage.rotatePoint(x / scale, y / scale); }; this.scrollIntoView = function pageViewScrollIntoView(dest) { @@ -879,8 +892,8 @@ var PageView = function pageView(container, content, id, pageWidth, pageHeight, } var boundingRect = [ - this.content.rotatePoint(x, y), - this.content.rotatePoint(x + width, y + height) + this.pdfPage.rotatePoint(x, y), + this.pdfPage.rotatePoint(x + width, y + height) ]; if (scale && scale !== PDFView.currentScale) @@ -948,7 +961,7 @@ var PageView = function pageView(container, content, id, pageWidth, pageHeight, // Rendering area var self = this; - this.content.startRendering(ctx, function pageViewDrawCallback(error) { + function pageViewDrawCallback(error) { if (self.loadingIconDiv) { div.removeChild(self.loadingIconDiv); delete self.loadingIconDiv; @@ -964,9 +977,22 @@ var PageView = function pageView(container, content, id, pageWidth, pageHeight, cache.push(self); callback(); - }, textLayer); + } - setupAnnotations(this.content, this.scale); + var renderContext = { + canvasContext: ctx, + textLayer: textLayer + }; + this.pdfPage.render(renderContext).then( + function pdfPageRenderCallback() { + pageViewDrawCallback(null); + }, + function pdfPageRenderError(error) { + pageViewDrawCallback(error); + } + ); + + setupAnnotations(this.pdfPage, this.scale); div.setAttribute('data-loaded', true); }; @@ -1397,7 +1423,11 @@ window.addEventListener('change', function webViewerChange(evt) { for (var i = 0; i < data.length; i++) uint8Array[i] = data.charCodeAt(i); - PDFView.load(uint8Array); + + // TODO using blob instead? + PDFJS.getDocument(uint8Array).then(function(pdfDocument) { + PDFView.load(pdfDocument); + }); }; // Read as a binary string since "readAsArrayBuffer" is not yet From fbd9fcd8fbfa14688e60c58cf062b55d04c2bfe0 Mon Sep 17 00:00:00 2001 From: Brendan Dahl Date: Tue, 10 Apr 2012 12:17:43 -0700 Subject: [PATCH 05/52] Fix fingerprint name. --- src/api.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api.js b/src/api.js index a8bb5fb65..220b738a0 100644 --- a/src/api.js +++ b/src/api.js @@ -67,7 +67,7 @@ return this.pdf.numPages; }, get fingerprint() { - return this.pdf.fingerPrint; + return this.pdf.fingerprint; }, getPage: function(number) { var promise = new PDFJS.Promise(); From 47c43b5779451f3011cde8ffb9bb242492315a5a Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Wed, 11 Apr 2012 08:29:44 -0700 Subject: [PATCH 06/52] Removing the rotatePoint, width, height from the API --- src/api.js | 14 +++---- src/canvas.js | 23 ++--------- src/core.js | 81 ++++++--------------------------------- src/util.js | 88 +++++++++++++++++++++++++++++++++++++++++- web/viewer.js | 103 +++++++++++++++++++++++++------------------------- 5 files changed, 160 insertions(+), 149 deletions(-) diff --git a/src/api.js b/src/api.js index a8bb5fb65..d6d0bc5c6 100644 --- a/src/api.js +++ b/src/api.js @@ -6,11 +6,8 @@ this.page = page; } PdfPageWrapper.prototype = { - get width() { - return this.page.width; - }, - get height() { - return this.page.height; + get rotate() { + return this.page.rotate; }, get stats() { return this.page.stats; @@ -21,8 +18,10 @@ get view() { return this.page.view; }, - rotatePoint: function(x, y) { - return this.page.rotatePoint(x, y); + getViewport: function(scale, rotate) { + if (arguments < 2) + rotate = this.rotate; + return new PDFJS.PageViewport(this.view, scale, rotate, 0, 0); }, getAnnotations: function() { var promise = new PDFJS.Promise(); @@ -33,6 +32,7 @@ render: function(renderContext) { var promise = new PDFJS.Promise(); this.page.startRendering(renderContext.canvasContext, + renderContext.viewport, function complete(error) { if (error) promise.reject(error); diff --git a/src/canvas.js b/src/canvas.js index 8f29051fd..9d470fbec 100644 --- a/src/canvas.js +++ b/src/canvas.js @@ -241,27 +241,10 @@ var CanvasGraphics = (function CanvasGraphicsClosure() { 'shadingFill': true }, - beginDrawing: function CanvasGraphics_beginDrawing(mediaBox) { - var cw = this.ctx.canvas.width, ch = this.ctx.canvas.height; + beginDrawing: function CanvasGraphics_beginDrawing(viewport) { + var transform = viewport.transform; this.ctx.save(); - switch (mediaBox.rotate) { - case 0: - this.ctx.transform(1, 0, 0, -1, 0, ch); - break; - case 90: - this.ctx.transform(0, 1, 1, 0, 0, 0); - break; - case 180: - this.ctx.transform(-1, 0, 0, 1, cw, 0); - break; - case 270: - this.ctx.transform(0, -1, -1, 0, cw, ch); - break; - } - // Scale so that canvas units are the same as PDF user space units - this.ctx.scale(cw / mediaBox.width, ch / mediaBox.height); - // Move the media left-top corner to the (0,0) canvas position - this.ctx.translate(-mediaBox.x, -mediaBox.y); + this.ctx.transform.apply(this.ctx, transform); if (this.textLayer) this.textLayer.beginLayout(); diff --git a/src/core.js b/src/core.js index 15cd147e2..f71880852 100644 --- a/src/core.js +++ b/src/core.js @@ -100,18 +100,10 @@ var Page = (function PageClosure() { return shadow(this, 'mediaBox', obj); }, get view() { - var cropBox = this.inheritPageProp('CropBox'); - var view = { - x: 0, - y: 0, - width: this.width, - height: this.height - }; - if (!isArray(cropBox) || cropBox.length !== 4) - return shadow(this, 'view', view); - var mediaBox = this.mediaBox; - var offsetX = mediaBox[0], offsetY = mediaBox[1]; + var cropBox = this.inheritPageProp('CropBox'); + if (!isArray(cropBox) || cropBox.length !== 4) + return shadow(this, 'view', mediaBox); // From the spec, 6th ed., p.963: // "The crop, bleed, trim, and art boxes should not ordinarily @@ -119,42 +111,13 @@ var Page = (function PageClosure() { // effectively reduced to their intersection with the media box." cropBox = Util.intersect(cropBox, mediaBox); if (!cropBox) - return shadow(this, 'view', view); + return shadow(this, 'view', mediaBox); - var tl = this.rotatePoint(cropBox[0] - offsetX, cropBox[1] - offsetY); - var br = this.rotatePoint(cropBox[2] - offsetX, cropBox[3] - offsetY); - view.x = Math.min(tl.x, br.x); - view.y = Math.min(tl.y, br.y); - view.width = Math.abs(tl.x - br.x); - view.height = Math.abs(tl.y - br.y); - - return shadow(this, 'view', view); + return shadow(this, 'view', cropBox); }, get annotations() { return shadow(this, 'annotations', this.inheritPageProp('Annots')); }, - get width() { - var mediaBox = this.mediaBox; - var rotate = this.rotate; - var width; - if (rotate == 0 || rotate == 180) { - width = (mediaBox[2] - mediaBox[0]); - } else { - width = (mediaBox[3] - mediaBox[1]); - } - return shadow(this, 'width', width); - }, - get height() { - var mediaBox = this.mediaBox; - var rotate = this.rotate; - var height; - if (rotate == 0 || rotate == 180) { - height = (mediaBox[3] - mediaBox[1]); - } else { - height = (mediaBox[2] - mediaBox[0]); - } - return shadow(this, 'height', height); - }, get rotate() { var rotate = this.inheritPageProp('Rotate') || 0; // Normalize rotation so it's a multiple of 90 and between 0 and 270 @@ -238,7 +201,7 @@ var Page = (function PageClosure() { ); }, - display: function Page_display(gfx, callback) { + display: function Page_display(gfx, viewport, callback) { var stats = this.stats; stats.time('Rendering'); var xref = this.xref; @@ -248,10 +211,7 @@ var Page = (function PageClosure() { gfx.xref = xref; gfx.res = resources; - gfx.beginDrawing({ x: mediaBox[0], y: mediaBox[1], - width: this.width, - height: this.height, - rotate: this.rotate }); + gfx.beginDrawing(viewport); var startIdx = 0; var length = this.operatorList.fnArray.length; @@ -276,21 +236,6 @@ var Page = (function PageClosure() { } next(); }, - rotatePoint: function Page_rotatePoint(x, y, reverse) { - var rotate = reverse ? (360 - this.rotate) : this.rotate; - switch (rotate) { - case 180: - return {x: this.width - x, y: y}; - case 90: - return {x: this.width - y, y: this.height - x}; - case 270: - return {x: y, y: x}; - case 360: - case 0: - default: - return {x: x, y: this.height - y}; - } - }, getLinks: function Page_getLinks() { var links = []; var annotations = pageGetAnnotations(); @@ -342,15 +287,10 @@ var Page = (function PageClosure() { if (!isName(subtype)) continue; var rect = annotation.get('Rect'); - var topLeftCorner = this.rotatePoint(rect[0], rect[1]); - var bottomRightCorner = this.rotatePoint(rect[2], rect[3]); var item = {}; item.type = subtype.name; - item.x = Math.min(topLeftCorner.x, bottomRightCorner.x); - item.y = Math.min(topLeftCorner.y, bottomRightCorner.y); - item.width = Math.abs(topLeftCorner.x - bottomRightCorner.x); - item.height = Math.abs(topLeftCorner.y - bottomRightCorner.y); + item.rect = rect; switch (subtype.name) { case 'Link': var a = annotation.get('A'); @@ -434,7 +374,8 @@ var Page = (function PageClosure() { } return items; }, - startRendering: function Page_startRendering(ctx, callback, textLayer) { + startRendering: function Page_startRendering(ctx, viewport, + callback, textLayer) { var stats = this.stats; stats.time('Overall'); // If there is no displayReadyPromise yet, then the operatorList was never @@ -449,7 +390,7 @@ var Page = (function PageClosure() { function pageDisplayReadyPromise() { var gfx = new CanvasGraphics(ctx, this.objs, textLayer); try { - this.display(gfx, callback); + this.display(gfx, viewport, callback); } catch (e) { if (callback) callback(e); diff --git a/src/util.js b/src/util.js index 30fc799f9..9989d9c74 100644 --- a/src/util.js +++ b/src/util.js @@ -97,6 +97,19 @@ var Util = (function UtilClosure() { return [xt, yt]; }; + Util.applyInverseTransform = function Util_applyTransform(p, m) { + var d = m[0] * m[3] - m[1] * m[2]; + var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d; + var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d; + return [xt, yt]; + }; + + Util.inverseTransform = function Util_inverseTransform(m) { + var d = m[0] * m[3] - m[1] * m[2]; + return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, + (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d]; + }; + // Apply a generic 3d matrix M on a 3-vector v: // | a b c | | X | // | d e f | x | Y | @@ -165,7 +178,7 @@ var Util = (function UtilClosure() { } return result; - } + }; Util.sign = function Util_sign(num) { return num < 0 ? -1 : 1; @@ -174,6 +187,79 @@ var Util = (function UtilClosure() { return Util; })(); +var PageViewport = PDFJS.PageViewport = (function PageViewportClosure() { + function PageViewport(viewBox, scale, rotate, offsetX, offsetY) { + // creating transform to convert pdf coordinate system to the normal + // canvas like coordinates taking in account scale and rotation + var centerX = (viewBox[2] + viewBox[0]) / 2; + var centerY = (viewBox[3] + viewBox[1]) / 2; + var rotateA, rotateB, rotateC, rotateD; + switch (rotate) { + case -180: + case 180: + rotateA = -1; rotateB = 0; rotateC = 0; rotateD = 1; + break; + case -270: + case 90: + rotateA = 0; rotateB = 1; rotateC = 1; rotateD = 0; + break; + case -90: + case 270: + rotateA = 0; rotateB = -1; rotateC = -1; rotateD = 0; + break; + case 360: + case 0: + default: + rotateA = 1; rotateB = 0; rotateC = 0; rotateD = -1; + break; + } + var offsetCanvasX, offsetCanvasY; + var width, height; + if (rotateA == 0) { + offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX; + offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY; + width = Math.abs(viewBox[3] - viewBox[1]) * scale; + height = Math.abs(viewBox[2] - viewBox[0]) * scale; + } else { + offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX; + offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY; + width = Math.abs(viewBox[2] - viewBox[0]) * scale; + height = Math.abs(viewBox[3] - viewBox[1]) * scale; + } + // creating transform for the following operations: + // translate(-centerX, -centerY), rotate and flip vertically, + // scale, and translate(offsetCanvasX, offsetCanvasY) + this.transform = [ + rotateA * scale, + rotateB * scale, + rotateC * scale, + rotateD * scale, + offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, + offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY + ]; + + this.offsetX = offsetX; + this.offsetY = offsetY; + this.width = width; + this.height = height; + } + PageViewport.prototype = { + convertPointToViewport: function PageViewport_convertPointToViewport(x, y) { + return Util.applyTransform([x, y], this.transform); + }, + convertRectangleToViewport: + function PageViewport_convertRectangeToViewport(rect) { + var tl = Util.applyTransform([rect[0], rect[1]], this.transform); + var br = Util.applyTransform([rect[2], rect[3]], this.transform); + return [tl[0], tl[1], br[0], br[1]]; + }, + convertViewportToPoint: function PageViewport_convertViewportToPoint(x, y) { + return Util.applyInverseTransform([x, y], this.transform); + } + }; + return PageViewport; +})(); + var PDFStringTranslateTable = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0, diff --git a/web/viewer.js b/web/viewer.js index 3ca4f805f..9fe9a1714 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -358,6 +358,8 @@ var PDFView = { var destRef = dest[0]; var pageNumber = destRef instanceof Object ? this.pagesRefMap[destRef.num + ' ' + destRef.gen + ' R'] : (destRef + 1); + if (pageNumber > this.pages.length) + pageNumber = this.pages.length; if (pageNumber) { this.page = pageNumber; var currentPage = this.pages[pageNumber - 1]; @@ -514,10 +516,9 @@ var PDFView = { pagesPromise.then(function(promisedPages) { for (var i = 1; i <= pagesCount; i++) { var page = promisedPages[i - 1]; - var pageView = new PageView(container, page, i, page.width, page.height, + var pageView = new PageView(container, page, i, scale, page.stats, self.navigateTo.bind(self)); - var thumbnailView = new ThumbnailView(sidebar, page, i, - page.width / page.height); + var thumbnailView = new ThumbnailView(sidebar, page, i); bindOnAfterDraw(pageView, thumbnailView); pages.push(pageView); @@ -664,7 +665,7 @@ var PDFView = { var windowTop = window.pageYOffset; for (var i = 1; i <= pages.length; ++i) { var page = pages[i - 1]; - var pageHeight = page.height * page.scale + kBottomMargin; + var pageHeight = page.height + kBottomMargin; if (currentHeight + pageHeight > windowTop) break; @@ -723,16 +724,13 @@ var PDFView = { } }; -var PageView = function pageView(container, pdfPage, id, pageWidth, pageHeight, +var PageView = function pageView(container, pdfPage, id, scale, stats, navigateTo) { this.id = id; this.pdfPage = pdfPage; - var view = pdfPage.view; - this.x = view.x; - this.y = view.y; - this.width = view.width; - this.height = view.height; + this.scale = scale || 1.0; + this.viewport = this.pdfPage.getViewport(scale); var anchor = document.createElement('a'); anchor.name = '' + this.id; @@ -746,8 +744,13 @@ var PageView = function pageView(container, pdfPage, id, pageWidth, pageHeight, this.update = function pageViewUpdate(scale) { this.scale = scale || this.scale; - div.style.width = (this.width * this.scale) + 'px'; - div.style.height = (this.height * this.scale) + 'px'; + var viewport = this.pdfPage.getViewport(this.scale); + + this.viewport = viewport; + this.width = viewport.width; + this.height = viewport.height; + div.style.width = viewport.width + 'px'; + div.style.height = viewport.height + 'px'; while (div.hasChildNodes()) div.removeChild(div.lastChild); @@ -760,7 +763,7 @@ var PageView = function pageView(container, pdfPage, id, pageWidth, pageHeight, div.appendChild(this.loadingIconDiv); }; - function setupAnnotations(pdfPage, scale) { + function setupAnnotations(pdfPage, viewport) { function bindLink(link, dest) { link.href = PDFView.getDestinationHash(dest); link.onclick = function pageViewSetupLinksOnclick() { @@ -770,11 +773,13 @@ var PageView = function pageView(container, pdfPage, id, pageWidth, pageHeight, }; } function createElementWithStyle(tagName, item) { + var rect = viewport.convertRectangleToViewport(item.rect); + rect = Util.normalizeRect(rect); var element = document.createElement(tagName); - element.style.left = (Math.floor(item.x - view.x) * scale) + 'px'; - element.style.top = (Math.floor(item.y - view.y) * scale) + 'px'; - element.style.width = Math.ceil(item.width * scale) + 'px'; - element.style.height = Math.ceil(item.height * scale) + 'px'; + element.style.left = Math.floor(rect[0]) + 'px'; + element.style.top = Math.floor(rect[1]) + 'px'; + element.style.width = Math.ceil(rect[2] - rect[0]) + 'px'; + element.style.height = Math.ceil(rect[3] - rect[1]) + 'px'; return element; } function createCommentAnnotation(type, item) { @@ -844,7 +849,7 @@ var PageView = function pageView(container, pdfPage, id, pageWidth, pageHeight, this.getPagePoint = function pageViewGetPagePoint(x, y) { var scale = PDFView.currentScale; - return this.pdfPage.rotatePoint(x / scale, y / scale); + return this.viewport.convertPointToViewport(x, y); }; this.scrollIntoView = function pageViewScrollIntoView(dest) { @@ -892,8 +897,8 @@ var PageView = function pageView(container, pdfPage, id, pageWidth, pageHeight, } var boundingRect = [ - this.pdfPage.rotatePoint(x, y), - this.pdfPage.rotatePoint(x + width, y + height) + this.viewport.convertPointToViewport(x, y), + this.viewport.convertPointToViewport(x + width, y + height) ]; if (scale && scale !== PDFView.currentScale) @@ -904,18 +909,18 @@ var PageView = function pageView(container, pdfPage, id, pageWidth, pageHeight, setTimeout(function pageViewScrollIntoViewRelayout() { // letting page to re-layout before scrolling var scale = PDFView.currentScale; - var x = Math.min(boundingRect[0].x, boundingRect[1].x); - var y = Math.min(boundingRect[0].y, boundingRect[1].y); - var width = Math.abs(boundingRect[0].x - boundingRect[1].x); - var height = Math.abs(boundingRect[0].y - boundingRect[1].y); + var x = Math.min(boundingRect[0][0], boundingRect[1][0]); + var y = Math.min(boundingRect[0][1], boundingRect[1][1]); + var width = Math.abs(boundingRect[0][0] - boundingRect[1][0]); + var height = Math.abs(boundingRect[0][1] - boundingRect[1][1]); // using temporary div to scroll it into view var tempDiv = document.createElement('div'); tempDiv.style.position = 'absolute'; - tempDiv.style.left = Math.floor(x * scale) + 'px'; - tempDiv.style.top = Math.floor(y * scale) + 'px'; - tempDiv.style.width = Math.ceil(width * scale) + 'px'; - tempDiv.style.height = Math.ceil(height * scale) + 'px'; + tempDiv.style.left = Math.floor(x) + 'px'; + tempDiv.style.top = Math.floor(y) + 'px'; + tempDiv.style.width = Math.ceil(width) + 'px'; + tempDiv.style.height = Math.ceil(height) + 'px'; div.appendChild(tempDiv); tempDiv.scrollIntoView(true); div.removeChild(tempDiv); @@ -947,16 +952,15 @@ var PageView = function pageView(container, pdfPage, id, pageWidth, pageHeight, } var textLayer = textLayerDiv ? new TextLayerBuilder(textLayerDiv) : null; - var scale = this.scale; - canvas.width = pageWidth * scale; - canvas.height = pageHeight * scale; + var scale = this.scale, viewport = this.viewport; + canvas.width = viewport.width; + canvas.height = viewport.height; var ctx = canvas.getContext('2d'); ctx.save(); ctx.fillStyle = 'rgb(255, 255, 255)'; ctx.fillRect(0, 0, canvas.width, canvas.height); ctx.restore(); - ctx.translate(-this.x * scale, -this.y * scale); // Rendering area @@ -981,6 +985,7 @@ var PageView = function pageView(container, pdfPage, id, pageWidth, pageHeight, var renderContext = { canvasContext: ctx, + viewport: this.viewport, textLayer: textLayer }; this.pdfPage.render(renderContext).then( @@ -992,7 +997,7 @@ var PageView = function pageView(container, pdfPage, id, pageWidth, pageHeight, } ); - setupAnnotations(this.pdfPage, this.scale); + setupAnnotations(this.pdfPage, this.viewport); div.setAttribute('data-loaded', true); }; @@ -1004,7 +1009,7 @@ var PageView = function pageView(container, pdfPage, id, pageWidth, pageHeight, }; }; -var ThumbnailView = function thumbnailView(container, page, id, pageRatio) { +var ThumbnailView = function thumbnailView(container, pdfPage, id) { var anchor = document.createElement('a'); anchor.href = PDFView.getAnchorUrl('#page=' + id); anchor.onclick = function stopNivigation() { @@ -1012,9 +1017,10 @@ var ThumbnailView = function thumbnailView(container, page, id, pageRatio) { return false; }; - var view = page.view; - this.width = view.width; - this.height = view.height; + var viewport = pdfPage.getViewport(1); + var pageWidth = viewport.width; + var pageHeight = viewport.height; + var pageRatio = pageWidth / pageHeight; this.id = id; var maxThumbSize = 134; @@ -1022,8 +1028,8 @@ var ThumbnailView = function thumbnailView(container, page, id, pageRatio) { maxThumbSize * pageRatio; var canvasHeight = pageRatio <= 1 ? maxThumbSize : maxThumbSize / pageRatio; - var scaleX = this.scaleX = (canvasWidth / this.width); - var scaleY = this.scaleY = (canvasHeight / this.height); + var scaleX = this.scaleX = (canvasWidth / pageWidth); + var scaleY = this.scaleY = (canvasHeight / pageHeight); var div = document.createElement('div'); div.id = 'thumbnailContainer' + id; @@ -1048,15 +1054,8 @@ var ThumbnailView = function thumbnailView(container, page, id, pageRatio) { var ctx = canvas.getContext('2d'); ctx.save(); ctx.fillStyle = 'rgb(255, 255, 255)'; - ctx.fillRect(0, 0, canvas.width, canvas.height); + ctx.fillRect(0, 0, canvasWidth, canvasHeight); ctx.restore(); - - var view = page.view; - ctx.translate(-view.x * scaleX, -view.y * scaleY); - div.style.width = (view.width * scaleX) + 'px'; - div.style.height = (view.height * scaleY) + 'px'; - div.style.lineHeight = (view.height * scaleY) + 'px'; - return ctx; } @@ -1071,9 +1070,11 @@ var ThumbnailView = function thumbnailView(container, page, id, pageRatio) { } var ctx = getPageDrawContext(); - page.startRendering(ctx, function thumbnailViewDrawStartRendering() { - callback(); - }); + var drawViewport = pdfPage.getViewport(scaleX); + page.startRendering(ctx, drawViewport, + function thumbnailViewDrawStartRendering() { + callback(); + }); this.hasImage = true; }; @@ -1359,7 +1360,7 @@ function updateViewarea() { var currentPage = PDFView.pages[pageNumber - 1]; var topLeft = currentPage.getPagePoint(window.pageXOffset, window.pageYOffset - firstPage.y - kViewerTopMargin); - pdfOpenParams += ',' + Math.round(topLeft.x) + ',' + Math.round(topLeft.y); + pdfOpenParams += ',' + Math.round(topLeft[0]) + ',' + Math.round(topLeft[1]); var store = PDFView.store; store.set('exists', true); From 2f4423cffb8efc2fdddc3bcbfd250627e49dcd34 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Wed, 11 Apr 2012 09:42:41 -0700 Subject: [PATCH 07/52] Fixing zoom and rotate issues --- src/api.js | 2 +- web/viewer.js | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/api.js b/src/api.js index 3d97f53c9..cccd4b152 100644 --- a/src/api.js +++ b/src/api.js @@ -19,7 +19,7 @@ return this.page.view; }, getViewport: function(scale, rotate) { - if (arguments < 2) + if (arguments.length < 2) rotate = this.rotate; return new PDFJS.PageViewport(this.view, scale, rotate, 0, 0); }, diff --git a/web/viewer.js b/web/viewer.js index 9fe9a1714..3c7279fb4 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -747,8 +747,6 @@ var PageView = function pageView(container, pdfPage, id, scale, var viewport = this.pdfPage.getViewport(this.scale); this.viewport = viewport; - this.width = viewport.width; - this.height = viewport.height; div.style.width = viewport.width + 'px'; div.style.height = viewport.height + 'px'; @@ -763,6 +761,20 @@ var PageView = function pageView(container, pdfPage, id, scale, div.appendChild(this.loadingIconDiv); }; + Object.defineProperty(this, 'width', { + get: function PageView_getWidth() { + return this.viewport.width; + }, + enumerable: true + }); + + Object.defineProperty(this, 'height', { + get: function PageView_getHeight() { + return this.viewport.height; + }, + enumerable: true + }); + function setupAnnotations(pdfPage, viewport) { function bindLink(link, dest) { link.href = PDFView.getDestinationHash(dest); From d61c4f07f8c3d3869f3932fe1dd42c1993e1a087 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Wed, 11 Apr 2012 10:18:29 -0700 Subject: [PATCH 08/52] Initial view bug and rename viewport function --- src/util.js | 8 ++++---- web/viewer.js | 14 +++++++------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/util.js b/src/util.js index 9989d9c74..390b08427 100644 --- a/src/util.js +++ b/src/util.js @@ -244,16 +244,16 @@ var PageViewport = PDFJS.PageViewport = (function PageViewportClosure() { this.height = height; } PageViewport.prototype = { - convertPointToViewport: function PageViewport_convertPointToViewport(x, y) { + convertToViewportPoint: function PageViewport_convertToViewportPoint(x, y) { return Util.applyTransform([x, y], this.transform); }, - convertRectangleToViewport: - function PageViewport_convertRectangeToViewport(rect) { + convertToViewportRectangle: + function PageViewport_convertToViewportRectangle(rect) { var tl = Util.applyTransform([rect[0], rect[1]], this.transform); var br = Util.applyTransform([rect[2], rect[3]], this.transform); return [tl[0], tl[1], br[0], br[1]]; }, - convertViewportToPoint: function PageViewport_convertViewportToPoint(x, y) { + convertToPdfPoint: function PageViewport_convertToPdfPoint(x, y) { return Util.applyInverseTransform([x, y], this.transform); } }; diff --git a/web/viewer.js b/web/viewer.js index 3c7279fb4..51d4df711 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -730,7 +730,7 @@ var PageView = function pageView(container, pdfPage, id, scale, this.pdfPage = pdfPage; this.scale = scale || 1.0; - this.viewport = this.pdfPage.getViewport(scale); + this.viewport = this.pdfPage.getViewport(this.scale); var anchor = document.createElement('a'); anchor.name = '' + this.id; @@ -785,7 +785,7 @@ var PageView = function pageView(container, pdfPage, id, scale, }; } function createElementWithStyle(tagName, item) { - var rect = viewport.convertRectangleToViewport(item.rect); + var rect = viewport.convertToViewportRectangle(item.rect); rect = Util.normalizeRect(rect); var element = document.createElement(tagName); element.style.left = Math.floor(rect[0]) + 'px'; @@ -861,7 +861,7 @@ var PageView = function pageView(container, pdfPage, id, scale, this.getPagePoint = function pageViewGetPagePoint(x, y) { var scale = PDFView.currentScale; - return this.viewport.convertPointToViewport(x, y); + return this.viewport.convertToPdfPoint(x, y); }; this.scrollIntoView = function pageViewScrollIntoView(dest) { @@ -909,8 +909,8 @@ var PageView = function pageView(container, pdfPage, id, scale, } var boundingRect = [ - this.viewport.convertPointToViewport(x, y), - this.viewport.convertPointToViewport(x + width, y + height) + this.viewport.convertToViewportPoint(x, y), + this.viewport.convertToViewportPoint(x + width, y + height) ]; if (scale && scale !== PDFView.currentScale) @@ -1378,8 +1378,8 @@ function updateViewarea() { store.set('exists', true); store.set('page', pageNumber); store.set('zoom', normalizedScaleValue); - store.set('scrollLeft', Math.round(topLeft.x)); - store.set('scrollTop', Math.round(topLeft.y)); + store.set('scrollLeft', Math.round(topLeft[0])); + store.set('scrollTop', Math.round(topLeft[1])); var href = PDFView.getAnchorUrl(pdfOpenParams); document.getElementById('viewBookmark').href = href; } From 73cab9c30220711e7204a62c92f49f76ae4242de Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Wed, 11 Apr 2012 15:52:15 -0700 Subject: [PATCH 09/52] Initial API refectoring --- src/api.js | 409 +++++++++++++++++++++++++++++++++++++++++++++----- src/core.js | 344 +----------------------------------------- src/worker.js | 21 +++ 3 files changed, 391 insertions(+), 383 deletions(-) diff --git a/src/api.js b/src/api.js index cccd4b152..c8f908e7b 100644 --- a/src/api.js +++ b/src/api.js @@ -1,22 +1,250 @@ /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ +/* + PDFDoc.prototype = { + destroy: function PDFDoc_destroy() { + if (this.worker) + this.worker.terminate(); + + if (this.fontWorker) + this.fontWorker.terminate(); + + for (var n in this.pageCache) + delete this.pageCache[n]; + + delete this.data; + delete this.stream; + delete this.pdf; + delete this.catalog; + } + }; +*/ + (function pdfApiWrapper() { - function PdfPageWrapper(page) { - this.page = page; + function WorkerTransport(promise) { + this.workerReadyPromise = promise; + this.objs = new PDFObjects(); + + this.pageCache = []; + this.pagePromises = []; + this.fontsLoading = {}; + + // If worker support isn't disabled explicit and the browser has worker + // support, create a new web worker and test if it/the browser fullfills + // all requirements to run parts of pdf.js in a web worker. + // Right now, the requirement is, that an Uint8Array is still an Uint8Array + // as it arrives on the worker. Chrome added this with version 15. + if (!globalScope.PDFJS.disableWorker && typeof Worker !== 'undefined') { + var workerSrc = PDFJS.workerSrc; + if (typeof workerSrc === 'undefined') { + error('No PDFJS.workerSrc specified'); + } + + try { + var worker; + if (PDFJS.isFirefoxExtension) { + // The firefox extension can't load the worker from the resource:// + // url so we have to inline the script and then use the blob loader. + var bb = new MozBlobBuilder(); + bb.append(document.querySelector('#PDFJS_SCRIPT_TAG').textContent); + var blobUrl = window.URL.createObjectURL(bb.getBlob()); + worker = new Worker(blobUrl); + } else { + // Some versions of FF can't create a worker on localhost, see: + // https://bugzilla.mozilla.org/show_bug.cgi?id=683280 + worker = new Worker(workerSrc); + } + + var messageHandler = new MessageHandler('main', worker); + + messageHandler.on('test', function pdfDocTest(supportTypedArray) { + if (supportTypedArray) { + this.worker = worker; + this.setupMessageHandler(messageHandler); + } else { + globalScope.PDFJS.disableWorker = true; + this.setupFakeWorker(); + } + }.bind(this)); + + var testObj = new Uint8Array(1); + // Some versions of Opera throw a DATA_CLONE_ERR on + // serializing the typed array. + messageHandler.send('test', testObj); + return; + } catch (e) { + warn('The worker has been disabled.'); + } + } + // Either workers are disabled, not supported or have thrown an exception. + // Thus, we fallback to a faked worker. + globalScope.PDFJS.disableWorker = true; + this.setupFakeWorker(); + } + WorkerTransport.prototype = { + setupFakeWorker: function WorkerTransport_setupFakeWorker() { + // If we don't use a worker, just post/sendMessage to the main thread. + var fakeWorker = { + postMessage: function WorkerTransport_postMessage(obj) { + fakeWorker.onmessage({data: obj}); + }, + terminate: function WorkerTransport_terminate() {} + }; + + var messageHandler = new MessageHandler('main', fakeWorker); + this.setupMessageHandler(messageHandler); + + // If the main thread is our worker, setup the handling for the messages + // the main thread sends to it self. + WorkerMessageHandler.setup(messageHandler); + }, + + setupMessageHandler: function WorkerTransport_setupMessageHandler(messageHandler) { + this.messageHandler = messageHandler; + + messageHandler.on('doc', function pdfDocPage(data) { + var pdfInfo = data.pdfInfo; + var pdfDocument = new PdfDocumentWrapper(pdfInfo, this); + this.pdfDocument = pdfDocument; + this.workerReadyPromise.resolve(pdfDocument) + }, this); + + messageHandler.on('getpage', function pdfDocPage(data) { + var pageInfo = data.pageInfo; + var page = new PdfPageWrapper(pageInfo, transport); + this.pageCache[pageInfo.pageNumber] = pageInfo; + var promises = this.pagePromises[pageInfo.pageNumber]; + delete this.pagePromises[pageInfo.pageNumber]; + for (var i = 0, ii = promises.length; i < ii; ++i) + promises.resolve(page); + }, this); + + messageHandler.on('page', function pdfDocPage(data) { + var pageNum = data.pageNum; + var page = this.pageCache[pageNum]; + var depFonts = data.depFonts; + + page.stats.timeEnd('Page Request'); + page.startRenderingFromOperatorList(data.operatorList, depFonts); + }, this); + + messageHandler.on('obj', function pdfDocObj(data) { + var id = data[0]; + var type = data[1]; + + switch (type) { + case 'JpegStream': + var imageData = data[2]; + loadJpegStream(id, imageData, this.objs); + break; + case 'Image': + var imageData = data[2]; + this.objs.resolve(id, imageData); + break; + case 'Font': + var name = data[2]; + var file = data[3]; + var properties = data[4]; + + if (file) { + // Rewrap the ArrayBuffer in a stream. + var fontFileDict = new Dict(); + file = new Stream(file, 0, file.length, fontFileDict); + } + + // At this point, only the font object is created but the font is + // not yet attached to the DOM. This is done in `FontLoader.bind`. + var font = new Font(name, file, properties); + this.objs.resolve(id, font); + break; + default: + error('Got unkown object type ' + type); + } + }, this); + + messageHandler.on('page_error', function pdfDocError(data) { + var page = this.pageCache[data.pageNum]; + if (page.displayReadyPromise) + page.displayReadyPromise.reject(data.error); + else + error(data.error); + }, this); + + messageHandler.on('jpeg_decode', function(data, promise) { + var imageData = data[0]; + var components = data[1]; + if (components != 3 && components != 1) + error('Only 3 component or 1 component can be returned'); + + var img = new Image(); + img.onload = (function messageHandler_onloadClosure() { + var width = img.width; + var height = img.height; + var size = width * height; + var rgbaLength = size * 4; + var buf = new Uint8Array(size * components); + var tmpCanvas = createScratchCanvas(width, height); + var tmpCtx = tmpCanvas.getContext('2d'); + tmpCtx.drawImage(img, 0, 0); + var data = tmpCtx.getImageData(0, 0, width, height).data; + + if (components == 3) { + for (var 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 (var i = 0, j = 0; i < rgbaLength; i += 4, j++) { + buf[j] = data[i]; + } + } + promise.resolve({ data: buf, width: width, height: height}); + }).bind(this); + var src = 'data:image/jpeg;base64,' + window.btoa(imageData); + img.src = src; + }); + }, + + sendData: function WorkerTransport_sendData(data) { + this.messageHandler.send('doc', data); + }, + + getPage: function WorkerTransport_getPage(n, promise) { + if (this.pageCache[n]) { + promise.resolve(pageCache[n]); + return; + } + if (n in this.pagePromises) { + this.pagePromises[n].push(promise); + return; + } + this.pagePromises[n] = [promise]; + this.messageHandler.send('getpage', {page: n}); + } + }; + function PdfPageWrapper(page, transport) { + this.pageInfo = pageInfo; + this.transport = transport; + this.stats = new StatTimer(); + this.objs = transport.objs; } PdfPageWrapper.prototype = { + get pageNumber() { + return this.pageInfo.pageNumber; + }, get rotate() { - return this.page.rotate; + return this.pageInfo.rotate; }, get stats() { - return this.page.stats; + return this.stats; }, get ref() { - return this.page.ref; + return this.pageInfo.ref; }, get view() { - return this.page.view; + return this.pageInfo.view; }, getViewport: function(scale, rotate) { if (arguments.length < 2) @@ -25,23 +253,133 @@ }, getAnnotations: function() { var promise = new PDFJS.Promise(); - var annotations = this.page.getAnnotations(); + var annotations = this.pageInfo.annotations; promise.resolve(annotations); return promise; }, render: function(renderContext) { - var promise = new PDFJS.Promise(); - this.page.startRendering(renderContext.canvasContext, - renderContext.viewport, - function complete(error) { + var promise; + var stats = this.stats; + stats.time('Overall'); + // If there is no displayReadyPromise yet, then the operatorList was never + // requested before. Make the request and create the promise. + if (!this.displayReadyPromise) { + this.displayReadyPromise = promise = new Promise(); + + this.stats.time('Page Request'); + this.messageHandler.send('page_request', this.pageNumber + 1); + } else + promise = this.displayReadyPromise; + + var callback = (function complete(error) { if (error) promise.reject(error); else promise.resolve(); - }, - renderContext.textLayer); + }); + + // Once the operatorList and fonts are loaded, do the actual rendering. + this.displayReadyPromise.then( + function pageDisplayReadyPromise() { + var gfx = new CanvasGraphics(renderContext.canvasContext, + this.objs, renderContext.textLayer); + try { + this.display(gfx, renderContext.viewport, callback); + } catch (e) { + if (callback) + callback(e); + else + error(e); + } + }.bind(this), + function pageDisplayReadPromiseError(reason) { + if (callback) + callback(reason); + else + error(reason); + } + ); + return promise; }, + + startRenderingFromOperatorList: + function Page_startRenderingFromOperatorList(operatorList, fonts) { + var self = this; + this.operatorList = operatorList; + + var displayContinuation = function pageDisplayContinuation() { + // Always defer call to display() to work around bug in + // Firefox error reporting from XHR callbacks. + setTimeout(function pageSetTimeout() { + self.displayReadyPromise.resolve(); + }); + }; + + this.ensureFonts(fonts, + function pageStartRenderingFromOperatorListEnsureFonts() { + displayContinuation(); + } + ); + }, + + ensureFonts: function Page_ensureFonts(fonts, callback) { + this.stats.time('Font Loading'); + // Convert the font names to the corresponding font obj. + for (var i = 0, ii = fonts.length; i < ii; i++) { + fonts[i] = this.objs.objs[fonts[i]].data; + } + + // Load all the fonts + FontLoader.bind( + fonts, + function pageEnsureFontsFontObjs(fontObjs) { + this.stats.timeEnd('Font Loading'); + + callback.call(this); + }.bind(this) + ); + }, + + display: function Page_display(gfx, viewport, callback) { + var stats = this.stats; + stats.time('Rendering'); + +/* REMOVE ??? */ + var xref = this.xref; + var resources = this.resources; + assertWellFormed(isDict(resources), 'invalid page resources'); + + gfx.xref = xref; + gfx.res = resources; +/* REMOVE END */ + + gfx.beginDrawing(viewport); + + var startIdx = 0; + var length = this.operatorList.fnArray.length; + var operatorList = this.operatorList; + var stepper = null; + if (PDFJS.pdfBug && StepperManager.enabled) { + stepper = StepperManager.create(this.pageNumber); + stepper.init(operatorList); + stepper.nextBreakPoint = stepper.getNextBreakPoint(); + } + + var self = this; + function next() { + startIdx = + gfx.executeOperatorList(operatorList, startIdx, next, stepper); + if (startIdx == length) { + gfx.endDrawing(); + stats.timeEnd('Rendering'); + stats.timeEnd('Overall'); + if (callback) callback(); + } + } + next(); + }, + getTextContent: function() { var promise = new PDFJS.Promise(); var textContent = 'page text'; // not implemented @@ -59,45 +397,49 @@ } }; - function PdfDocumentWrapper(pdf) { - this.pdf = pdf; + function PdfDocumentWrapper(pdfInfo, transport) { + this.pdfInfo = pdfInfo; + this.transport = transport; } PdfDocumentWrapper.prototype = { get numPages() { - return this.pdf.numPages; + return this.pdfInfo.numPages; }, get fingerprint() { - return this.pdf.fingerprint; + return this.pdfInfo.fingerprint; }, getPage: function(number) { var promise = new PDFJS.Promise(); - var page = this.pdf.getPage(number); - promise.resolve(new PdfPageWrapper(page)); + this.transport.getPage(number, promise); return promise; }, getDestinations: function() { var promise = new PDFJS.Promise(); - var destinations = this.pdf.catalog.destinations; + var destinations = this.pdfInfo.destinations; promise.resolve(destinations); return promise; }, getOutline: function() { var promise = new PDFJS.Promise(); - var outline = this.pdf.catalog.documentOutline; + var outline = this.pdfInfo.documentOutline; promise.resolve(outline); return promise; }, getMetadata: function() { var promise = new PDFJS.Promise(); - var info = this.pdf.info; - var metadata = this.pdf.catalog.metadata; - promise.resolve(info, metadata ? new PDFJS.Metadata(metadata) : null); + var info = this.pdfInfo.info; + var metadata = this.pdfInfo.metadata; + promise.resolve({ + info: info, + metadata: metadata ? new PDFJS.Metadata(metadata) : null + }); return promise; } }; PDFJS.getDocument = function getDocument(source) { var promise = new PDFJS.Promise(); + var transport = new WorkerTransport(promise); if (typeof source === 'string') { // fetch url PDFJS.getPdf( @@ -116,26 +458,13 @@ } }, function getPdfLoad(data) { - var pdf = null; - try { - pdf = new PDFJS.PDFDoc(data); - } catch (e) { - promise.reject('An error occurred while reading the PDF.', e); - } - if (pdf) - promise.resolve(new PdfDocumentWrapper(pdf)); + transport.sendData(data); }); } else { // assuming the source is array, instantiating directly from it - var pdf = null; - try { - pdf = new PDFJS.PDFDoc(source); - } catch (e) { - promise.reject('An error occurred while reading the PDF.', e); - } - if (pdf) - promise.resolve(new PdfDocumentWrapper(pdf)); + transport.sendData(source); } return promise; }; })(); + diff --git a/src/core.js b/src/core.js index f71880852..1aa560a46 100644 --- a/src/core.js +++ b/src/core.js @@ -133,26 +133,6 @@ var Page = (function PageClosure() { return shadow(this, 'rotate', rotate); }, - startRenderingFromOperatorList: - function Page_startRenderingFromOperatorList(operatorList, fonts) { - var self = this; - this.operatorList = operatorList; - - var displayContinuation = function pageDisplayContinuation() { - // Always defer call to display() to work around bug in - // Firefox error reporting from XHR callbacks. - setTimeout(function pageSetTimeout() { - self.displayReadyPromise.resolve(); - }); - }; - - this.ensureFonts(fonts, - function pageStartRenderingFromOperatorListEnsureFonts() { - displayContinuation(); - } - ); - }, - getOperatorList: function Page_getOperatorList(handler, dependency) { if (this.operatorList) { // content was compiled @@ -183,59 +163,6 @@ var Page = (function PageClosure() { return this.operatorList; }, - ensureFonts: function Page_ensureFonts(fonts, callback) { - this.stats.time('Font Loading'); - // Convert the font names to the corresponding font obj. - for (var i = 0, ii = fonts.length; i < ii; i++) { - fonts[i] = this.objs.objs[fonts[i]].data; - } - - // Load all the fonts - FontLoader.bind( - fonts, - function pageEnsureFontsFontObjs(fontObjs) { - this.stats.timeEnd('Font Loading'); - - callback.call(this); - }.bind(this) - ); - }, - - display: function Page_display(gfx, viewport, callback) { - var stats = this.stats; - stats.time('Rendering'); - var xref = this.xref; - var resources = this.resources; - var mediaBox = this.mediaBox; - assertWellFormed(isDict(resources), 'invalid page resources'); - - gfx.xref = xref; - gfx.res = resources; - gfx.beginDrawing(viewport); - - var startIdx = 0; - var length = this.operatorList.fnArray.length; - var operatorList = this.operatorList; - var stepper = null; - if (PDFJS.pdfBug && StepperManager.enabled) { - stepper = StepperManager.create(this.pageNumber); - stepper.init(operatorList); - stepper.nextBreakPoint = stepper.getNextBreakPoint(); - } - - var self = this; - function next() { - startIdx = - gfx.executeOperatorList(operatorList, startIdx, next, stepper); - if (startIdx == length) { - gfx.endDrawing(); - stats.timeEnd('Rendering'); - stats.timeEnd('Overall'); - if (callback) callback(); - } - } - next(); - }, getLinks: function Page_getLinks() { var links = []; var annotations = pageGetAnnotations(); @@ -376,35 +303,7 @@ var Page = (function PageClosure() { }, startRendering: function Page_startRendering(ctx, viewport, callback, textLayer) { - var stats = this.stats; - stats.time('Overall'); - // If there is no displayReadyPromise yet, then the operatorList was never - // requested before. Make the request and create the promise. - if (!this.displayReadyPromise) { - this.pdf.startRendering(this); - this.displayReadyPromise = new Promise(); - } - - // Once the operatorList and fonts are loaded, do the actual rendering. - this.displayReadyPromise.then( - function pageDisplayReadyPromise() { - var gfx = new CanvasGraphics(ctx, this.objs, textLayer); - try { - this.display(gfx, viewport, callback); - } catch (e) { - if (callback) - callback(e); - else - error(e); - } - }.bind(this), - function pageDisplayReadPromiseError(reason) { - if (callback) - callback(reason); - else - error(reason); - } - ); +/// DELETE } }; @@ -578,244 +477,3 @@ var PDFDocModel = (function PDFDocModelClosure() { return PDFDocModel; })(); - -var PDFDoc = (function PDFDocClosure() { - function PDFDoc(arg, callback) { - var stream = null; - var data = null; - - if (isStream(arg)) { - stream = arg; - data = arg.bytes; - } else if (isArrayBuffer(arg)) { - stream = new Stream(arg); - data = arg; - } else { - error('PDFDoc: Unknown argument type'); - } - - this.data = data; - this.stream = stream; - this.pdfModel = new PDFDocModel(stream); - this.fingerprint = this.pdfModel.getFingerprint(); - this.info = this.pdfModel.getDocumentInfo(); - this.catalog = this.pdfModel.catalog; - this.objs = new PDFObjects(); - - this.pageCache = []; - this.fontsLoading = {}; - this.workerReadyPromise = new Promise('workerReady'); - - // If worker support isn't disabled explicit and the browser has worker - // support, create a new web worker and test if it/the browser fullfills - // all requirements to run parts of pdf.js in a web worker. - // Right now, the requirement is, that an Uint8Array is still an Uint8Array - // as it arrives on the worker. Chrome added this with version 15. - if (!globalScope.PDFJS.disableWorker && typeof Worker !== 'undefined') { - var workerSrc = PDFJS.workerSrc; - if (typeof workerSrc === 'undefined') { - error('No PDFJS.workerSrc specified'); - } - - try { - var worker; - if (PDFJS.isFirefoxExtension) { - // The firefox extension can't load the worker from the resource:// - // url so we have to inline the script and then use the blob loader. - var bb = new MozBlobBuilder(); - bb.append(document.querySelector('#PDFJS_SCRIPT_TAG').textContent); - var blobUrl = window.URL.createObjectURL(bb.getBlob()); - worker = new Worker(blobUrl); - } else { - // Some versions of FF can't create a worker on localhost, see: - // https://bugzilla.mozilla.org/show_bug.cgi?id=683280 - worker = new Worker(workerSrc); - } - - var messageHandler = new MessageHandler('main', worker); - - messageHandler.on('test', function pdfDocTest(supportTypedArray) { - if (supportTypedArray) { - this.worker = worker; - this.setupMessageHandler(messageHandler); - } else { - globalScope.PDFJS.disableWorker = true; - this.setupFakeWorker(); - } - }.bind(this)); - - var testObj = new Uint8Array(1); - // Some versions of Opera throw a DATA_CLONE_ERR on - // serializing the typed array. - messageHandler.send('test', testObj); - return; - } catch (e) { - warn('The worker has been disabled.'); - } - } - // Either workers are disabled, not supported or have thrown an exception. - // Thus, we fallback to a faked worker. - globalScope.PDFJS.disableWorker = true; - this.setupFakeWorker(); - } - - PDFDoc.prototype = { - setupFakeWorker: function PDFDoc_setupFakeWorker() { - // If we don't use a worker, just post/sendMessage to the main thread. - var fakeWorker = { - postMessage: function PDFDoc_postMessage(obj) { - fakeWorker.onmessage({data: obj}); - }, - terminate: function PDFDoc_terminate() {} - }; - - var messageHandler = new MessageHandler('main', fakeWorker); - this.setupMessageHandler(messageHandler); - - // If the main thread is our worker, setup the handling for the messages - // the main thread sends to it self. - WorkerMessageHandler.setup(messageHandler); - }, - - - setupMessageHandler: function PDFDoc_setupMessageHandler(messageHandler) { - this.messageHandler = messageHandler; - - messageHandler.on('page', function pdfDocPage(data) { - var pageNum = data.pageNum; - var page = this.pageCache[pageNum]; - var depFonts = data.depFonts; - - page.stats.timeEnd('Page Request'); - page.startRenderingFromOperatorList(data.operatorList, depFonts); - }, this); - - messageHandler.on('obj', function pdfDocObj(data) { - var id = data[0]; - var type = data[1]; - - switch (type) { - case 'JpegStream': - var imageData = data[2]; - loadJpegStream(id, imageData, this.objs); - break; - case 'Image': - var imageData = data[2]; - this.objs.resolve(id, imageData); - break; - case 'Font': - var name = data[2]; - var file = data[3]; - var properties = data[4]; - - if (file) { - // Rewrap the ArrayBuffer in a stream. - var fontFileDict = new Dict(); - file = new Stream(file, 0, file.length, fontFileDict); - } - - // At this point, only the font object is created but the font is - // not yet attached to the DOM. This is done in `FontLoader.bind`. - var font = new Font(name, file, properties); - this.objs.resolve(id, font); - break; - default: - error('Got unkown object type ' + type); - } - }, this); - - messageHandler.on('page_error', function pdfDocError(data) { - var page = this.pageCache[data.pageNum]; - if (page.displayReadyPromise) - page.displayReadyPromise.reject(data.error); - else - error(data.error); - }, this); - - messageHandler.on('jpeg_decode', function(data, promise) { - var imageData = data[0]; - var components = data[1]; - if (components != 3 && components != 1) - error('Only 3 component or 1 component can be returned'); - - var img = new Image(); - img.onload = (function messageHandler_onloadClosure() { - var width = img.width; - var height = img.height; - var size = width * height; - var rgbaLength = size * 4; - var buf = new Uint8Array(size * components); - var tmpCanvas = createScratchCanvas(width, height); - var tmpCtx = tmpCanvas.getContext('2d'); - tmpCtx.drawImage(img, 0, 0); - var data = tmpCtx.getImageData(0, 0, width, height).data; - - if (components == 3) { - for (var 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 (var i = 0, j = 0; i < rgbaLength; i += 4, j++) { - buf[j] = data[i]; - } - } - promise.resolve({ data: buf, width: width, height: height}); - }).bind(this); - var src = 'data:image/jpeg;base64,' + window.btoa(imageData); - img.src = src; - }); - - setTimeout(function pdfDocFontReadySetTimeout() { - messageHandler.send('doc', this.data); - this.workerReadyPromise.resolve(true); - }.bind(this)); - }, - - get numPages() { - return this.pdfModel.numPages; - }, - - startRendering: function PDFDoc_startRendering(page) { - // The worker might not be ready to receive the page request yet. - this.workerReadyPromise.then(function pdfDocStartRenderingThen() { - page.stats.time('Page Request'); - this.messageHandler.send('page_request', page.pageNumber + 1); - }.bind(this)); - }, - - getPage: function PDFDoc_getPage(n) { - if (this.pageCache[n]) - return this.pageCache[n]; - - var page = this.pdfModel.getPage(n); - // Add a reference to the objects such that Page can forward the reference - // to the CanvasGraphics and so on. - page.objs = this.objs; - page.pdf = this; - return (this.pageCache[n] = page); - }, - - destroy: function PDFDoc_destroy() { - if (this.worker) - this.worker.terminate(); - - if (this.fontWorker) - this.fontWorker.terminate(); - - for (var n in this.pageCache) - delete this.pageCache[n]; - - delete this.data; - delete this.stream; - delete this.pdf; - delete this.catalog; - } - }; - - return PDFDoc; -})(); - -globalScope.PDFJS.PDFDoc = PDFDoc; - diff --git a/src/worker.js b/src/worker.js index 42bd61050..69409ed79 100644 --- a/src/worker.js +++ b/src/worker.js @@ -89,6 +89,27 @@ var WorkerMessageHandler = { // Create only the model of the PDFDoc, which is enough for // processing the content of the pdf. pdfModel = new PDFDocModel(new Stream(data)); + var doc = { + numPages: pdfModel.numPages, + fingerprint: pdfModel.fingerprint, + destinations: pdfModel.catalog.destinations, + outline: pdfModel.catalog.documentOutline, + info: pdfModel.info, + metadata: pdfModel.catalog.metadata + }; + handler.send('doc', {pdfInfo: doc}); + }); + + handler.on('getpage', function wphSetupTest(data) { + var pdfPage = pdfModel.getPage(data.pageNumber); + var page = { + pageNumber: data.pageNumber, + rotate: pdfPage.rotate, + ref: pdfPage.ref, + view: pdfPage.view, + annotations: pdfPage.getAnnotations(), // REMOVE + }; + handler.send('getpage', {pageInfo: page}); }); handler.on('page_request', function wphSetupPageRequest(pageNum) { From fd58f041179816115ca6f8d31434d61f63ae6159 Mon Sep 17 00:00:00 2001 From: Brendan Dahl Date: Wed, 11 Apr 2012 16:47:42 -0700 Subject: [PATCH 10/52] Refactor API to be async. --- src/api.js | 47 ++++++++++++++++++++++++----------------------- src/worker.js | 6 +++--- web/viewer.js | 2 +- 3 files changed, 28 insertions(+), 27 deletions(-) diff --git a/src/api.js b/src/api.js index c8f908e7b..4a3f001b1 100644 --- a/src/api.js +++ b/src/api.js @@ -35,6 +35,7 @@ // all requirements to run parts of pdf.js in a web worker. // Right now, the requirement is, that an Uint8Array is still an Uint8Array // as it arrives on the worker. Chrome added this with version 15. + globalScope.PDFJS.disableWorker = true; if (!globalScope.PDFJS.disableWorker && typeof Worker !== 'undefined') { var workerSrc = PDFJS.workerSrc; if (typeof workerSrc === 'undefined') { @@ -57,6 +58,7 @@ } var messageHandler = new MessageHandler('main', worker); + this.messageHandler = messageHandler; messageHandler.on('test', function pdfDocTest(supportTypedArray) { if (supportTypedArray) { @@ -112,20 +114,20 @@ messageHandler.on('getpage', function pdfDocPage(data) { var pageInfo = data.pageInfo; - var page = new PdfPageWrapper(pageInfo, transport); - this.pageCache[pageInfo.pageNumber] = pageInfo; + var page = new PdfPageWrapper(pageInfo, this); + this.pageCache[pageInfo.pageNumber] = page; var promises = this.pagePromises[pageInfo.pageNumber]; delete this.pagePromises[pageInfo.pageNumber]; for (var i = 0, ii = promises.length; i < ii; ++i) - promises.resolve(page); + promises[i].resolve(page); }, this); messageHandler.on('page', function pdfDocPage(data) { var pageNum = data.pageNum; - var page = this.pageCache[pageNum]; + var page = this.pageCache[pageNum - 1]; var depFonts = data.depFonts; - page.stats.timeEnd('Page Request'); + //page.stats.timeEnd('Page Request'); page.startRenderingFromOperatorList(data.operatorList, depFonts); }, this); @@ -208,26 +210,26 @@ }, sendData: function WorkerTransport_sendData(data) { - this.messageHandler.send('doc', data); + this.messageHandler.send('doc_request', data); }, getPage: function WorkerTransport_getPage(n, promise) { - if (this.pageCache[n]) { - promise.resolve(pageCache[n]); + if (this.pageCache[n - 1]) { + promise.resolve(pageCache[n - 1]); return; } - if (n in this.pagePromises) { - this.pagePromises[n].push(promise); + if ((n - 1) in this.pagePromises) { + this.pagePromises[n - 1].push(promise); return; } - this.pagePromises[n] = [promise]; - this.messageHandler.send('getpage', {page: n}); + this.pagePromises[n - 1] = [promise]; + this.messageHandler.send('getpage_request', {pageNumber: n - 1}); } }; - function PdfPageWrapper(page, transport) { + function PdfPageWrapper(pageInfo, transport) { this.pageInfo = pageInfo; this.transport = transport; - this.stats = new StatTimer(); + this._stats = new StatTimer(); this.objs = transport.objs; } PdfPageWrapper.prototype = { @@ -238,7 +240,7 @@ return this.pageInfo.rotate; }, get stats() { - return this.stats; + return this._stats; }, get ref() { return this.pageInfo.ref; @@ -258,18 +260,17 @@ return promise; }, render: function(renderContext) { - var promise; + var promise = new Promise(); var stats = this.stats; stats.time('Overall'); // If there is no displayReadyPromise yet, then the operatorList was never // requested before. Make the request and create the promise. if (!this.displayReadyPromise) { - this.displayReadyPromise = promise = new Promise(); + this.displayReadyPromise = new Promise(); - this.stats.time('Page Request'); - this.messageHandler.send('page_request', this.pageNumber + 1); - } else - promise = this.displayReadyPromise; + //this.stats.time('Page Request'); + this.transport.messageHandler.send('page_request', this.pageNumber + 1); + } var callback = (function complete(error) { if (error) @@ -345,14 +346,14 @@ var stats = this.stats; stats.time('Rendering'); -/* REMOVE ??? */ +/* REMOVE ??? var xref = this.xref; var resources = this.resources; assertWellFormed(isDict(resources), 'invalid page resources'); gfx.xref = xref; gfx.res = resources; -/* REMOVE END */ + REMOVE END */ gfx.beginDrawing(viewport); diff --git a/src/worker.js b/src/worker.js index 69409ed79..cc9a8a590 100644 --- a/src/worker.js +++ b/src/worker.js @@ -85,7 +85,7 @@ var WorkerMessageHandler = { handler.send('test', data instanceof Uint8Array); }); - handler.on('doc', function wphSetupDoc(data) { + handler.on('doc_request', function wphSetupDoc(data) { // Create only the model of the PDFDoc, which is enough for // processing the content of the pdf. pdfModel = new PDFDocModel(new Stream(data)); @@ -100,8 +100,8 @@ var WorkerMessageHandler = { handler.send('doc', {pdfInfo: doc}); }); - handler.on('getpage', function wphSetupTest(data) { - var pdfPage = pdfModel.getPage(data.pageNumber); + handler.on('getpage_request', function wphSetupTest(data) { + var pdfPage = pdfModel.getPage(data.pageNumber + 1); var page = { pageNumber: data.pageNumber, rotate: pdfPage.rotate, diff --git a/web/viewer.js b/web/viewer.js index 51d4df711..bda342aa7 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -986,7 +986,7 @@ var PageView = function pageView(container, pdfPage, id, scale, if (error) PDFView.error('An error occurred while rendering the page.', error); - self.stats = content.stats; + self.stats = pdfPage.stats; self.updateStats(); if (self.onAfterDraw) self.onAfterDraw(); From 3b83a42a9122c1b7546535eaf215fe64d2b51f92 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Wed, 11 Apr 2012 17:09:55 -0700 Subject: [PATCH 11/52] Outline fix, destroy, and linting --- src/api.js | 65 +++++++++++++++++++-------------------------------- src/worker.js | 2 +- 2 files changed, 25 insertions(+), 42 deletions(-) diff --git a/src/api.js b/src/api.js index 4a3f001b1..82e85681c 100644 --- a/src/api.js +++ b/src/api.js @@ -1,26 +1,6 @@ /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ -/* - PDFDoc.prototype = { - destroy: function PDFDoc_destroy() { - if (this.worker) - this.worker.terminate(); - - if (this.fontWorker) - this.fontWorker.terminate(); - - for (var n in this.pageCache) - delete this.pageCache[n]; - - delete this.data; - delete this.stream; - delete this.pdf; - delete this.catalog; - } - }; -*/ - (function pdfApiWrapper() { function WorkerTransport(promise) { this.workerReadyPromise = promise; @@ -60,7 +40,7 @@ var messageHandler = new MessageHandler('main', worker); this.messageHandler = messageHandler; - messageHandler.on('test', function pdfDocTest(supportTypedArray) { + messageHandler.on('test', function transportTest(supportTypedArray) { if (supportTypedArray) { this.worker = worker; this.setupMessageHandler(messageHandler); @@ -85,6 +65,13 @@ this.setupFakeWorker(); } WorkerTransport.prototype = { + destroy: function WorkerTransport_destroy() { + if (this.worker) + this.worker.terminate(); + + for (var n in this.pageCache) + delete this.pageCache[n]; + }, setupFakeWorker: function WorkerTransport_setupFakeWorker() { // If we don't use a worker, just post/sendMessage to the main thread. var fakeWorker = { @@ -102,17 +89,18 @@ WorkerMessageHandler.setup(messageHandler); }, - setupMessageHandler: function WorkerTransport_setupMessageHandler(messageHandler) { + setupMessageHandler: + function WorkerTransport_setupMessageHandler(messageHandler) { this.messageHandler = messageHandler; - messageHandler.on('doc', function pdfDocPage(data) { + messageHandler.on('doc', function transportPage(data) { var pdfInfo = data.pdfInfo; var pdfDocument = new PdfDocumentWrapper(pdfInfo, this); this.pdfDocument = pdfDocument; - this.workerReadyPromise.resolve(pdfDocument) + this.workerReadyPromise.resolve(pdfDocument); }, this); - messageHandler.on('getpage', function pdfDocPage(data) { + messageHandler.on('getpage', function transportPage(data) { var pageInfo = data.pageInfo; var page = new PdfPageWrapper(pageInfo, this); this.pageCache[pageInfo.pageNumber] = page; @@ -122,7 +110,7 @@ promises[i].resolve(page); }, this); - messageHandler.on('page', function pdfDocPage(data) { + messageHandler.on('page', function transportPage(data) { var pageNum = data.pageNum; var page = this.pageCache[pageNum - 1]; var depFonts = data.depFonts; @@ -131,7 +119,7 @@ page.startRenderingFromOperatorList(data.operatorList, depFonts); }, this); - messageHandler.on('obj', function pdfDocObj(data) { + messageHandler.on('obj', function transportObj(data) { var id = data[0]; var type = data[1]; @@ -165,7 +153,7 @@ } }, this); - messageHandler.on('page_error', function pdfDocError(data) { + messageHandler.on('page_error', function transportError(data) { var page = this.pageCache[data.pageNum]; if (page.displayReadyPromise) page.displayReadyPromise.reject(data.error); @@ -305,7 +293,8 @@ }, startRenderingFromOperatorList: - function Page_startRenderingFromOperatorList(operatorList, fonts) { + function PdfPageWrapper_startRenderingFromOperatorList(operatorList, + fonts) { var self = this; this.operatorList = operatorList; @@ -324,7 +313,7 @@ ); }, - ensureFonts: function Page_ensureFonts(fonts, callback) { + ensureFonts: function PdfPageWrapper_ensureFonts(fonts, callback) { this.stats.time('Font Loading'); // Convert the font names to the corresponding font obj. for (var i = 0, ii = fonts.length; i < ii; i++) { @@ -342,19 +331,10 @@ ); }, - display: function Page_display(gfx, viewport, callback) { + display: function PdfPageWrapper_display(gfx, viewport, callback) { var stats = this.stats; stats.time('Rendering'); -/* REMOVE ??? - var xref = this.xref; - var resources = this.resources; - assertWellFormed(isDict(resources), 'invalid page resources'); - - gfx.xref = xref; - gfx.res = resources; - REMOVE END */ - gfx.beginDrawing(viewport); var startIdx = 0; @@ -422,7 +402,7 @@ }, getOutline: function() { var promise = new PDFJS.Promise(); - var outline = this.pdfInfo.documentOutline; + var outline = this.pdfInfo.outline; promise.resolve(outline); return promise; }, @@ -435,6 +415,9 @@ metadata: metadata ? new PDFJS.Metadata(metadata) : null }); return promise; + }, + destroy: function() { + this.transport.destroy(); } }; diff --git a/src/worker.js b/src/worker.js index cc9a8a590..fcde756b9 100644 --- a/src/worker.js +++ b/src/worker.js @@ -107,7 +107,7 @@ var WorkerMessageHandler = { rotate: pdfPage.rotate, ref: pdfPage.ref, view: pdfPage.view, - annotations: pdfPage.getAnnotations(), // REMOVE + annotations: pdfPage.getAnnotations() }; handler.send('getpage', {pageInfo: page}); }); From 5608f8e445ce16aadd4f7a9e92bb61d4554ec104 Mon Sep 17 00:00:00 2001 From: Brendan Dahl Date: Wed, 11 Apr 2012 18:05:43 -0700 Subject: [PATCH 12/52] Test refactoring for async api. --- src/api.js | 3 +- test/driver.js | 81 ++++++++++++++++++++++++-------------------- test/test_slave.html | 1 + 3 files changed, 47 insertions(+), 38 deletions(-) diff --git a/src/api.js b/src/api.js index 82e85681c..3d683af07 100644 --- a/src/api.js +++ b/src/api.js @@ -15,7 +15,6 @@ // all requirements to run parts of pdf.js in a web worker. // Right now, the requirement is, that an Uint8Array is still an Uint8Array // as it arrives on the worker. Chrome added this with version 15. - globalScope.PDFJS.disableWorker = true; if (!globalScope.PDFJS.disableWorker && typeof Worker !== 'undefined') { var workerSrc = PDFJS.workerSrc; if (typeof workerSrc === 'undefined') { @@ -203,7 +202,7 @@ getPage: function WorkerTransport_getPage(n, promise) { if (this.pageCache[n - 1]) { - promise.resolve(pageCache[n - 1]); + promise.resolve(this.pageCache[n - 1]); return; } if ((n - 1) in this.pagePromises) { diff --git a/test/driver.js b/test/driver.js index a1dc4b242..600f53c9c 100644 --- a/test/driver.js +++ b/test/driver.js @@ -100,13 +100,24 @@ function nextTask() { getPdf(task.file, function nextTaskGetPdf(data) { var failure; + function continuation() { + task.pageNum = task.firstPage || 1; + nextPage(task, failure); + } try { - task.pdfDoc = new PDFJS.PDFDoc(data); + var promise = PDFJS.getDocument(data); + promise.then(function(doc) { + task.pdfDoc = doc; + continuation(); + }, function(e) { + failure = 'load PDF doc : ' + e; + continuation(); + }); + return; } catch (e) { failure = 'load PDF doc : ' + exceptionToString(e); } - task.pageNum = task.firstPage || 1; - nextPage(task, failure); + continuation(); }); } @@ -163,45 +174,43 @@ function nextPage(task, loadError) { log(' loading page ' + task.pageNum + '/' + task.pdfDoc.numPages + '... '); var ctx = canvas.getContext('2d'); - page = task.pdfDoc.getPage(task.pageNum); + task.pdfDoc.getPage(task.pageNum).then(function(page) { + var pdfToCssUnitsCoef = 96.0 / 72.0; + // using mediaBox for the canvas size + var pageWidth = page.width; + var pageHeight = page.height; + canvas.width = pageWidth * pdfToCssUnitsCoef; + canvas.height = pageHeight * pdfToCssUnitsCoef; + clear(ctx); - var pdfToCssUnitsCoef = 96.0 / 72.0; - // using mediaBox for the canvas size - var pageWidth = page.width; - var pageHeight = page.height; - canvas.width = pageWidth * pdfToCssUnitsCoef; - canvas.height = pageHeight * pdfToCssUnitsCoef; - clear(ctx); - - // using the text layer builder that does nothing to test - // text layer creation operations - var textLayerBuilder = { - beginLayout: function nullTextLayerBuilderBeginLayout() {}, - endLayout: function nullTextLayerBuilderEndLayout() {}, - appendText: function nullTextLayerBuilderAppendText(text, fontName, - fontSize) {} - }; - - page.startRendering( - ctx, - function nextPageStartRendering(error) { - var failureMessage = false; - if (error) - failureMessage = 'render : ' + error.message; - snapshotCurrentPage(task, failureMessage); + // using the text layer builder that does nothing to test + // text layer creation operations + var textLayerBuilder = { + beginLayout: function nullTextLayerBuilderBeginLayout() {}, + endLayout: function nullTextLayerBuilderEndLayout() {}, + appendText: function nullTextLayerBuilderAppendText(text, fontName, + fontSize) {} + }; + var renderContext = { + canvasContext: ctx, + textLayer: textLayerBuilder, + viewport: page.getViewport(1) + }; + page.render(renderContext).then(function() { + snapshotCurrentPage(task, false); }, - textLayerBuilder - ); + function(error) { + snapshotCurrentPage(task, 'render : ' + error); + }); + }, + function(error) { + snapshotCurrentPage(task, 'render : ' + error); + }); } catch (e) { failure = 'page setup : ' + exceptionToString(e); + snapshotCurrentPage(task, failure); } } - - if (failure) { - // Skip right to snapshotting if there was a failure, since the - // fonts might be in an inconsistent state. - snapshotCurrentPage(task, failure); - } } function snapshotCurrentPage(task, failure) { diff --git a/test/test_slave.html b/test/test_slave.html index 50bb067e1..7c2097110 100644 --- a/test/test_slave.html +++ b/test/test_slave.html @@ -5,6 +5,7 @@ + From b312719d7e0cf1a45dda0b4ad871a45162ed6f5b Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Thu, 12 Apr 2012 08:23:38 -0700 Subject: [PATCH 13/52] Fixes test driver and examples --- examples/acroforms/forms.js | 149 +++++++++++++++++---------------- examples/acroforms/index.html | 1 + examples/helloworld/hello.js | 42 ++++++---- examples/helloworld/index.html | 1 + src/util.js | 1 + test/driver.js | 8 +- 6 files changed, 109 insertions(+), 93 deletions(-) diff --git a/examples/acroforms/forms.js b/examples/acroforms/forms.js index 6ec92766d..868825fc7 100644 --- a/examples/acroforms/forms.js +++ b/examples/acroforms/forms.js @@ -9,7 +9,7 @@ var formFields = {}; -function setupForm(div, content, scale) { +function setupForm(div, content, viewport) { function bindInputItem(input, item) { if (input.name in formFields) { var value = formFields[input.name]; @@ -27,16 +27,20 @@ function setupForm(div, content, scale) { } function createElementWithStyle(tagName, item) { var element = document.createElement(tagName); - element.style.left = (item.x * scale) + 'px'; - element.style.top = (item.y * scale) + 'px'; - element.style.width = Math.ceil(item.width * scale) + 'px'; - element.style.height = Math.ceil(item.height * scale) + 'px'; + var rect = Util.normalizeRect( + viewport.convertToViewportRectangle(item.rect)); + element.style.left = Math.floor(rect[0]) + 'px'; + element.style.top = Math.floor(rect[1]) + 'px'; + element.style.width = Math.ceil(rect[2] - rect[0]) + 'px'; + element.style.height = Math.ceil(rect[3] - rect[1]) + 'px'; return element; } function assignFontStyle(element, item) { var fontStyles = ''; - if ('fontSize' in item) - fontStyles += 'font-size: ' + Math.round(item.fontSize * scale) + 'px;'; + if ('fontSize' in item) { + fontStyles += 'font-size: ' + Math.round(item.fontSize * + viewport.fontScale) + 'px;'; + } switch (item.textAlignment) { case 0: fontStyles += 'text-align: left;'; @@ -51,83 +55,88 @@ function setupForm(div, content, scale) { element.setAttribute('style', element.getAttribute('style') + fontStyles); } - var items = content.getAnnotations(); - for (var i = 0; i < items.length; i++) { - var item = items[i]; - switch (item.type) { - case 'Widget': - if (item.fieldType != 'Tx' && item.fieldType != 'Btn' && - item.fieldType != 'Ch') - break; - var inputDiv = createElementWithStyle('div', item); - inputDiv.className = 'inputHint'; - div.appendChild(inputDiv); - var input; - if (item.fieldType == 'Tx') { - input = createElementWithStyle('input', item); - } - if (item.fieldType == 'Btn') { - input = createElementWithStyle('input', item); - if (item.flags & 32768) { - input.type = 'radio'; - // radio button is not supported - } else if (item.flags & 65536) { - input.type = 'button'; - // pushbutton is not supported - } else { - input.type = 'checkbox'; + content.getAnnotations().then(function(items) { + for (var i = 0; i < items.length; i++) { + var item = items[i]; + switch (item.type) { + case 'Widget': + if (item.fieldType != 'Tx' && item.fieldType != 'Btn' && + item.fieldType != 'Ch') + break; + var inputDiv = createElementWithStyle('div', item); + inputDiv.className = 'inputHint'; + div.appendChild(inputDiv); + var input; + if (item.fieldType == 'Tx') { + input = createElementWithStyle('input', item); } - } - if (item.fieldType == 'Ch') { - input = createElementWithStyle('select', item); - // select box is not supported - } - input.className = 'inputControl'; - input.name = item.fullName; - input.title = item.alternativeText; - assignFontStyle(input, item); - bindInputItem(input, item); - div.appendChild(input); - break; + if (item.fieldType == 'Btn') { + input = createElementWithStyle('input', item); + if (item.flags & 32768) { + input.type = 'radio'; + // radio button is not supported + } else if (item.flags & 65536) { + input.type = 'button'; + // pushbutton is not supported + } else { + input.type = 'checkbox'; + } + } + if (item.fieldType == 'Ch') { + input = createElementWithStyle('select', item); + // select box is not supported + } + input.className = 'inputControl'; + input.name = item.fullName; + input.title = item.alternativeText; + assignFontStyle(input, item); + bindInputItem(input, item); + div.appendChild(input); + break; + } } - } + }); } function renderPage(div, pdf, pageNumber, callback) { - var page = pdf.getPage(pageNumber); - var scale = 1.5; + pdf.getPage(pageNumber).then(function(page) { + var scale = 1.5; + var viewport = page.getViewport(scale); - var pageDisplayWidth = page.width * scale; - var pageDisplayHeight = page.height * scale; + var pageDisplayWidth = viewport.width; + var pageDisplayHeight = viewport.height; - var pageDivHolder = document.createElement('div'); - pageDivHolder.className = 'pdfpage'; - pageDivHolder.style.width = pageDisplayWidth + 'px'; - pageDivHolder.style.height = pageDisplayHeight + 'px'; - div.appendChild(pageDivHolder); + var pageDivHolder = document.createElement('div'); + pageDivHolder.className = 'pdfpage'; + pageDivHolder.style.width = pageDisplayWidth + 'px'; + pageDivHolder.style.height = pageDisplayHeight + 'px'; + div.appendChild(pageDivHolder); - // Prepare canvas using PDF page dimensions - var canvas = document.createElement('canvas'); - var context = canvas.getContext('2d'); - canvas.width = pageDisplayWidth; - canvas.height = pageDisplayHeight; - pageDivHolder.appendChild(canvas); + // Prepare canvas using PDF page dimensions + var canvas = document.createElement('canvas'); + var context = canvas.getContext('2d'); + canvas.width = pageDisplayWidth; + canvas.height = pageDisplayHeight; + pageDivHolder.appendChild(canvas); - // Render PDF page into canvas context - page.startRendering(context, callback); + // Render PDF page into canvas context + var renderContext = { + canvasContext: context, + viewport: viewport + }; + page.render(renderContext).then(callback); - // Prepare and populate form elements layer - var formDiv = document.createElement('div'); - pageDivHolder.appendChild(formDiv); + // Prepare and populate form elements layer + var formDiv = document.createElement('div'); + pageDivHolder.appendChild(formDiv); - setupForm(formDiv, page, scale); + setupForm(formDiv, page, viewport); + }); } -PDFJS.getPdf(pdfWithFormsPath, function getPdfForm(data) { - // Instantiate PDFDoc with PDF data - var pdf = new PDFJS.PDFDoc(data); - +// Fetch the PDF document from the URL using promices +PDFJS.getDocument(pdfWithFormsPath).then(function getPdfForm(pdf) { // Rendering all pages starting from first var viewer = document.getElementById('viewer'); var pageNumber = 1; diff --git a/examples/acroforms/index.html b/examples/acroforms/index.html index 8a9053f78..858ad649f 100644 --- a/examples/acroforms/index.html +++ b/examples/acroforms/index.html @@ -6,6 +6,7 @@ + diff --git a/examples/helloworld/hello.js b/examples/helloworld/hello.js index 45e61eb6f..7bf18d65b 100644 --- a/examples/helloworld/hello.js +++ b/examples/helloworld/hello.js @@ -7,25 +7,31 @@ 'use strict'; -PDFJS.getPdf('helloworld.pdf', function getPdfHelloWorld(data) { - // - // Instantiate PDFDoc with PDF data - // - var pdf = new PDFJS.PDFDoc(data); - var page = pdf.getPage(1); - var scale = 1.5; +// +// Fetch the PDF document from the URL using promices +// +PDFJS.getDocument('helloworld.pdf').then(function(pdf) { + // Using promise to fetch the page + pdf.getPage(1).then(function(page) { + var scale = 1.5; + var viewport = page.getViewport(scale); - // - // Prepare canvas using PDF page dimensions - // - var canvas = document.getElementById('the-canvas'); - var context = canvas.getContext('2d'); - canvas.height = page.height * scale; - canvas.width = page.width * scale; + // + // Prepare canvas using PDF page dimensions + // + var canvas = document.getElementById('the-canvas'); + var context = canvas.getContext('2d'); + canvas.height = viewport.height; + canvas.width = viewport.width; - // - // Render PDF page into canvas context - // - page.startRendering(context); + // + // Render PDF page into canvas context + // + var renderContext = { + canvasContext: context, + viewport: viewport + }; + page.render(renderContext); + }); }); diff --git a/examples/helloworld/index.html b/examples/helloworld/index.html index c6af616e6..c9df98809 100644 --- a/examples/helloworld/index.html +++ b/examples/helloworld/index.html @@ -6,6 +6,7 @@ + diff --git a/src/util.js b/src/util.js index 390b08427..6ec4bc9cb 100644 --- a/src/util.js +++ b/src/util.js @@ -242,6 +242,7 @@ var PageViewport = PDFJS.PageViewport = (function PageViewportClosure() { this.offsetY = offsetY; this.width = width; this.height = height; + this.fontScale = scale; } PageViewport.prototype = { convertToViewportPoint: function PageViewport_convertToViewportPoint(x, y) { diff --git a/test/driver.js b/test/driver.js index 600f53c9c..993a31349 100644 --- a/test/driver.js +++ b/test/driver.js @@ -176,11 +176,9 @@ function nextPage(task, loadError) { var ctx = canvas.getContext('2d'); task.pdfDoc.getPage(task.pageNum).then(function(page) { var pdfToCssUnitsCoef = 96.0 / 72.0; - // using mediaBox for the canvas size - var pageWidth = page.width; - var pageHeight = page.height; - canvas.width = pageWidth * pdfToCssUnitsCoef; - canvas.height = pageHeight * pdfToCssUnitsCoef; + var viewport = page.getViewport(pdfToCssUnitsCoef); + canvas.width = viewport.width; + canvas.height = viewport.height; clear(ctx); // using the text layer builder that does nothing to test From b6c587bb9801fba9dcacfe3e3c82a6f967425a67 Mon Sep 17 00:00:00 2001 From: Brendan Dahl Date: Thu, 12 Apr 2012 09:59:17 -0700 Subject: [PATCH 14/52] Fix driver viewport. --- test/driver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/driver.js b/test/driver.js index 993a31349..be66aa216 100644 --- a/test/driver.js +++ b/test/driver.js @@ -192,7 +192,7 @@ function nextPage(task, loadError) { var renderContext = { canvasContext: ctx, textLayer: textLayerBuilder, - viewport: page.getViewport(1) + viewport: viewport }; page.render(renderContext).then(function() { snapshotCurrentPage(task, false); From f0687c4d50f4f674620b5cada5120421d2ba60c8 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Thu, 12 Apr 2012 10:01:07 -0700 Subject: [PATCH 15/52] Refactor pageNumber/pageIndex concept --- src/api.js | 54 +++++++++++++++++++++++---------------------------- src/worker.js | 17 ++++++++-------- 2 files changed, 33 insertions(+), 38 deletions(-) diff --git a/src/api.js b/src/api.js index 3d683af07..e3969563a 100644 --- a/src/api.js +++ b/src/api.js @@ -68,8 +68,8 @@ if (this.worker) this.worker.terminate(); - for (var n in this.pageCache) - delete this.pageCache[n]; + this.pageCache = []; + this.pagePromises = []; }, setupFakeWorker: function WorkerTransport_setupFakeWorker() { // If we don't use a worker, just post/sendMessage to the main thread. @@ -92,7 +92,7 @@ function WorkerTransport_setupMessageHandler(messageHandler) { this.messageHandler = messageHandler; - messageHandler.on('doc', function transportPage(data) { + messageHandler.on('getdoc', function transportDoc(data) { var pdfInfo = data.pdfInfo; var pdfDocument = new PdfDocumentWrapper(pdfInfo, this); this.pdfDocument = pdfDocument; @@ -102,19 +102,16 @@ messageHandler.on('getpage', function transportPage(data) { var pageInfo = data.pageInfo; var page = new PdfPageWrapper(pageInfo, this); - this.pageCache[pageInfo.pageNumber] = page; - var promises = this.pagePromises[pageInfo.pageNumber]; - delete this.pagePromises[pageInfo.pageNumber]; - for (var i = 0, ii = promises.length; i < ii; ++i) - promises[i].resolve(page); + this.pageCache[pageInfo.pageIndex] = page; + var promise = this.pagePromises[pageInfo.pageIndex]; + promise.resolve(page); }, this); - messageHandler.on('page', function transportPage(data) { - var pageNum = data.pageNum; - var page = this.pageCache[pageNum - 1]; + messageHandler.on('renderpage', function transportRender(data) { + var page = this.pageCache[data.pageIndex]; var depFonts = data.depFonts; - //page.stats.timeEnd('Page Request'); + page.stats.timeEnd('Page Request'); page.startRenderingFromOperatorList(data.operatorList, depFonts); }, this); @@ -197,20 +194,17 @@ }, sendData: function WorkerTransport_sendData(data) { - this.messageHandler.send('doc_request', data); + this.messageHandler.send('getdoc_request', data); }, - getPage: function WorkerTransport_getPage(n, promise) { - if (this.pageCache[n - 1]) { - promise.resolve(this.pageCache[n - 1]); - return; - } - if ((n - 1) in this.pagePromises) { - this.pagePromises[n - 1].push(promise); - return; - } - this.pagePromises[n - 1] = [promise]; - this.messageHandler.send('getpage_request', {pageNumber: n - 1}); + getPage: function WorkerTransport_getPage(pageNumber, promise) { + var pageIndex = pageNumber - 1; + if (pageIndex in this.pagePromises) + return this.pagePromises[pageIndex]; + var promise = new PDFJS.Promise('Page ' + pageNumber); + this.pagePromises[pageIndex] = promise; + this.messageHandler.send('getpage_request', { pageIndex: pageIndex }); + return promise; } }; function PdfPageWrapper(pageInfo, transport) { @@ -221,7 +215,7 @@ } PdfPageWrapper.prototype = { get pageNumber() { - return this.pageInfo.pageNumber; + return this.pageInfo.pageIndex + 1; }, get rotate() { return this.pageInfo.rotate; @@ -255,8 +249,10 @@ if (!this.displayReadyPromise) { this.displayReadyPromise = new Promise(); - //this.stats.time('Page Request'); - this.transport.messageHandler.send('page_request', this.pageNumber + 1); + this.stats.time('Page Request'); + this.transport.messageHandler.send('renderpage_request', { + pageIndex: this.pageNumber - 1 + }); } var callback = (function complete(error) { @@ -389,9 +385,7 @@ return this.pdfInfo.fingerprint; }, getPage: function(number) { - var promise = new PDFJS.Promise(); - this.transport.getPage(number, promise); - return promise; + return this.transport.getPage(number); }, getDestinations: function() { var promise = new PDFJS.Promise(); diff --git a/src/worker.js b/src/worker.js index fcde756b9..f61e4b509 100644 --- a/src/worker.js +++ b/src/worker.js @@ -85,7 +85,7 @@ var WorkerMessageHandler = { handler.send('test', data instanceof Uint8Array); }); - handler.on('doc_request', function wphSetupDoc(data) { + handler.on('getdoc_request', function wphSetupDoc(data) { // Create only the model of the PDFDoc, which is enough for // processing the content of the pdf. pdfModel = new PDFDocModel(new Stream(data)); @@ -97,13 +97,14 @@ var WorkerMessageHandler = { info: pdfModel.info, metadata: pdfModel.catalog.metadata }; - handler.send('doc', {pdfInfo: doc}); + handler.send('getdoc', {pdfInfo: doc}); }); handler.on('getpage_request', function wphSetupTest(data) { - var pdfPage = pdfModel.getPage(data.pageNumber + 1); + var pageNumber = data.pageIndex + 1; + var pdfPage = pdfModel.getPage(pageNumber); var page = { - pageNumber: data.pageNumber, + pageIndex: data.pageIndex, rotate: pdfPage.rotate, ref: pdfPage.ref, view: pdfPage.view, @@ -112,8 +113,8 @@ var WorkerMessageHandler = { handler.send('getpage', {pageInfo: page}); }); - handler.on('page_request', function wphSetupPageRequest(pageNum) { - pageNum = parseInt(pageNum); + handler.on('renderpage_request', function wphSetupPageRequest(data) { + var pageNum = data.pageIndex + 1; // The following code does quite the same as @@ -170,8 +171,8 @@ var WorkerMessageHandler = { } } - handler.send('page', { - pageNum: pageNum, + handler.send('renderpage', { + pageIndex: data.pageIndex, operatorList: operatorList, depFonts: Object.keys(fonts) }); From 2c49cab3a111e541e4ea1acc1907fd742ff2c57d Mon Sep 17 00:00:00 2001 From: Brendan Dahl Date: Thu, 12 Apr 2012 12:11:22 -0700 Subject: [PATCH 16/52] Fixing names. --- src/api.js | 500 +++++++++++++++++++++++++------------------------- src/core.js | 26 +-- src/image.js | 2 +- src/worker.js | 16 +- 4 files changed, 276 insertions(+), 268 deletions(-) diff --git a/src/api.js b/src/api.js index e3969563a..72d8cae66 100644 --- a/src/api.js +++ b/src/api.js @@ -1,7 +1,250 @@ /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ -(function pdfApiWrapper() { +PDFJS.getDocument = function getDocument(source) { + var promise = new PDFJS.Promise(); + var transport = new WorkerTransport(promise); + if (typeof source === 'string') { + // fetch url + PDFJS.getPdf( + { + url: source, + progress: function getPDFProgress(evt) { + if (evt.lengthComputable) + promise.progress({ + loaded: evt.loaded, + total: evt.total + }); + }, + error: function getPDFError(e) { + promise.reject('Unexpected server response of ' + + e.target.status + '.'); + } + }, + function getPDFLoad(data) { + transport.sendData(data); + }); + } else { + // assuming the source is array, instantiating directly from it + transport.sendData(source); + } + return promise; +}; + +var PDFDocumentProxy = (function() { + function PDFDocumentProxy(pdfInfo, transport) { + this.pdfInfo = pdfInfo; + this.transport = transport; + } + PDFDocumentProxy.prototype = { + get numPages() { + return this.pdfInfo.numPages; + }, + get fingerprint() { + return this.pdfInfo.fingerprint; + }, + getPage: function(number) { + return this.transport.getPage(number); + }, + getDestinations: function() { + var promise = new PDFJS.Promise(); + var destinations = this.pdfInfo.destinations; + promise.resolve(destinations); + return promise; + }, + getOutline: function() { + var promise = new PDFJS.Promise(); + var outline = this.pdfInfo.outline; + promise.resolve(outline); + return promise; + }, + getMetadata: function() { + var promise = new PDFJS.Promise(); + var info = this.pdfInfo.info; + var metadata = this.pdfInfo.metadata; + promise.resolve({ + info: info, + metadata: metadata ? new PDFJS.Metadata(metadata) : null + }); + return promise; + }, + destroy: function() { + this.transport.destroy(); + } + }; + return PDFDocumentProxy; +})(); + +var PDFPageProxy = (function PDFPageProxyClosure() { + function PDFPageProxy(pageInfo, transport) { + this.pageInfo = pageInfo; + this.transport = transport; + this._stats = new StatTimer(); + this.objs = transport.objs; + } + PDFPageProxy.prototype = { + get pageNumber() { + return this.pageInfo.pageIndex + 1; + }, + get rotate() { + return this.pageInfo.rotate; + }, + get stats() { + return this._stats; + }, + get ref() { + return this.pageInfo.ref; + }, + get view() { + return this.pageInfo.view; + }, + getViewport: function(scale, rotate) { + if (arguments.length < 2) + rotate = this.rotate; + return new PDFJS.PageViewport(this.view, scale, rotate, 0, 0); + }, + getAnnotations: function() { + var promise = new PDFJS.Promise(); + var annotations = this.pageInfo.annotations; + promise.resolve(annotations); + return promise; + }, + render: function(renderContext) { + var promise = new Promise(); + var stats = this.stats; + stats.time('Overall'); + // If there is no displayReadyPromise yet, then the operatorList was never + // requested before. Make the request and create the promise. + if (!this.displayReadyPromise) { + this.displayReadyPromise = new Promise(); + + this.stats.time('Page Request'); + this.transport.messageHandler.send('RenderPageRequest', { + pageIndex: this.pageNumber - 1 + }); + } + + var callback = (function complete(error) { + if (error) + promise.reject(error); + else + promise.resolve(); + }); + + // Once the operatorList and fonts are loaded, do the actual rendering. + this.displayReadyPromise.then( + function pageDisplayReadyPromise() { + var gfx = new CanvasGraphics(renderContext.canvasContext, + this.objs, renderContext.textLayer); + try { + this.display(gfx, renderContext.viewport, callback); + } catch (e) { + if (callback) + callback(e); + else + error(e); + } + }.bind(this), + function pageDisplayReadPromiseError(reason) { + if (callback) + callback(reason); + else + error(reason); + } + ); + + return promise; + }, + + startRenderingFromOperatorList: + function PDFPageWrapper_startRenderingFromOperatorList(operatorList, + fonts) { + var self = this; + this.operatorList = operatorList; + + var displayContinuation = function pageDisplayContinuation() { + // Always defer call to display() to work around bug in + // Firefox error reporting from XHR callbacks. + setTimeout(function pageSetTimeout() { + self.displayReadyPromise.resolve(); + }); + }; + + this.ensureFonts(fonts, + function pageStartRenderingFromOperatorListEnsureFonts() { + displayContinuation(); + } + ); + }, + + ensureFonts: function PDFPageWrapper_ensureFonts(fonts, callback) { + this.stats.time('Font Loading'); + // Convert the font names to the corresponding font obj. + for (var i = 0, ii = fonts.length; i < ii; i++) { + fonts[i] = this.objs.objs[fonts[i]].data; + } + + // Load all the fonts + FontLoader.bind( + fonts, + function pageEnsureFontsFontObjs(fontObjs) { + this.stats.timeEnd('Font Loading'); + + callback.call(this); + }.bind(this) + ); + }, + + display: function PDFPageWrapper_display(gfx, viewport, callback) { + var stats = this.stats; + stats.time('Rendering'); + + gfx.beginDrawing(viewport); + + var startIdx = 0; + var length = this.operatorList.fnArray.length; + var operatorList = this.operatorList; + var stepper = null; + if (PDFJS.pdfBug && StepperManager.enabled) { + stepper = StepperManager.create(this.pageNumber); + stepper.init(operatorList); + stepper.nextBreakPoint = stepper.getNextBreakPoint(); + } + + var self = this; + function next() { + startIdx = + gfx.executeOperatorList(operatorList, startIdx, next, stepper); + if (startIdx == length) { + gfx.endDrawing(); + stats.timeEnd('Rendering'); + stats.timeEnd('Overall'); + if (callback) callback(); + } + } + next(); + }, + + getTextContent: function() { + var promise = new PDFJS.Promise(); + var textContent = 'page text'; // not implemented + promise.resolve(textContent); + return promise; + }, + getOperationList: function() { + var promise = new PDFJS.Promise(); + var operationList = { // not implemented + dependencyFontsID: null, + operatorList: null + }; + promise.resolve(operationList); + return promise; + } + }; + return PDFPageProxy; +})(); + +var WorkerTransport = (function WorkerTransportClosure() { function WorkerTransport(promise) { this.workerReadyPromise = promise; this.objs = new PDFObjects(); @@ -92,22 +335,22 @@ function WorkerTransport_setupMessageHandler(messageHandler) { this.messageHandler = messageHandler; - messageHandler.on('getdoc', function transportDoc(data) { + messageHandler.on('GetDoc', function transportDoc(data) { var pdfInfo = data.pdfInfo; - var pdfDocument = new PdfDocumentWrapper(pdfInfo, this); + var pdfDocument = new PDFDocumentProxy(pdfInfo, this); this.pdfDocument = pdfDocument; this.workerReadyPromise.resolve(pdfDocument); }, this); - messageHandler.on('getpage', function transportPage(data) { + messageHandler.on('GetPage', function transportPage(data) { var pageInfo = data.pageInfo; - var page = new PdfPageWrapper(pageInfo, this); + var page = new PDFPageProxy(pageInfo, this); this.pageCache[pageInfo.pageIndex] = page; var promise = this.pagePromises[pageInfo.pageIndex]; promise.resolve(page); }, this); - messageHandler.on('renderpage', function transportRender(data) { + messageHandler.on('RenderPage', function transportRender(data) { var page = this.pageCache[data.pageIndex]; var depFonts = data.depFonts; @@ -149,7 +392,7 @@ } }, this); - messageHandler.on('page_error', function transportError(data) { + messageHandler.on('PageError', function transportError(data) { var page = this.pageCache[data.pageNum]; if (page.displayReadyPromise) page.displayReadyPromise.reject(data.error); @@ -157,7 +400,7 @@ error(data.error); }, this); - messageHandler.on('jpeg_decode', function(data, promise) { + messageHandler.on('JpegDecode', function(data, promise) { var imageData = data[0]; var components = data[1]; if (components != 3 && components != 1) @@ -194,7 +437,7 @@ }, sendData: function WorkerTransport_sendData(data) { - this.messageHandler.send('getdoc_request', data); + this.messageHandler.send('GetDocRequest', data); }, getPage: function WorkerTransport_getPage(pageNumber, promise) { @@ -203,245 +446,10 @@ return this.pagePromises[pageIndex]; var promise = new PDFJS.Promise('Page ' + pageNumber); this.pagePromises[pageIndex] = promise; - this.messageHandler.send('getpage_request', { pageIndex: pageIndex }); + this.messageHandler.send('GetPageRequest', { pageIndex: pageIndex }); return promise; } }; - function PdfPageWrapper(pageInfo, transport) { - this.pageInfo = pageInfo; - this.transport = transport; - this._stats = new StatTimer(); - this.objs = transport.objs; - } - PdfPageWrapper.prototype = { - get pageNumber() { - return this.pageInfo.pageIndex + 1; - }, - get rotate() { - return this.pageInfo.rotate; - }, - get stats() { - return this._stats; - }, - get ref() { - return this.pageInfo.ref; - }, - get view() { - return this.pageInfo.view; - }, - getViewport: function(scale, rotate) { - if (arguments.length < 2) - rotate = this.rotate; - return new PDFJS.PageViewport(this.view, scale, rotate, 0, 0); - }, - getAnnotations: function() { - var promise = new PDFJS.Promise(); - var annotations = this.pageInfo.annotations; - promise.resolve(annotations); - return promise; - }, - render: function(renderContext) { - var promise = new Promise(); - var stats = this.stats; - stats.time('Overall'); - // If there is no displayReadyPromise yet, then the operatorList was never - // requested before. Make the request and create the promise. - if (!this.displayReadyPromise) { - this.displayReadyPromise = new Promise(); + return WorkerTransport; - this.stats.time('Page Request'); - this.transport.messageHandler.send('renderpage_request', { - pageIndex: this.pageNumber - 1 - }); - } - - var callback = (function complete(error) { - if (error) - promise.reject(error); - else - promise.resolve(); - }); - - // Once the operatorList and fonts are loaded, do the actual rendering. - this.displayReadyPromise.then( - function pageDisplayReadyPromise() { - var gfx = new CanvasGraphics(renderContext.canvasContext, - this.objs, renderContext.textLayer); - try { - this.display(gfx, renderContext.viewport, callback); - } catch (e) { - if (callback) - callback(e); - else - error(e); - } - }.bind(this), - function pageDisplayReadPromiseError(reason) { - if (callback) - callback(reason); - else - error(reason); - } - ); - - return promise; - }, - - startRenderingFromOperatorList: - function PdfPageWrapper_startRenderingFromOperatorList(operatorList, - fonts) { - var self = this; - this.operatorList = operatorList; - - var displayContinuation = function pageDisplayContinuation() { - // Always defer call to display() to work around bug in - // Firefox error reporting from XHR callbacks. - setTimeout(function pageSetTimeout() { - self.displayReadyPromise.resolve(); - }); - }; - - this.ensureFonts(fonts, - function pageStartRenderingFromOperatorListEnsureFonts() { - displayContinuation(); - } - ); - }, - - ensureFonts: function PdfPageWrapper_ensureFonts(fonts, callback) { - this.stats.time('Font Loading'); - // Convert the font names to the corresponding font obj. - for (var i = 0, ii = fonts.length; i < ii; i++) { - fonts[i] = this.objs.objs[fonts[i]].data; - } - - // Load all the fonts - FontLoader.bind( - fonts, - function pageEnsureFontsFontObjs(fontObjs) { - this.stats.timeEnd('Font Loading'); - - callback.call(this); - }.bind(this) - ); - }, - - display: function PdfPageWrapper_display(gfx, viewport, callback) { - var stats = this.stats; - stats.time('Rendering'); - - gfx.beginDrawing(viewport); - - var startIdx = 0; - var length = this.operatorList.fnArray.length; - var operatorList = this.operatorList; - var stepper = null; - if (PDFJS.pdfBug && StepperManager.enabled) { - stepper = StepperManager.create(this.pageNumber); - stepper.init(operatorList); - stepper.nextBreakPoint = stepper.getNextBreakPoint(); - } - - var self = this; - function next() { - startIdx = - gfx.executeOperatorList(operatorList, startIdx, next, stepper); - if (startIdx == length) { - gfx.endDrawing(); - stats.timeEnd('Rendering'); - stats.timeEnd('Overall'); - if (callback) callback(); - } - } - next(); - }, - - getTextContent: function() { - var promise = new PDFJS.Promise(); - var textContent = 'page text'; // not implemented - promise.resolve(textContent); - return promise; - }, - getOperationList: function() { - var promise = new PDFJS.Promise(); - var operationList = { // not implemented - dependencyFontsID: null, - operatorList: null - }; - promise.resolve(operationList); - return promise; - } - }; - - function PdfDocumentWrapper(pdfInfo, transport) { - this.pdfInfo = pdfInfo; - this.transport = transport; - } - PdfDocumentWrapper.prototype = { - get numPages() { - return this.pdfInfo.numPages; - }, - get fingerprint() { - return this.pdfInfo.fingerprint; - }, - getPage: function(number) { - return this.transport.getPage(number); - }, - getDestinations: function() { - var promise = new PDFJS.Promise(); - var destinations = this.pdfInfo.destinations; - promise.resolve(destinations); - return promise; - }, - getOutline: function() { - var promise = new PDFJS.Promise(); - var outline = this.pdfInfo.outline; - promise.resolve(outline); - return promise; - }, - getMetadata: function() { - var promise = new PDFJS.Promise(); - var info = this.pdfInfo.info; - var metadata = this.pdfInfo.metadata; - promise.resolve({ - info: info, - metadata: metadata ? new PDFJS.Metadata(metadata) : null - }); - return promise; - }, - destroy: function() { - this.transport.destroy(); - } - }; - - PDFJS.getDocument = function getDocument(source) { - var promise = new PDFJS.Promise(); - var transport = new WorkerTransport(promise); - if (typeof source === 'string') { - // fetch url - PDFJS.getPdf( - { - url: source, - progress: function getPdfProgress(evt) { - if (evt.lengthComputable) - promise.progress({ - loaded: evt.loaded, - total: evt.total - }); - }, - error: function getPdfError(e) { - promise.reject('Unexpected server response of ' + - e.target.status + '.'); - } - }, - function getPdfLoad(data) { - transport.sendData(data); - }); - } else { - // assuming the source is array, instantiating directly from it - transport.sendData(source); - } - return promise; - }; })(); - diff --git a/src/core.js b/src/core.js index 1aa560a46..ed35ce49e 100644 --- a/src/core.js +++ b/src/core.js @@ -311,20 +311,20 @@ var Page = (function PageClosure() { })(); /** - * The `PDFDocModel` holds all the data of the PDF file. Compared to the + * The `PDFDocument` holds all the data of the PDF file. Compared to the * `PDFDoc`, this one doesn't have any job management code. - * Right now there exists one PDFDocModel on the main thread + one object + * Right now there exists one PDFDocument on the main thread + one object * for each worker. If there is no worker support enabled, there are two - * `PDFDocModel` objects on the main thread created. + * `PDFDocument` objects on the main thread created. */ -var PDFDocModel = (function PDFDocModelClosure() { - function PDFDocModel(arg, callback) { +var PDFDocument = (function PDFDocumentClosure() { + function PDFDocument(arg, callback) { if (isStream(arg)) init.call(this, arg); else if (isArrayBuffer(arg)) init.call(this, new Stream(arg)); else - error('PDFDocModel: Unknown argument type'); + error('PDFDocument: Unknown argument type'); } function init(stream) { @@ -350,7 +350,7 @@ var PDFDocModel = (function PDFDocModelClosure() { return true; /* found */ } - PDFDocModel.prototype = { + PDFDocument.prototype = { get linearization() { var length = this.stream.length; var linearization = false; @@ -411,7 +411,7 @@ var PDFDocModel = (function PDFDocModelClosure() { }, // Find the header, remove leading garbage and setup the stream // starting from the header. - checkHeader: function PDFDocModel_checkHeader() { + checkHeader: function PDFDocument_checkHeader() { var stream = this.stream; stream.reset(); if (find(stream, '%PDF-', 1024)) { @@ -421,7 +421,7 @@ var PDFDocModel = (function PDFDocModelClosure() { } // May not be a PDF file, continue anyway. }, - setup: function PDFDocModel_setup(ownerPassword, userPassword) { + setup: function PDFDocument_setup(ownerPassword, userPassword) { this.checkHeader(); var xref = new XRef(this.stream, this.startXRef, @@ -435,7 +435,7 @@ var PDFDocModel = (function PDFDocModelClosure() { // shadow the prototype getter return shadow(this, 'numPages', num); }, - getDocumentInfo: function PDFDocModel_getDocumentInfo() { + getDocumentInfo: function PDFDocument_getDocumentInfo() { var info; if (this.xref.trailer.has('Info')) { var infoDict = this.xref.trailer.get('Info'); @@ -449,7 +449,7 @@ var PDFDocModel = (function PDFDocModelClosure() { return shadow(this, 'getDocumentInfo', info); }, - getFingerprint: function PDFDocModel_getFingerprint() { + getFingerprint: function PDFDocument_getFingerprint() { var xref = this.xref, fileID; if (xref.trailer.has('ID')) { fileID = ''; @@ -470,10 +470,10 @@ var PDFDocModel = (function PDFDocModelClosure() { return shadow(this, 'getFingerprint', fileID); }, - getPage: function PDFDocModel_getPage(n) { + getPage: function PDFDocument_getPage(n) { return this.catalog.getPage(n); } }; - return PDFDocModel; + return PDFDocument; })(); diff --git a/src/image.js b/src/image.js index 035e2f754..c8c19f9e5 100644 --- a/src/image.js +++ b/src/image.js @@ -15,7 +15,7 @@ var PDFImage = (function PDFImageClosure() { var colorSpace = dict.get('ColorSpace', 'CS'); colorSpace = ColorSpace.parse(colorSpace, xref, res); var numComps = colorSpace.numComps; - handler.send('jpeg_decode', [image.getIR(), numComps], function(message) { + handler.send('JpegDecode', [image.getIR(), numComps], function(message) { var data = message.data; var stream = new Stream(data, 0, data.length, image.dict); promise.resolve(stream); diff --git a/src/worker.js b/src/worker.js index f61e4b509..2075ff0eb 100644 --- a/src/worker.js +++ b/src/worker.js @@ -85,10 +85,10 @@ var WorkerMessageHandler = { handler.send('test', data instanceof Uint8Array); }); - handler.on('getdoc_request', function wphSetupDoc(data) { + handler.on('GetDocRequest', function wphSetupDoc(data) { // Create only the model of the PDFDoc, which is enough for // processing the content of the pdf. - pdfModel = new PDFDocModel(new Stream(data)); + pdfModel = new PDFDocument(new Stream(data)); var doc = { numPages: pdfModel.numPages, fingerprint: pdfModel.fingerprint, @@ -97,10 +97,10 @@ var WorkerMessageHandler = { info: pdfModel.info, metadata: pdfModel.catalog.metadata }; - handler.send('getdoc', {pdfInfo: doc}); + handler.send('GetDoc', {pdfInfo: doc}); }); - handler.on('getpage_request', function wphSetupTest(data) { + handler.on('GetPageRequest', function wphSetupTest(data) { var pageNumber = data.pageIndex + 1; var pdfPage = pdfModel.getPage(pageNumber); var page = { @@ -110,10 +110,10 @@ var WorkerMessageHandler = { view: pdfPage.view, annotations: pdfPage.getAnnotations() }; - handler.send('getpage', {pageInfo: page}); + handler.send('GetPage', {pageInfo: page}); }); - handler.on('renderpage_request', function wphSetupPageRequest(data) { + handler.on('RenderPageRequest', function wphSetupPageRequest(data) { var pageNum = data.pageIndex + 1; @@ -152,7 +152,7 @@ var WorkerMessageHandler = { }; } - handler.send('page_error', { + handler.send('PageError', { pageNum: pageNum, error: e }); @@ -171,7 +171,7 @@ var WorkerMessageHandler = { } } - handler.send('renderpage', { + handler.send('RenderPage', { pageIndex: data.pageIndex, operatorList: operatorList, depFonts: Object.keys(fonts) From 7c35f10af84776b709bdd155a3cd794519f142e1 Mon Sep 17 00:00:00 2001 From: Brendan Dahl Date: Thu, 12 Apr 2012 13:04:03 -0700 Subject: [PATCH 17/52] Fix thumbnail view. --- src/core.js | 4 ---- web/viewer.js | 19 +++++++++++++------ 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/core.js b/src/core.js index ed35ce49e..bba95ab06 100644 --- a/src/core.js +++ b/src/core.js @@ -300,10 +300,6 @@ var Page = (function PageClosure() { items.push(item); } return items; - }, - startRendering: function Page_startRendering(ctx, viewport, - callback, textLayer) { -/// DELETE } }; diff --git a/web/viewer.js b/web/viewer.js index bda342aa7..4a6a91e7a 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -1036,9 +1036,9 @@ var ThumbnailView = function thumbnailView(container, pdfPage, id) { this.id = id; var maxThumbSize = 134; - var canvasWidth = pageRatio >= 1 ? maxThumbSize : + var canvasWidth = this.width = pageRatio >= 1 ? maxThumbSize : maxThumbSize * pageRatio; - var canvasHeight = pageRatio <= 1 ? maxThumbSize : + var canvasHeight = this.height = pageRatio <= 1 ? maxThumbSize : maxThumbSize / pageRatio; var scaleX = this.scaleX = (canvasWidth / pageWidth); var scaleY = this.scaleY = (canvasHeight / pageHeight); @@ -1083,11 +1083,18 @@ var ThumbnailView = function thumbnailView(container, pdfPage, id) { var ctx = getPageDrawContext(); var drawViewport = pdfPage.getViewport(scaleX); - page.startRendering(ctx, drawViewport, - function thumbnailViewDrawStartRendering() { + var renderContext = { + canvasContext: ctx, + viewport: drawViewport + }; + pdfPage.render(renderContext).then( + function pdfPageRenderCallback() { callback(); - }); - + }, + function pdfPageRenderError(error) { + callback(); + } + ); this.hasImage = true; }; From 494fd1ccf9eff089f1176bf8199ce15e9fe0488f Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Thu, 12 Apr 2012 14:02:47 -0700 Subject: [PATCH 18/52] Fixes make files, removes stats from backend, stepper --- Makefile | 1 + make.js | 1 + src/api.js | 3 ++- src/core.js | 5 ----- web/debugger.js | 32 ++++++++++++++++---------------- 5 files changed, 20 insertions(+), 22 deletions(-) diff --git a/Makefile b/Makefile index 3cc423350..d4457e08f 100644 --- a/Makefile +++ b/Makefile @@ -20,6 +20,7 @@ all: bundle PDF_JS_FILES = \ core.js \ util.js \ + api.js \ canvas.js \ obj.js \ function.js \ diff --git a/make.js b/make.js index e0975fec8..2ee0d4cbd 100755 --- a/make.js +++ b/make.js @@ -79,6 +79,7 @@ target.bundle = function() { var SRC_FILES = ['core.js', 'util.js', + 'api.js', 'canvas.js', 'obj.js', 'function.js', diff --git a/src/api.js b/src/api.js index 72d8cae66..b14ea138d 100644 --- a/src/api.js +++ b/src/api.js @@ -80,6 +80,7 @@ var PDFPageProxy = (function PDFPageProxyClosure() { this.pageInfo = pageInfo; this.transport = transport; this._stats = new StatTimer(); + this._stats.enabled = !!globalScope.PDFJS.enableStats; this.objs = transport.objs; } PDFPageProxy.prototype = { @@ -206,7 +207,7 @@ var PDFPageProxy = (function PDFPageProxyClosure() { var operatorList = this.operatorList; var stepper = null; if (PDFJS.pdfBug && StepperManager.enabled) { - stepper = StepperManager.create(this.pageNumber); + stepper = StepperManager.create(this.pageNumber - 1); stepper.init(operatorList); stepper.nextBreakPoint = stepper.getNextBreakPoint(); } diff --git a/src/core.js b/src/core.js index bba95ab06..41f9a9c61 100644 --- a/src/core.js +++ b/src/core.js @@ -63,8 +63,6 @@ var Page = (function PageClosure() { function Page(xref, pageNumber, pageDict, ref) { this.pageNumber = pageNumber; this.pageDict = pageDict; - this.stats = new StatTimer(); - this.stats.enabled = !!globalScope.PDFJS.enableStats; this.xref = xref; this.ref = ref; @@ -139,8 +137,6 @@ var Page = (function PageClosure() { return this.operatorList; } - this.stats.time('Build IR Queue'); - var xref = this.xref; var content = this.content; var resources = this.resources; @@ -159,7 +155,6 @@ var Page = (function PageClosure() { xref, handler, 'p' + this.pageNumber + '_'); this.operatorList = pe.getOperatorList(content, resources, dependency); - this.stats.timeEnd('Build IR Queue'); return this.operatorList; }, diff --git a/web/debugger.js b/web/debugger.js index 00f5f6fd4..610a63854 100644 --- a/web/debugger.js +++ b/web/debugger.js @@ -163,29 +163,29 @@ var StepperManager = (function StepperManagerClosure() { enabled: false, active: false, // Stepper specific functions. - create: function create(pageNumber) { + create: function create(pageIndex) { var debug = document.createElement('div'); - debug.id = 'stepper' + pageNumber; + debug.id = 'stepper' + pageIndex; debug.setAttribute('hidden', true); debug.className = 'stepper'; stepperDiv.appendChild(debug); var b = document.createElement('option'); - b.textContent = 'Page ' + (pageNumber + 1); - b.value = pageNumber; + b.textContent = 'Page ' + (pageIndex + 1); + b.value = pageIndex; stepperChooser.appendChild(b); - var initBreakPoints = breakPoints[pageNumber] || []; - var stepper = new Stepper(debug, pageNumber, initBreakPoints); + var initBreakPoints = breakPoints[pageIndex] || []; + var stepper = new Stepper(debug, pageIndex, initBreakPoints); steppers.push(stepper); if (steppers.length === 1) - this.selectStepper(pageNumber, false); + this.selectStepper(pageIndex, false); return stepper; }, - selectStepper: function selectStepper(pageNumber, selectPanel) { + selectStepper: function selectStepper(pageIndex, selectPanel) { if (selectPanel) this.manager.selectPanel(1); for (var i = 0; i < steppers.length; ++i) { var stepper = steppers[i]; - if (stepper.pageNumber == pageNumber) + if (stepper.pageIndex == pageIndex) stepper.panel.removeAttribute('hidden'); else stepper.panel.setAttribute('hidden', true); @@ -193,11 +193,11 @@ var StepperManager = (function StepperManagerClosure() { var options = stepperChooser.options; for (var i = 0; i < options.length; ++i) { var option = options[i]; - option.selected = option.value == pageNumber; + option.selected = option.value == pageIndex; } }, - saveBreakPoints: function saveBreakPoints(pageNumber, bps) { - breakPoints[pageNumber] = bps; + saveBreakPoints: function saveBreakPoints(pageIndex, bps) { + breakPoints[pageIndex] = bps; sessionStorage.setItem('pdfjsBreakPoints', JSON.stringify(breakPoints)); } }; @@ -205,12 +205,12 @@ var StepperManager = (function StepperManagerClosure() { // The stepper for each page's IRQueue. var Stepper = (function StepperClosure() { - function Stepper(panel, pageNumber, initialBreakPoints) { + function Stepper(panel, pageIndex, initialBreakPoints) { this.panel = panel; this.len; this.breakPoint = 0; this.nextBreakPoint = null; - this.pageNumber = pageNumber; + this.pageIndex = pageIndex; this.breakPoints = initialBreakPoints; this.currentIdx = -1; } @@ -256,7 +256,7 @@ var Stepper = (function StepperClosure() { self.breakPoints.push(x); else self.breakPoints.splice(self.breakPoints.indexOf(x), 1); - StepperManager.saveBreakPoints(self.pageNumber, self.breakPoints); + StepperManager.saveBreakPoints(self.pageIndex, self.breakPoints); } })(i); @@ -278,7 +278,7 @@ var Stepper = (function StepperClosure() { return null; }, breakIt: function breakIt(idx, callback) { - StepperManager.selectStepper(this.pageNumber, true); + StepperManager.selectStepper(this.pageIndex, true); var self = this; var dom = document; self.currentIdx = idx; From 07fc34551d7785433a6d2d0d6ca79d2e32220b17 Mon Sep 17 00:00:00 2001 From: Brendan Dahl Date: Thu, 12 Apr 2012 14:07:11 -0700 Subject: [PATCH 19/52] Minor clean up. --- src/api.js | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/src/api.js b/src/api.js index 72d8cae66..841f3fe00 100644 --- a/src/api.js +++ b/src/api.js @@ -79,7 +79,7 @@ var PDFPageProxy = (function PDFPageProxyClosure() { function PDFPageProxy(pageInfo, transport) { this.pageInfo = pageInfo; this.transport = transport; - this._stats = new StatTimer(); + this.stats = new StatTimer(); this.objs = transport.objs; } PDFPageProxy.prototype = { @@ -89,9 +89,6 @@ var PDFPageProxy = (function PDFPageProxyClosure() { get rotate() { return this.pageInfo.rotate; }, - get stats() { - return this._stats; - }, get ref() { return this.pageInfo.ref; }, @@ -124,12 +121,12 @@ var PDFPageProxy = (function PDFPageProxyClosure() { }); } - var callback = (function complete(error) { - if (error) - promise.reject(error); - else - promise.resolve(); - }); + function complete(error) { + if (error) + promise.reject(error); + else + promise.resolve(); + }; // Once the operatorList and fonts are loaded, do the actual rendering. this.displayReadyPromise.then( @@ -137,19 +134,13 @@ var PDFPageProxy = (function PDFPageProxyClosure() { var gfx = new CanvasGraphics(renderContext.canvasContext, this.objs, renderContext.textLayer); try { - this.display(gfx, renderContext.viewport, callback); + this.display(gfx, renderContext.viewport, complete); } catch (e) { - if (callback) - callback(e); - else - error(e); + complete(e); } }.bind(this), function pageDisplayReadPromiseError(reason) { - if (callback) - callback(reason); - else - error(reason); + complete(reason); } ); From 23df48bf0e540277348121603fcd0c368fe87ff1 Mon Sep 17 00:00:00 2001 From: Brendan Dahl Date: Thu, 12 Apr 2012 15:14:18 -0700 Subject: [PATCH 20/52] Fix page error handling. --- src/api.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api.js b/src/api.js index 05e8a952f..f1baefade 100644 --- a/src/api.js +++ b/src/api.js @@ -385,7 +385,7 @@ var WorkerTransport = (function WorkerTransportClosure() { }, this); messageHandler.on('PageError', function transportError(data) { - var page = this.pageCache[data.pageNum]; + var page = this.pageCache[data.pageNum - 1]; if (page.displayReadyPromise) page.displayReadyPromise.reject(data.error); else From eba8f5a22cc8997a73947ba5cc023edf8c50cc9d Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Thu, 12 Apr 2012 15:14:18 -0700 Subject: [PATCH 21/52] Fix finger print, remove unused code --- src/worker.js | 2 +- web/viewer.js | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/worker.js b/src/worker.js index 2075ff0eb..d7b9b5718 100644 --- a/src/worker.js +++ b/src/worker.js @@ -91,7 +91,7 @@ var WorkerMessageHandler = { pdfModel = new PDFDocument(new Stream(data)); var doc = { numPages: pdfModel.numPages, - fingerprint: pdfModel.fingerprint, + fingerprint: pdfModel.getFingerprint(), destinations: pdfModel.catalog.destinations, outline: pdfModel.catalog.documentOutline, info: pdfModel.info, diff --git a/web/viewer.js b/web/viewer.js index 4a6a91e7a..35ee38e42 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -860,7 +860,6 @@ var PageView = function pageView(container, pdfPage, id, scale, } this.getPagePoint = function pageViewGetPagePoint(x, y) { - var scale = PDFView.currentScale; return this.viewport.convertToPdfPoint(x, y); }; From dee158d80c926e02c7a7573bc3d87659b2e64408 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Thu, 12 Apr 2012 15:56:17 -0700 Subject: [PATCH 22/52] Fix title info for PDF document --- src/worker.js | 2 +- web/viewer.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/worker.js b/src/worker.js index d7b9b5718..5cecc6cf2 100644 --- a/src/worker.js +++ b/src/worker.js @@ -94,7 +94,7 @@ var WorkerMessageHandler = { fingerprint: pdfModel.getFingerprint(), destinations: pdfModel.catalog.destinations, outline: pdfModel.catalog.documentOutline, - info: pdfModel.info, + info: pdfModel.getDocumentInfo(), metadata: pdfModel.catalog.metadata }; handler.send('GetDoc', {pdfInfo: doc}); diff --git a/web/viewer.js b/web/viewer.js index 35ee38e42..5b43ee7e1 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -550,7 +550,8 @@ var PDFView = { self.setInitialView(storedHash, scale); }); - pdfDocument.getMetadata().then(function(info, metadata) { + pdfDocument.getMetadata().then(function(data) { + var info = data.info, metadata = data.metadata; self.documentInfo = info; self.metadata = metadata; From 3925e374177d9e5b8d470c92b8b23c31fdf11b4e Mon Sep 17 00:00:00 2001 From: Brendan Dahl Date: Thu, 12 Apr 2012 17:59:30 -0700 Subject: [PATCH 23/52] Add basic api unit testing. --- test/pdfs/.gitignore | 2 +- test/pdfs/basicapi.pdf | Bin 0 -> 105779 bytes test/unit/api_spec.js | 107 ++++++++++++++++++++++++++++++++++++ test/unit/jsTestDriver.conf | 60 ++++++++++---------- 4 files changed, 139 insertions(+), 30 deletions(-) create mode 100644 test/pdfs/basicapi.pdf create mode 100644 test/unit/api_spec.js diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 2a7c27875..e4b9fb10c 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -31,4 +31,4 @@ !issue1002.pdf !issue925.pdf !gradientfill.pdf - +!basicapi.pdf diff --git a/test/pdfs/basicapi.pdf b/test/pdfs/basicapi.pdf new file mode 100644 index 0000000000000000000000000000000000000000..31ffcfe9feb708602cb42c25534eaa6ef12b2c25 GIT binary patch literal 105779 zcmeFYRX`-smL-b2Q+VO-P`JAk?(R}Ji8~~2g%(=4yB6;5?gbR?lDJ#Gy7#{Bp4YEu zdOqfJej-jr>^Ntiwb$M&B2EUiilj6%I|~mI_3qxx0unnH85jI|zo*s6SQSiN-4p>9Hs5S4Ey(C3`M zm2d$#{Wm7!_Li0w|Ba1?i;cs7V%CPy@J`x>^2hv&y&t z+?~k&1E+ueW>x=-n~SNVtCQ(pz|6h>PUr6tNlOnKb4xWDaWY|HGFCB1N5J1M^~u=( zBJdYZ_J5(u{x6K!IsSR@FAyqvfAJO;MzVCY_(w?o>B7Ha!zyiK?`G*j#wu<9*BePo zbAZL)7%5mfTDe)1ad5K#9mUnn#nRLP$t$Z#V@zp)4db5A_&UzX*76DR?UDaDqaB!9x_##mlQpZ>4;nn<6dgtGD>idcfe>L;OxlXX zREg2WHO^a?ocIs4`r>DMZU$DqhQG3}-Rh=HRh&Wk0g_aCq7B8rk^VwGMls@#grPOR z7>vfXYw+Z@fUVRSmV=`q$XJ{#{#xuNsF|$ks{XxihPzB?XJ6{P3PHv~ou6J?{zf!7 zdH>mkNj8rR8H{ezc;J}w{>26Zke>LiIDwdx4(JGtFO){F87^g6-Z^c(615;Ew80tI z{@R+Qj$hc?aPJm;gxwN{3%~tkqz^hWDY=rWv7?3vN<^Q1l0&w!Ie2drtZ@6w57My@ zr{W(G`G4{Kx7hIf4ch!JWHajGeqL);TJI3d z7~9g6%H$HQV4Jv}(wF^_pkQ&6KFy+mHa6iS1T3%nul5R7ZI|X(jdn#&JXOefF$G|{ zHs2!ZwSwT$LmE{Ms=n>eAWtlrH1jKVZzy+e>ga*^`xV2K#P`ls*HLKZ;-*7)0jo8Y zYH(2)EurSKN2HLjh zzr$JH|4$9CR#Q|S_!npQJe(JbY$k9X$U&TB@I?+0zdWQO%MC*{t}mTekr*`!rKnse z1Xu%?qiyU#0Hxm~ss6Rug zYAs6?0y6SKUp7&T)Xxzbh1Z%8ee4@6D~FW{&LB|5NVqdquace^q;8WRr)8NV1(@K0 zJW=x&M2ggUW~UDbHQpxP#+rWrwaL zkoHwS8<1H3u&Szq->?o9;Q|T7GxwwZ7c~DbS?)^4DsN-)PsRPm{moy+{YSa}yZc8{ zsFD4X4(@;NZaDr2wf*uBQU14z{vXQ9%kx)s|L5Y%PR7f@&c*!?ng4eIKKDm7!I5fy zD6cWP_;IjVWkHTi9-5s{SGy8meaJ)+*3IH{<)&r&Z{($wY|j2!*S5t(H5 z^!`{pOU$KD`Hd@4oN_p>)7PNkRc4RSbdC4)As<$xdd)RF(o?E+iB2-qzLJk%hX7%P z#Qo7fDS)5Pi>UuB5)N-m$Zh_2sJQ=U)d1Q*$^^cbAoF!XV4r0GWFq%z4f{YuJBiLK z#~cVgAz)*)gC_pi%Xm+`z;gs^ios;ch6prrDWD-B*?irP6VSmoTcQWMbZSdn9P>c%od8TG;(2Z*+vuRFpYpuVFB>K@|uN0F{#3a9>s` zz|Z_j!L$ay(w&jr)D~Pb*vO=RS15+uZASPx%l6zt11KU+>^ZXLx4n=*yL0eKP7K$B z8OgEi(D~UN9DRa8IyrJ}ZXcIX;;7OwkM$i|FgG>tT$3VRI9O47Yv@vg{xQl{m@yx) zso?hHxNr!P-Ev zSh4XZ;WdR`@DB^%ed=2LXq%o;kT9$1_Y~3-vP;Q(>rfxu&Jwx;ih>msL-n@)GSlc% zjjxwlDyJRvtd^I(i_)l!A;#?^lXju6(sJ|%so_dWtA~$AhvkTCy=u($$)y5vOLvXf zEA8F|sski#-t@&dJZ`__yU2U6cVG5*)Iu?0pNRO!d<*8)n2Evd2WcfJq$xLbM>~z& z=)R7Cg-F>L%HqpUZ^i5V>+i8YhLb<^J&S&6_5DbiqX*E+Z8Cehth z<_fntsULTF_#G(Q8{X$F`l`tVhRr4)R`G2~`ra`&N`EiLGRKKsSYJ?}&V0DCV1Qi~ zV_)C7R9V1q=S&;lMh7g6*r-o&w*Z!`~sySFptFPm&5&2 zaE)`V6lcz>i^Liqq^>3Mo>f#4?@fqwor9I+%2%q@tFsT z2}oy3{Tyyt{F*5T!qi6N*SV8wB)Id}6?vYRt;M=WQIy&wK1Cpe=T~AbbRHjBlr*rz zY?QE3yripsA6YD|wlfz2VO*cu{0xYY9qFL_1Hqpm&Flt z9{*N?WP7W2L-Mvt=LPcz=?~Lj)CJZ_9y?XKyR8Q|?WgjmbfBz2&HnNb%K5%g!5N2BbW8I|;iGFKgQFD|6 zUmRC$Ik=!!?Lm|Ng~fe`P~()&g5{OfP4d`owN^cU#-qDZ{kR=>N5tU{)=)gD_elNt zi2N!e}Mm@}lmMoa#iZ+;;@rMU6|Z%~b#LfwLnTX$a8`IXY_30(^Z zy?9)3nr6B1cQh@d$7CPg8U}Z!{OdTHW7^?7e0c6`O#<9KEb~1*jTl{a#|pJ_4spkx z#OQ05k*wMJ?6l#o&%T;vLfz_(*dH>*Aj~~4!gGQWq-y*dgi*pT%Xr!)iS4l7)6!eC zWx!xV1K1qkc`l3P6B%C&s|h9AME&l3zz>(-Xx$x>zHBwzb_aFl+^n%ioLC1N0Kw>M ztSA@#f*iUv$Ms*neVI^v7jjdiOx-H65Wu^c6RBkNij^XxHOC?_tM8J`+kQdI{@Xf!v2SBb9M>`Q9E!NB=J-Ammhoi<6hVg(lO5!dwuif;1 z-62Bxgyvb0;g9D0)7IKAMsp)aDkCgcU!jG(r3AK93`>qQUk#*sxNu11Bu>rZZ(Y~4 zw@+|ww1>-$gWxQ*i-lGQJs}BaJp%$smbXH!p4po|b+V7!WCe1s8VB)<=gla^_~Ok2 zQbFQ|=_0PrnB!pq9kUl0eDDURJ&m;OGpQq3F8R5pqhQKY*Ma!oRD0EYP7yu=is+O1 zYd7*9`oK^UmDkzN_xu@!JcWFEHH`-&jg}sIwDX|h&#=Eed?JJ{!|7}18^*UzgpG22 zu4+%Di&47@h3uyKAgxhVv@#}dqxUC{=x#Bp7u#oba=!Cvz7C%?oaU8VI2_;#+k@|6R{ULX3jj4~EX_46cxflzkT7r1*2_-ev4d4|WeT2PHr zxi6U_*6*rT_`4#~Z610uipQXLQNcAZ{_qo`ZFvjiL!VM{-V8_u_@xPBwtYZ4>Z7p` zv6EiWgz|06%z+)!ytUGW(ft5T4)Y}Wy9WFlLpVSi1!#g@NASB^K~yiOM>jBcyE%|Q z7y^8WJuzdl7nbWruV5y`Nz%QDkJuqNNR50&^%Q}w4msZyf5kA{kS8S80(F$!79eu` z==W)DGp&T~;CRHWlKBn(rHJAD;j`+3sfdMcV@jDHv?}a!@WCa7eqf;_-h}9u_}fBW zZg4XUj`LBF5W*#l5Ijo#JYxD-q_J(E$g^4-PE*iED>`^hG6$*ZE8`z-+x1T$-b0cd z-IRImkW~Q2`M?~pd(@Uw^hJ8i#cxqkvLaE({hqBPut-ytzau$ywzZ1%EHyYq_1!vh zgFXQDYesSIZbQBv0+P7}%zE8i2n8|rcEn_-KRRtq3}1;TnZ^lx`4~>uSFrO#UKhje z;sOXCD%lUIk5dC18&+p+%=DqTMOAh#*V}K)AK1J@l`G!QMGC>^V8+XRuu|?0SPb|F zC=TogqU;$US3!pYu<9iGX^?#BhkvBk4rY;Ez%D~j#NP2FN>{-afr7hmxK(SAx4{#y z>9k=p4F18>)}-f&jqG)-r|KGXyNxhDMCJlgYZ|7taC6y^V6_t8*v%gSlz#T^Snk@F zr2>{~@#P(jz|3M1hJM&z3cpEzhcySE*3Jsf$zZbH21fJpjl4(YsLxPd7IKOL2Y})# z0yFOTN9K%2nF@MzrxN4x{RWfena96^Q_ z%UD0zE$v3iJnR$~ypN284!T<^#Z(tS&=dSI^#~>1nL`mUXN_P-OGs8^_!@<{Ka1PA zMxZ;Q$_N@gBfs{RT>EazS}A)di`q^9^bvD5V^Q5RxVdQs=m2U{J{BBLa~&+DLp~D* z84X_MQS5!2R7Xy@;5*IR3guN*hTNxoyNqW;U%jQWSdd&~y%^&g)AP(pbMJ`=OK+!?K#;f)dcSGZ%WYh3XwarH^PXcwfh?ot`E{Q{{82g)`M zG7ubi^nQmp^U9|jF*Pe)xM`D&M6#IZg54Q1Nxdbbg6A&Kq^20UzJNv!B!|w2RzpkZ zIe(?jKw2XK&CKT(zNn?O&k3Zm9SXtQ?D-^Cw`<4mhYKeY3MxZ(CGhGS;e1O1@ zF~uihq-T?$Wq~%{^WazJ{Pw6eXhD2$L%sa0dGK-fvRgqua^8=UJ-4&qS26W!A^43v z@?J9U4Fu=0Ms*{g&BnsvoKh1ui1Ws#^aIsZ7VHo2zN~HyeSvpu;|6bk@(uLZXfSYI z5n(=!ZPPqU3wR6Pk}r87=sn8T{xoTAp@iQygDSqbpqh5bLizX^2Xmsmvb0GF~@X8lY6zBwOS> zOMzL+c}F^|w?|hSI1~ALMPOKf=FYHDXt{Rqz3CR-qsxeJpfv9f`o6H5(D5L?|7Wjj zvT-b5FWPd5YTVaLR)_#(ipk9u_CMm=5nO%mMij9rX{aM!&-m3*15-k~88djViT17B z7$DXX!A)%8>+0Df?qhRvlX&;o2S+Q?UZd}?4nb0pm$6UmI>;2nfN&@Es$3kEEBSk9 z9`X%+gr3N=2vK7Q7rN+6=@(N@V_oH2Z_;E{yvPPUSluah;Q~H6a$*Uhi31}&8NEKw zIgYxaTC>T`A(6)(va$f7sUN<GJ3$+$=ic}u0V(A)Ah889~pyq*h8QL(r&n2j2u z{^)x|DmQPIaU`6`-1|zuPm0%MT0Kc_-hOCB@=FpF7(q5(K5^CI1?I}e2eouD&pIFf zHeSlHC&GXh-bA^BF@idTd=K>CMhfH`-*bugYT!?Yiwub3&ad*917=_ypEY4jhE$a8 zkFoY0;;}yVTSKb`%^3CyaFHJsa?{bQKj#dyqr2{JT?h&Ey1LHh14)f_5&qzw756+AK+T z#g*o!Dw>+FIpywy+4Q-^5&0~uik9!B#B06Lun;EgIHogJEF>n};4Lc|JbxY9r!)BW zAtdB+tsoNBZ*xYFztf>04~lwF99V|@c;z!Ck(+)t29lO`a1nPGABlu2-WkTZV0$SQL1LK#tXvA{>(JGoXu#y|bf||`?Ao7Zk)FQj#2aRzxryc& zQ3xF~(ARzO8sb!WXn}C;vu+=l3ok)FUZ>a2{N7fEdl)M_J|rlBa0?<6 z!b_KK^P}B8{JkScSk#R`>=WkV9`4s5N?NyT@%Akg@>t($GK9i0p*`~g^RZE=mFKsT zz*fN;+3#y81N2^ZmQ#X2zcP7jXOhuzWH<3{mb};#4=z;EEa6W(P6nmwL3;rPJWv_4 z_QxJUdiq9q$Iw*Su;5aNmrbQh%aJ1;jYAvBhB;iun8r8##V!2C&-bOe?G)>n))P$o zz)x;z_A^ZPB#k?c25IxK2P82m3^UAbJFEtAQCMahR}>f8`NK+24p;S18vFINv~Xpk zwV}N;qao91rTWyiyLx0BB?4uP@g=Ynh6h5u^{DQDAU+jVUE1v8%;?3DT`*vPlHS{V zd})ooM|WQGU`X}6*8Z@XUbXqLIxm{;Z%<7&m?=}zublD|u!PQ{WNa1V$(3#z7jv{DPZG*gR$o*(CnUnJM{fMyaNQxKRbU7;enpZC5I?$CU9voU95nr^1MgZRyG~OUrsj;3l(C(V8muMAC zIiK^%FdY3vng|+>A-W=Jz!AnuT|r3F^_3{na>jjz)Gw%hmjP@3+BNo@js{^ zUs@>XHgpCp4dqJhL;-_B<_9Y@FB5FJaq0u2VV4hZZ3i5eYNuq6w1XKJ>J?Kx&>-__ zRxd+}XTg@xPi^322a!h-$Xu&mekC*s%sB&E!tgT%GE4Dv^5W;7g5iFp^~;QdYb-e# z8p1OeGi(_PRLSqrf8f(&{U|Oyp5S!iZ+*v#10)D@MHikC^P(h41K@5q;W@K~$hLtY zj|C^=m)7n47>|#?pAcs09yUFo?MO2VHOa6xuu(nQ*AZUx`q z+-r6hWlDYSfEQk+tBN0N2qp^LZ2cR8`{tld9r=>$2RC#eo^XQfO77`ZDyME+E+ z{GC`1fZi~fIwx(kvCqb5c3+gRo|XEACP&ETogVp%4$T_*Das<_x+f8J{mlE;xJRKN zb!t1i$as9dPNA8@k-_{n!* z_os=bPxUQok4JO<4S}6W?R<&mG`~i%KM*uIP@C=l6fq-;;0-_B7})^#K(bmpSK;d| z=9{lA#6$j=FfUu}hsH1sCAt|%abOg|Js~t~mtFm=J-1aBzfv&UAcnt?ea^uNc+YsN zm13N6dPAyas2#s0>JhKJP}MFro9Y)S`SkpDnufuvE)vk&_4!mjOto(;R&m211j(ds zbl-#0$&wQrL<02yeQDaw_6gfv=5N=hYF`$ii*7^``=oqpT@K~PEm2N4BHA~lx(d1) zRJK@(@MbmwAYV{rJuyKs5=2B2Jwvz2#{Jo4N6d@2gr}=vKB?s3*HK@hW5TPE!;bwu zr!(EcWhFtt9c$_g7PJG}A|UN`X8bxgWum8It7p*zY=7S=E4kSDvT67tfAvWAy}N3lA3F5uwQu(4XnG z1n-M&KxpP*mhMLB0KMb1a)vD9DR&_Z?`3j2gy3*hxoOTX%CU8X49v9k`if^cvW?hwRmlU!KHubN5__^>Tu7ICvvMw0ueKQ%+}!U%fPv#zi->F0f6x=`*+j-y$1S3-(rZ1wQ9 z^vd2i%Eo0m1NKoH!QNK>0D7*S=u!AFT5EsT>i6{4Dakg={~~yO(_Yc6o$RngKBCOD zOlebx8Pp&svVgrt28M++=%LE%`YIDr+oZFsf?l`;r3X1IG220Wvynh}ZrUib@M#%w zG~}YGcF@kvfEBX24kqR#4JHBomV+@YmK5?7Q$v6zXT%t4SpoabAY&Wj2({7xKCoK> zSEb;DUMytoUe}2zsPy0!Tar{W3d~%lx2)=42|KAs3Iz{Fw$vIT4c-|oO@Z=bT!z=K z1gqur-pgoS+1(SD1@nNOOkTd#3D(dRhQu=8y@;Ubw?L_!>6Z}#VQc0{M@@b~)I>lg zsV?hQ^*q3lxhb2`yBP%IB3|7VO*BL!y>GA_Aw_zDcv0~Xc4sb`>)?aecSz(IVL!ea z@~Tq%4T^QjJ~@hwcC7KD8fbR`77BOYD4baB-*4o($DqLBO-=rdkI)*qMOiDfec>== zUMn<^c8CSJ`(8doCz~a0kQLk}tfmIbp3MbIP!|T7ECpX%zxnXtL~$ivbwS&a31#g{ z5&n@6A*Sp4Jig1g$1-$wRpnlQii_G^f?B|AZ7y$)cq-ndBXUxQ3Ee~owx0w3&L0Ut zUW|XY#7!nV9kIXE><4xWGFfl)^ZGk=1NQ?oH59=;IDKzsN#|Eo$l67(@Vh{}jWokr z1o6NTbOSlsg9lL+U&ivBAg(D9SQ2l`Ebfc7N0xZJmskC~4NGziEg3xwA5s)1GU^(f z51ECp21WJ#sYpnF>=uke*VN1+Ht|3k?udeMcP1K#V4!ES_Zri5+}UdSuvac@K#~0Uhp<% zX6ThtsIg|;g7gP$SLFS*v``qyFYneDZH(;()MX8k__jTUC(s)XDA|D+wKL*OrKvXg z#6rHgisZN>ZH!x;JltgLrpmuIy8gm1%)_3)M-P{+)VFK;;0EEk8COM+i2tk&zWM~l(s=ll_-7M@GF2+xr5nc0OcT+u zLO5UY5h<^>j!5TimY#Q4!F^lZ$>+A`$QI#8NLDsJQjKV0K2~_--3ZJ zA7F>$w1*p6(M;Jc>h9iqyk$?}nr0wI;9Wc`NV^fSx9RjosMnRJ##7c zuKif`Aut}Wv?+r+o9c5wQvT<$bKHM0O*EY%>de`w2 z#^v0^CBMQIu!4jljrTD>`c}o}0{~^E$1qd#+lqG3_wI&R?pjd1Qyom*hQS0{`{VK=|swzpiK}}CwFh*E1(A7l;Un&iOewl)tYlyN8bF7n^U^G_8FTP zV}@K(M=fR9mV}UmPC1~`s$B3$Ph(a18l`~yZMl5WD2K1z(V>THOe)qPRpAN#g!1ovqPfx$!f1adR+73^pz_72*>uVQk9)Zfy7JZU7R`phT~nH z0P*ckA$Mucbcapu0Jhuo3CHLm4&l*D*08{-Xzu4l>6vTe*^<#mii6k0phx1`2c-`{ zm`jedtaT$JgtyiQ9doabeW$2NCqDlvFi{U~6F&KflxP;eG*@sKG2@g8?w!M$@K`m& z_B@D$8Kr=TS?}4;_A_YD<}U8#^ZicYj^|bc`yFQ+lz-|T_c&1X70NE0>Fizbxn`qO z%a1x+)bTmzQ2Rl*Y052*QG=;_gQ`1``iZJrk$ejPiU{}<<5Bx-T4KTqfX_HRQikoD zvT12$U5_RGNEek{TQo<8*-b%m$1_9;T=Ke(g*z5iW!v|zT3wWM)n)V0n=LT~xnaHe z|1g5!=1YTIuvV89Sfko(z^27czF#!_o^SM`x>m$fELceCRz_~Ws^44MniI$?{oF4+ z;dy41XT&{)eR&J(H00}_J14rC2p8@7lI+f@f*Mc?K$-uxdU*r8xz{l+;J2GCqFOU~ zly)h2IOaJMH^)>Q+oM1LVtv()I1sQfw80hGXH}P|L4n@{r~@%pz+O6?kKt`*Yg{Ks zA9#y%%N>AVxJ|`9(t;0xxlJG&)28l%d9~*X4C+plXiLIUTWD>LJMyEQ#q>Jxph2_duF_ta>&|2 z!L;cw7Bqs0Ul;$e!4Tb{R^RPjqz` zecvvYfW2L6zn4VFw)_T}BY^7A-X%LeSZ~$zbVS|BJ|goQtP?C4_t7q}I45k%IB&`? z*x-}d?htgpPXPyJFVe3tw>M5_zCSv-W4D{$q}szJK z!PsJfAl-)+F?dKukgN5|7$8J??s)43RduDM@lgcwB@2wgoAE}pQ&|CCBKVR7QKi34ROh^>4nvxzqG7H4!;ksd;vgtP7Dbsq9Z_ zI7DBgY8FIbw1??`ghs9vhhBkd2&q%)JencID(4EUt-4f!dF4)frYxUY_@6bqP;@Viw>MUMmsmrcM*^&poCv0^Ox#H(!3 z(|J+!z>*&ytSs|*-2+_aqSg zVI$=Ij*RsEm-{hS4eRY(NX?L^vRe#k(DuDa9XhF>p*yN~)7ixEU{g(q--n&ych=OA z!mG$OctV76FN|7_s58|8$zB%8O<9hS93n>Q!C zfa6ERHS#2|a1hY`CSKtqe++1K6C(B2`#}W?9DAg_M*sCBoYccJQrVR@`Z##CL9=Cf z!>HD8np7?zqGp66oRQ&igCa?JMV~hvq3UAW?&coTFMBN4n_t0~=DP^-a4y64kgS@);7W$yR1*0bVUh?zzqSZwX*J8X za@CEs^5C^5$w%vVk#9FL-^H6`6pcQOBPW*EMb;W%mQ+_wXop@O;642+uC<#`=yn^! za5y>hJ3(`#@=%Kcmr7TY96WBfZ^B*szLkJy-PtC~4-_jbdNgyInA zs%?AmkDKtw1nHOOb6q2c<}oYpXN9C0wr97b*Ee*f%n~8%8=HkEXjnhnEo%o`{#>)0 zF`C>@!?fX7uZDiXW0xJhBgWg0M%#NVSM@Zc<~P0y0on{b3;Ts#d~3(TZ)i#J8N)IZ zZ2kK!nVr4+1B$|v`x5I{Z^&=U7{Y`5E$MyaYkN&)aWb1qG6=xZLe@X#l5(KNbJz zeWL^H9>x;!H4T$&j*bz1yN0`8Xo7?74Cq3r4&blF>pS~aWanPHM{v@q)UIENJ-x8e z**vzOV8obJTJU%MTCg~f)_D8tvA7y!Ex|Z;U!POvZ$YXK$oc#rK=4Q4@J3evlbjpq zK^-8efo+qdu}xmEZ&2_l`6oX5~9Ot z7DAwh*j7id2P2${hv!`z{QQHcuFzb3&hbEO6XaDb-r5qf-(_s`gS3Ee;km(|30PKu z4}@q=rU%sa`xM>nx5h5?@v{&={~O4w3RbUmbpNx6hX)D&ce2-yvQi);#QlQ|(Q9Gs zJ9!!;oh!sR3B(7A=uhumUjCQlh<5m3V2CJuzJG|yC0XME?xH*Li~IMd9^fGODCAc} z-Z{Cf0L(o)Bx!iw^tu)l-6MChFVXnlS4T1;H>w`O7C+Hfj|wMEx4~?q{`hO`DBj^> zx#22&z(NiUY`GS_M_JP1-F2pO_D=BuuHN5>F@mij=F^wCY>&Iir_%( z{Dp24ufT}vox;_60VgHnT-abaSukP(EzMHeN4@K$d~*?#Atn9@@t|~yg7W-`^kV5O zu|ESFX+ACwg_i3vjEGY|yPOv#);VSLfc{eT^dhq*dlc+Z83Y>trPtypr>K-dI%=Um zmc2XeeoKC`I%l(K&#Jsv_5AVvT9^~Ztq77G;=M)m=y*d%u|a25?M`vWPu@db`7OaP z)8_A^ zO z`+fDoNg<}5+Gm;$bC_In$HUvneEVuXx0JSLXIFfE$}8Tprs!(wyOKe{qRnasM}g`8ZB_#kqvkNBimbs}b4n=um?U1pNUgs)Q_I zg^9}6eb2u=4(dVExeVCtD$TD~<-e*navE|PHY1lemp3DI^4!103wwvlyiZ?+`X9wQ z7=B&6gj+VV>13a<&KWf8iq*aS#;nIZ6DLhZn7B!WOI%F!hX{@k`wSHL>YmIDdmgtH zPjY>oKJ)m#Bifgs=>O8m`Ls_p=FkVYtnz=+e8q^Aln?B104xWR$tW-AX@-qozZ*w_MZH`72>yxDkk`pRlPvLZd|Te*hI>wLR0aS#Pu6ud7UOIHz10&ip#mzYM!B?`Aw? zLp*87!(;zy&b)b)Nk0kr~U5PY4l+Y z-Wh;H!8hv7#7#qIP%>(`y>GH>xl~E5_OsS9-Kkm)TZr%Zc&Rt9y%a1#Va~dr9Zx}@ zV#@e<>^aRJF#_(Pk9b`0I>zq&{7A|`6y~E(BEG{3`&F0Fwuw;dTQfn7x#K=fZRMuW z*ylF#Cq3Od%$d98o0?+ASy53@2K|_v?T;0llm5Cru7b`)mVx|ZC4fbdyeSgxS*jW( zp=W`ly;A7Tj1W42RjlM|x{&T)*5I)fU+ zXjM&og5T@OyQjkSD-WvDWTTjLquf_YU#gTOiEMG_#{3ykEkX?5Dd2|CsLJ7B zE(oxAFKeGu{I$lPDb*Nvp1!oP%26TXcGSA5`@Twc)SD212~7!4yOqktzmEn8Scc)| zvxxSDtu~2g2wSr?Z!)hoPq{^WtVk%<9nvki^Sjx9bz4l9 z6$pnU3W&$LVVv4|eyFu2uCim!sYWL*Qxte}SQ1AwF)`$D_%{FjA5Qb@u6)B(u5yEr z)pVVwrN|oN#xqNd80-BF*Ij7)S5#+0h7y&J)8)Djlsf z%1Czj{#AyP90Ix>N_|oMrqM6 z7t08U3yw^%XGTBovK?P291dB~ms}r~8+CuR(Qvkw7$PrDEYbSRfQd&fN15C zh{#BMguG*C-8`*{E5qehcX0*zJ%qWTkbNgdpwaPg>QMUD;ZUL*>LKil;ZIcJ8^_|M z=yBQm&mv?S`IE9526$sz!lD@ly^=Q6%4SC=9C*(gcInEW2#}s1JDBzPXMk#kSm~~Q zi9XISI1xDy!5)PL zuekU=y)#syRyD<0_WMM38GA>Nz2&G*h%g-=)v|-R#3CDyg}Obm#sTqYr{YVIWrem~ zP7brA?XQd3%ykiyjfs_%vb_$+GoKyVsKt1S#T8Dki6MwTd~ZA3~K4&{5j$LV}#NQm<^`$A|^Hi^p$dc35hYSF!@gU>Ao+1 z=mE{6`K3BUOpUVge-M@qS0d`|`n&ZAlLz?q`$sicJN~J9(nV~*;+YMH`TLPNfBS4F zY*Vrkd`$LSC-lU$T9`}$wtilx`X;u*B#F9w2ih9tgwrMSL(_!IF-#+gD+CYJ7JV!d;Nd|KSn zDp~y!*64r|BLy?6>$28Ce)=3ql9cnsGeq3MJJh>Pdf)hqfzUxYcSZqNo=M75?g_{c zAvatqR7H{uwS()3(FbVW$QV?E#+;d{ub$m=j8^VyT|{% zq&mzl$Gd7K^D%CV=gJQE20>YQv+M4bbbi5;Yl=bdMrEe~dn7JbuVXqjIXRw3Hn#eb zT&I*Gye}N-k&9vL&$Coo!PT2)JQ}D>rqkFC-+NyupYIk6@)&=bYfM+$TA)DQ|L+HX@*CnMdwlZ>)2Rl25 zt0M11Z~AiMA0Ctpm>~wbv z?h^E-2V09qC37;e63{52rTD3*Cd+Ts(=3we0{EIHE^(ZBB4eG9WN>1zBF=TJ9w0?S9ZZ~emS zrF_L0czQxSzVFa?Tdtb$U1`9di?g;L=R(tz zgL5?0E~~Hg3=Y?!;~;BoAL*7cH2Dz@H^ zqo@_x=hR^}o~stdZvMf^XnT+>7@31>N4och6($}}j-=ES)uW5G3ywD{ACH!cAxFk(XXmLoq90)HGA8 zlH0F#R21qs;+NCO%e{P>aL1;Bh#kQ*_$jQ-{_w_XGB@C5?9Ik-#j?SwT8G{4;fv)= zh4-zN5WDAQ#Rq++Rp-r|Ozq_FEVZ*PYMGwr!{Z;1zh_^+O|_#VJl&rP-j#N$4T5zxA9=-mY=<~G>k`UnV?fCtrLIr8TWmwOVM@Jc3bzIu(lQLL26|2}2O;J}`XT@xeBrd_(y zomoa5N1AXePsEBX%(l{I_VgFiL~)%q6iso}KM#1=`!iiJbl z-jY;gLKyd*cl@Tw{LLm4J>MzpZi%5iPc6e_;G$}rnBq6pwXcS{Bp;r_$6dH9b+a*^ zwJ*RJ+MlZrc5ltLF&)UuS zVFognDlzSKw@8}-n~8>-r&yTe4<3THdXB2KLg1RFbNsb0wZk`Grbiu&-H4M{s0Q-S zO2$&F+x@k`K~n$+{;Qnnl}r1L(~Tw}yt~V-B5wn?j&G@#RyEwiHp&CxcSYjHTCo@x ze!?vLK_dST05Cw$zuz;wS$6ow%;#H1Z>;@%%j<8i>U7ozvtO=HVe}Zx|T`SW`x{_kXtyB0Wazey3zkO zM0+ECeU>$JhWASD)udO)UMh@ykiB7I#MZGFfX%b5?U;-@wFPgiB~gqjR*tc{Fjg7X z@~8!jm>LTU=E2hK!Xpn%UA%P4je^31wN7Oh`rcD=FN z-}mml(4*(LgoM8-9d5aM)jD%?crEk->o`kQ zDlgJggD0?5wt{tf=E*0YF?X^CE0-->X}T5l%!L^b6s|YVU99*<*;n!TyoHPAC?m`c zW9}U{_Sv^zUhs5O%Kpdp{s9U)-hWcdfDMSF7QXnUWFU^+HuCq?wLF^+lJ)oCf?;HAJxF@b2A} z^2*$t9E#ed?`dNnFRh4I-mhq_{9N8axR#wuDo&PEmY;_5om9^kVVAGIh>1fM?y?HE zx+RJZcLx`pwvP|07^~z~lzt#e?OIaNl5AND->D|G_N9=PzzTUnp(Elc@22R&uw{-# zNeU%;o2l6~;@loM*Jb6W%6C`F)I2OrTDsgXfT^*isKy4%SKVc9RU#&sUl*HCn-kbV zcI$Fxj2T^DuybJI| znZL*!Ai_%%U-qBAP zsobwj)MhL5wIz;~$`g(=N;GVw=F}5-oT0%o8#Q=ct$|+OXrZ>yTIkJ<%#iE2PrX6& z=|003GK}YA1u@c?sErL-$QNpl=u3+UtmMUzllQ<3_TfTgwR{QX54Ey48_Y7 zhag;Wx}2D#T+SSqp>PKn?r>u^!c?TW^hC9T3w#e1V@FtP!FREq4%+FibRNaZX!F=G z!TJ7NOhHb?6|F=Wk*+#Q9V5l4<4SQgGn%{ZP##dG8k1c!lv&0s*HR@$Wo{nH5_lSG z$TJ*uoy}M~-rq6MdAnn@^M1!<*ullTkUhbpt5bm2s$o@GnBGufA9c*P!@7k)+#I*YDqIy00+wS{5ZpmJ*)wTXNx zc}csZRwWCQ_2I`56$*}*zmK_b+zblNOLTmpnE(Ldk<`Xl1M`rWjv_oRhoXwvsH0a*M^Tp5veZKE z;Q8F)(aF&rqi>6TDO!{BQsw-uV&-lD2Cx<8;#I2_o2}U1i=u@W%@4FD6(262H+T87 zCy#ypRmBFu3-f227d7c-UwyAf31=apAz>^uG$bcHDMT`-2AC6?6q*nYZ#OPMvM4Da zL17_0yCtJq2RTrH+{p`KU8MC`;t~Uu%NW>^xz2x{n&z?i$Jz>hetabxFMMcz{yo+# z>)BAjM9I{0^O3;3-WR-#q(pkz*BpKxcj;cS;PGO?lcTE?&DH2aXH;S6Ot-4(+zTHm zCQNh1#i`zoQLe-gwWehBZoz4{cHZpSbHtbwd(}@vz8UnOuU%+}66RKtl9L=x#c(Of$w@gbcT%z%%_#b* zsFgJey=oz?Ooww;H_7ErPB5reLR?rQBQB~|UC;5|5cnyvVzK6<^Y%l}_bN?P@G~~? zPz}z}kgdt}n$+uEk6XT++$c!C%BE%$7T7&eyN*9_+xk}~K0D>BPtDKGGo!zsF}3X8 z7kAEEHTA0xSnS{K_=C1?PsTaSL3+2o@eI?sRbo(Ga^GP&{FEF=S(&UysY~oHIpqG5gB*eVrATrnlLsaw z+3+}h&auw5PUjGAKlRYn?<>ykuQ&?_>B14QyToWSY)U=U=Ov#n#-VuKq!orOa?;EQ zN2040X4LBcIICtpKIli!buzB44gwQZBb{FJWvF7F=U#c|s z9${ep10#Hmc_!B(bbJ```n-$UMH|GY@!8za$xs}su*XqKyc)07r#h^TQcta?rRyn< zR+P=Mm3C@7t)ZvVJl^GYDe+94 zq|n8bi}9}6Q*H=Sdx=7FTySx8%tLNRh}-3KSZ7Au28DVK+b2fKva+r|*;dlZB_PSU z_Xl0kHN^$L$`#?NtJTJ=+d=7|HFIUUdMY<+IWC`TpfXyyQyb~ZcTH8MD-USXwHdA= zrBJJBkW+yNpz1Ijgqcx=?io&UsxDUug~jt|HQEsu;t5MpQ?(R5#Yl0aIcvMp-6>%y zVeOPQyt$gKWjb0oTe~}kWQKL7&aAs4eI_jj6K;;f=kPf@xo!;ch55qr6wL7V4W|eX=ppG1f6DWO~T-u(`@SK3`p+&2c{L zUJ~}Gx;E^kuv^3oD?}uul;&h~NU95ff0u-)&PkXVFzRsjBi=fXMb*=MC+ zKEkJmsyewspnAu##@RB1rn{6O7@5)o6>`YzQJRyR=ZlhVs?!VUN?#R%#IQ0vWtIPY zQMhH0!>JmiIaQr0F0Qk1{0y|4DH_RU9%bX%grjDPLPyQP=D79LrHj zcZpp#vA^V!k3V$lvD_(d<#PA(U3i}ldT!J(>cPFVT(YhXr^ek5a>wv^hsWK--JG{} zbaZ#&-5tH%{rEt~2!4lSjC&%VyEKE=fwj$mO5T7EYIcdUu@4y%SUQQR$UxZ zvPxZ6`K&)rkAmH9>kC((*EcKA)5}=8^6SY_xicu&MZpIOq(v=1kR_ifpO+h=Vm~*v zlx;Y7&O~`j{$9RBmVeoEVAu@A#B=b6{mOG-I4`V3J_r`if%O%ltoP+P0nye>pNBus zHfy4-biJzE$Kt}R<5%LugFJa9kHyIbGAxC$C~U5bG4sCvUXS|uk4toQiP*2@8?Zc=V?Zc1)yZmrymu^Dq}&P$q?JTGNl>YQ3j zGm10LWh4c%1~LUQWrir$um-Bq}B+2R@R=igrF)nQd2M6 zT2|itV&lv)k8j_$t>e!58~0aSWXf}o=5OtL`ZNZu#=(1S%eB^YYXK zX56KCr98OSh>I{Ff5E}O50%?+LJ z+U`}i$8HlFcM+k~HR^_VPx-09#+^rO$^XCBz63ssD%<F#toojoBT zgg~H6mOxm8LfB(u34%h9um=o?5RhGnAVv}yL_my)h>5bu5Jdz=D~;FCdS zLrepdRJp(k2jW_y#wx?UGhfTX+*ibdlB{MBUH(+*Y-|%1ondh`t*B5u>}bj>{k_{ zmlZg`Y&jm;|KciPHEY`k*(M!)H>%0ps9WcB*eJm!fWeg6*xyOI*c?nCym?Ix-riK> za7lrf*)jDopT^vXVFMrl1605kaImR-hL9nqYRW-5ET_tCOWwtXR%zuu#^jLfJsJ zNxE@!YkqUHSxq_4!g01NGcj~!Tam5ahNlFmlQB>=s=Ybccz98_4o)5lGnCJo4jybc z##x^)dUW!})(rZyjl6Tq2Pd#1+ZQlIxQ@jiN}2YM-0*ft05G6*UL3q zUw(OO&C897a{G}3BS!3e@U6pnhn9TO+WN_oLwSu>Ofdz`jE*yJfTI)(1qKv^W2;wMv4cSh=WVmZ*F{3DCmYd!OzCg+ zob`Kjy*pnj#pHTgUx$C+=y;u9l^IYQhAVkAjbZ-sPG)cej*E|Zg zg&dm#D7f3PdF6K>>_*$^CeGSA9e&$(v+V%oZEHc#+y3t2-Uiz!{50WQH(4*S zp*+ePET_IO^s+eXuh)XK;$zUbi38*01kNl*837l=+jP}2Zo1KN)GqPBWE2Fh$Rrqx zoKZ;ac!?{dwe^}Bb(S>#{8#aJ;zh)jYPhu{Z?-e3 zO=Z%g{_j2Y`thbY^EU2jnzLa2o~EY2!9|N-rPnN(|MNGPWnZerEKBX&^}>liv{f^u z4bvtq0pa&O1wDfWbh~@Z9KHXTxe^*Phf8heZB*w`WBU)I2HhGD8dbi}BQhrv$s7yU zWCl&TM(i&%8%NM)TmMe^ezG@UuLPA`6<;M(iB*~^ZKbYCUuCE=R!LQ+N^`yahTU{` zHqKpXffZX1yjrv6z=16{pjo+ojRA*3Kx-5r+Oq<r_s31am;=+hFCfSkj>LU zdx!e>L8t!R6W|Uiavb3H!iN_~q5heWEpO$t zXf$Z)YD1%Vl-F=*>Q`XKYJ|u}q_;1g!;1QFk)_Upxk|Nh+F2@+9^@)at$hVi>YbIA zbSHh-Y&v_q?GR$9vdJtV2nJrT#`RCc{knLUUk>TFpRqA!zS}Psa?1ff7Hl(}8mHE&OGgGpsy0>EQ|zhf zsqLxLx`7+UQ;C{HZL%f9nqfP*jwfG z1|%=W5IJQzKotJ6e^Hn6gj>X6b{eJt6x3uicPPzQa-xR0JER$bU1q9rTnyq@v(7S9PbnSV!Xzq_3HBIZcH~J5BnXdfph^QGkw%ptG zr|GA~K1ci>i>V@J1p6TOAYUXrB#zXK(oP0b;8bb`J(Zck&fsS7v&2WV({$yAd0-w~ zL@lKkGE33>t>PB*Rs2F>kys^GYUXQ~>Z)<{*su+3gIlRBbS?7&i=!sb3v$MDx;n!i zum|p@cGIsiud@5Nef+D!Zr$sKx2QMhW6Zm3qj8OR7|j8VZYG$eE(1~G-|(X>c(vzkqs zJ#ZiMI`cCB2Ti@ksi7GbjR9>mZDVa>v^I%OV0~h;)~)XW^XOc*E06unnfgMyfbB01 z(#ra=c(hVu>CtR4Hq9Ojfh68U}TJ1Df9va zLUwHjvTM}@eM0qMY{qm~;IGqYWd9MFg=v0+1FXP_v_3);sh9L#eU83RGh8!FKTaH{ znW3rHFVk<)n>7G+0*y4SL2HbJHcDb7Hd15NT6NKeXrmv*BhBk(+-#DNDEc(<+IXE` zpKM4rx=p!ATINuhOeWi1(@on=*Il1y$TMb|9sn|wDVdfTIXD9Qi2XGK^o52(qih-p zM!*r&D7uI#Lhol3dOxGZ(P$Ko(v3BYH5Qr5U>WtOX1ZazvD8#4EHo@Mt^v=8E43?i zYxHXjYmCo}HQE~84#N)PZtZT}tASL z7^u3ZwQBlfXfytGW-Ci3!vIs*q>3f>9eqJA@R$t?fqV37J|7oPzc)U z)-&i;Avt_8*j8pDd;hxc@eRFtZG3Fsuf6-NFCIUud|dJRklW z;~RSS-thP#)@7Vu3MM!l`xA#ny}0r1#V}MckhL1pEm*jw2)R2lbHsa{8N(%z9SK^2QfR z#vGW0e{IpQg5iad;(c_NL&N*^WGI^LJ@lbN!~5rx%^{!@?tc=&{Zq>sfoA~CLZIfi ztAGmpx=0a#V;C!j^%Q|hV*fo1M<~=d$}xOIZ4vbFhl>P2Z2WpnmTU_J&YnGM+ht`w zS8k_J8{t&t1>BVb%4x>SZb!q@14hUxmIx~_>X1FON?5IxRvB08nyeAprWlvAF=Abu z(+0#?i`K|9W_z4;`PxN{(+|%1un{gbtL|iT@O@|cR6IGJLip+45c@iL)SU!8UCuRS zTVf%#XUp#0lr(5{KUlD4-~(%hmi-f>>Hb*;3)ifm$C$rqZ2E?N=|EC4-CEBk`}fCs zdF2XpTag_Aks8m6z$u)JhsdbqNas&tZvY1a!xJP~4s4O!i5>s(l^ETYm{UDr;Z{?pZ7+t|ZLl9FDy`1wX9WB-2m*~aUT{mG@y zJ4(QV%u(hLLAR`s3u)0|W71-Q-${95bmlZ1E43J5Oj?uW2jew=Q_K&Z%vc>TGs*GR zOsCC}9Aj}tiFCYH18FKgk*eV4CMP;8qB5n+SFWMQA|i;4w9r5#YVsmEh?zZn96dRK zrRGNRYCV8Ro&b^){JdWUB>!5hf#LFh<}n$tdUr1EtpseT>Kq1{WeZ zv-W~jl=RCfooJxh2qSGXOEfT*S-@22)R$@4sXT3$Fv9H`PFxN?b)@R$#=G&K>HbCo z0W=YYuoH%`qfan}KXH|DlW~u+-uRZ0^&`daHzY}krbKhDAy2B-tv2t`ziikq?K2s0 zs!$Mno8w3SsKI!|JG{-qtXC$VQA%O`NaZjTlvBrHC0uku`6JqXYb30Lr{`GbV_z0wD|_wzS<0~zR8 zCS!?76T8ut(Rpd3-Qs9nTy$PS96dTafCR%8T%1D1f2hEJl5ExvnIu{5MC7X$U3=*U zHDVbc5-$J(A&IA!r64c}OUNIAB(ch+_jo0OPKhvv9##f=ue}}Uz46>b8@oU9_$SeZ z3o9l}?45V+wZa`^MsMv=_C$;QPs=8b@7eRiJ%!KHd(+3I4_R5AHa>muYHG`FzrSd} zxC*1NV8_&P>vFozlsD{+i9vfu4k@cNEPTFf{KhV+v->|)7lY~eIa@#{aT0kS&*BWG zPZ;pA0H*+U3WHuqtE!4|t^`mYT~8jka~@O2sU|685vevK+$Z4X9W{adzSodV*hDI2 zOS#!_HZ_}_%?T4>w#|zHH&n^lv&y2gXF2Jkk3K@C9dw{M^>^&YAQH)-LeN)E=ykSt zk8=-v6yN1+X4i8AK8iX6K8!!3%YCF@ugsEUk?U6yD{|&R(&cjm0)xb+ituT>{-^5_ z{wEV=F_9|D{%(*;B+{ko>r~@kDz+sZM&2893?g6{upROOIkY{kq@?7#ra;iAQ3V4a`Nw86|APGDyXD9ML#$}F@sBeL*MFM~IwXhodS5belwP?O}ZcYYK zdY2T(Q83ZOJ;pp975A7v84Zqe*pW+s)WJ$5H?QEZdGqyu{7HrM5rdI{!(fL9cF()P zQEYphdo6Xat%z!JY+4d7hkIb9bdv(9U&HdkgQ@Qrilan5N^eL*Sl4?}s*@1r5 zPgFm{j2|BtSLJjbywP{KJap5X7*fAyJ>z4%$PUnhRY(V2#h$0Ds^{sd>Up|~SVVJG ztJ8{C1yP5;G@_o@3s-qw-$$gh%-?yi#~|uhil;$2tKrLavkX#eYyL&-oeMr{r>x<2 zSY7AeNaWf?j8wCzUyKh|n^97{>KEfZq1;q%o`Aa^guB9<>Rjau=t6d039`;3WernH z0gjG@fRiq(wV9f6o(UGjU$E5P-}cZYXy#f2{#W%2n7hVHcQ6E59Nqf&=^My8GcfZ^ z-k`o8>GD1TXQDpTorxdVKRc7@(kDNV*R8Ni>ELdqee+AqV(j1&PKoS1XtFK z-aU3=n)8Ty#$)Lp5*}B7!uh!bvU=ZPW{=^-W)MV0q8NZhc;0%kDRHrv2VPQzj|bdJi5Fn6_Y1@obYYwD7CX zO0$((x*wwZC3X^>!v2Ejp7A#IBe+foA1XBQ-)6Glw{nRpZrjiPvQ^b%r|5ZfFQUhy zfm=3lr)<-_IqDe37= ztEvw-vgPGP!)MMMK797_F6n7=`aJ#i;p$cIsP}EJ!(jyJauoY1PuGG^MX0Ma=t(^e zonX^&60tu*NLaLuHt#CRf$f0~g*nM6~FCKu|g$OEp?dShX={= zU@3?0u$1GNJ`4p6Ek@8n{af2&G;g*8gYYDp$so(;GO~29k*x2VI3rjE4+m|X$Sj^1 zIiwClF6e~9gdEhty>0vB0&vWuqq;60ICN#+<_6`h?zCafELV5frKHaYueZ|aeERXV z%9Tvgze&`3>SI!SVW8~CwHI1MSBu-yV$-*Xx43^hTimz2o0B3ez-oUoL3$EbT}VP* zY{s^Vn!%04;y&Q7)Z=gDEiLG}pzq9u<&PJalsq!!;l#2L zh0Ag`?Hk9GnrA+^WR=aj$PqofV9=1q1Nl9AnIkJq=J}KRm!dgw1#_K#FqB(Gg>$Pe z{!enNNZpaOr)yT8`qo|fd0O4p$cSM@!-o$W*7i9F)@A6)peYl?0B7Sg~^zi z9y_`h>dP85j^1a#LNn)7If@4@BHhAJE#kk~&01jzH<4ZfmjJDF`6fv{M{l3-V;1VA ziOt5??7uUu14@m2;~|cmeXK1((C!HNPd~`qu1}R&pQCnu{sx_ zPyIRxFDWTVqhElBLR*YiDS1#SIf0~(?nL`00C(Z}gpUW>kAu0Lj!z1oKkwf2)p{QE0mS!i5Rd4U;f`i0hO-0W3IU!KUR{l4op-s9 zi?c_FECkVUB5=YurzgQEIwO48CqhuWArFW-9NPU@x_RBKLf^6Lrai=jgouv_5g+;l zCzaZ{%v^RZHw6`(fesY^c3i zPugdi1A1UK>PdSv!h(H4y4L_a;H*4SXVU8&PKUwdbi|^+7?acK(3?C)kIrP!8I2yd z$>?$6-+gorqh6#>+Qirzy|}^cjE!+dxm_N;nKMM`I0q<>avHf}v(poY>_%kAN*A$_ zrp{_Z?#zt*zahi@BFT!n8;RZ_*wYb(;P&E3zB^i1p?g7xae$5@Z<&6&VV=Iyu*kV6 zX1;sAXPH-r9R?k}EYK5iXq}yv%fI5YJ!TdnP^F}0DtK~eC$zU`{CZo}y zHyI5&{HqUJLu+eHutur@%T0U@{hD4hNk+YnHD~}MaFo-mF<6mO$S3$`)x(sLe+~P2 ziT>^k&{y;8m*H@|Y?)?SAT2Ph(yf%9Gi|cf+fLX-oE~Wkqo!#uj6@2C&uMc6k<-1} zZq$EFJ+W3f0?&p))cASWOFLU{&=TRJ3S}O~u_Hc8z`P3KeN)x@;{8B43^@(pQ`E77iz|#F_f^}l!8QO1YSM;OTmbAl1lwu{ z(`2_K?$hegdo(7RIQLurpa2lin$SMbSiedLg~0eBI1OiKIMV#-z zvkVOdG~{tOJO5mk>Io(r?aI4jeERNhT>FL>psf}lb9rlcky;_wq%c#QVE8YI8Zvcu0v^j(tBzE zhfJh{Q8zhxG#FCVVmlyw9R+U^N0nOv7p#815B|@an49w0xB%?or@E-h1_c?Chicc9ub*9%EvM4n8sVgK5ey z1Z_Nc@QE>qUkE;t@M-s;th!G4wDW%MuKhFB{X|w>59-<|fcY!K>W*?*rKr&OP}>g+ zw`WOv=V55KVtzCg*&nvb_Tg5yJ;N&5T~8iI&**s#r{QrHgGR4$>D?NSE{;jC>+LSPyNA1nXQ*qayU{HKmOlOzofVA?eRd~p3=WwkXIKLt$SeZ!k$wn zl#YI7o3P@Er&hnqJn`X|SHBi2N;5_z`(|vIa^P)y)b7}rhsOs-_Rj5DJ-+Hd%(U5S zSNyg`)msGj!1;}C`Cy-&xF=j9mGgbdC zI-f6RDv?gj2E8FI_w}dwdKvVf>pow^D%)x^*k|ZrZgSewSEap^Og98Bgn*ue9b9*KZbqk*K&S z0w!6WnUa~BnUW+#Yx0!hRQF?y58=y!WPe|<_P+b)-*3N(r&iY?RzH%05b=EBIj;G23a}TKfmMtJAXm@Cy@L8 zq}~@F#kL-=4cU5kZlX2? zS?6&_CHhcXHrB}L%;piCISNB`)M86vEsPN&YHEk7euH_;XOQg>{3F}{;0+xMa|M#| zG+=&&FU6G@m*LHbPx7TDr1_H*yZH)yW87mr80%LSH_tuKGcV5K^ZMcw5)%CW#BTAZ zL41GTIQKZuB=;mw6{vz$)MC1l$lb3pS6Qm8mA1u>#m=gjs#rY3S{PTKd?VS9 zXIUKrPdLDc-RUH!zbi>k_p^SVKRePF$k8(0^^WNkzi)UljAt)C2p`6$jqg z#nduKgEr$8IX@*e!4(sIkImSWpl^z9yvJrl7Gn%=_KrxB%#r<5RhMek-RTbZwHbri zNb>AN7)TpyEq0EIDR$4Wl_CDBWUAPz4)~BNU8R1ptungGQAPNw%2nmA^i;)Fd8^{9 z(AayyUgO(quTQ&?mVj-|Q8D8Zr-L%fRAg^126KtMxhA$IYDfI8sMq36Vau~yPSEni zOc}`|BR~a8sCgL}Z-OmPdW~XFn)bk!1J()2(|T{)XR$8r)(x8eIkB$q+J~Rb>84!2 zQTkF~Z7J<(JD8k!^~2%wb|fYJaADxA^ld}mUw{!P*hyo5{ z6i0ZEXW|x_rsLE-A2}8C94H%FrYneuHf?_Z- zj79w?8Io5rWfQ}6W%@A^Cv!zyDL0!FRD77_WMkt54CX@@z_ox7$#ux)meBmZr|e>D zXcI*9`zY+E5u?nK#>P=j6JP|JT~EsPUBq#gEOV$z9vK*TOt$-6)Tw%8u;@=Ve>+sO z?zhjC;mQN>1bk!Ka^(arvwG*d zcj1MgLv^2!u4{_0B+^a7yKz2OqusKuD+eOtx`;*~@PoUU#StlHXaBBP(X^_-+r04N z9nDv+Wra;AGGcv!oQHE}=hWq#&-paxMh;I5AwD1kM3xvle7R6AvKrpidn z8LRcjV%R8X4Z?gQxT8+Wp~8G^k(MFOFwEDYrb|bJE3|fi`AY3DU+LyG73&*Q6jL8_ z7uL5O-q{)R+i?}bOU{=D|^;k7ut_Vds8UYiDo8Tckov-4p1+WFW1 z)3xdB$lPoi9wC?h8O?zg{`|AD8rO#ya7rk0rbf!!6N(se7l!2Ik|#W*_o zo2=+Q%_P9rss{M7?+t;##sz69x!v5oT?zeS7gyx;8skb&HyT%JG@~bGPDd9y!p6{p zxLh<|Cd=`_%p0@}H1kF+V?Jf)nNv3HKb%Hr0KBa@VgY)u^PMC!AXq>&7~~2^bFh$U zukU-G^iZg3ZQe^}LN3_x&BE5a2#-D?o?1$kjZct$cl~0=C%9t=b=5G1b;$~l-teYj*Ku_c_ebrx9xpn^5mzV{_~%ee@~ursBJF{ z>?|Dk-U-+RW}JL)z<`$y9Xj;Lo;@Gk*t}V3`SGJYdmcG-Xl+eRBkcYD`|md^XaBf$ z>v}atJ?PFC%yy;}=ita%y9SyC+9H66C|vRku}<^3F0ziVHmtMJmdI*w)J95&Wl5nr zGk38PS=r1xi0QJvORh1M_YU$coS;lTx{)buY%3ZVVBt!=ZpA^Wwsnk()0+anr)#N2 zIQn#i+6TU8AjtS2xVQ{X6{5Shen>4M;}*B&)wagBP+Q!zV^$I0{Z_Ck&K01)hZjgK z%P3h3cGAl^ngMpm;ncx%!IgKsITj?Vmg9Qo^!Km9fO1kj_YkeX&qL?ZJHc{w-4+fD zs?fQlSUP0zx$LFw%1Iaq-uI3fULb3}sOPQ-oqI97sGYOmXKfZ*PP zuw2=EP}z(ZWKt$P|Jxs!iO+Yut_4}ZZZp>eB%w*e0Lq}zEvNoyHG;7wJ-P!sR?E{! zc;=H-BQ*sW8N$d`LZ%Y_KhqaVH^P6}!5G`=;63r*LG|k^Wdhv2gK|9&ccXr^{T0dU zZ1@?ylJTHtGrujKrghu|{5Zkf4HybeVsV%K+LKFOJ+O4?0qXXWS6^MS^uPgZ3tj_& zw~}>#cy-MpfdMNt9L3mK#4Ms6O%^c*<02^pfJFsWweQlU+pk@^q>%s6 z<**;t_AWtIU>T%(Nm^$T#WA5xxwY<7#~@T zF0?e=q2Tel;No@nTYSBBOr1^i?~A*;6mM}a?(PmRuEpJ5HtrM(6nA%b+fa%WciCuh z?Z$P(KK#zT_n(`SlRU|+NhXsud7jCvCu_~;oB!{8F5C#XV$3z-rM(Pi-? ztY{N{-mwb3=miilt;T$N$9mX3YdO5A!wTdOF`#(S;mS%L<)yFQ8klg??G6DO)mCaoVKM z<4}x6t9-drt;*IF@`Ar|30srV^Cv`h<+7Vme)llIP@nNVcl$$#;6Vk0eGT8VP`+oK z%(w{o8~a(L4CYPt(SRKNpsG~e>bl%dc?S!ODT%LXQu-3f<&}$$r+TNp_G}1c`U7Mq zIEjX(GgX~1#9o^0D0nY#-;UhKi2#$n+H&EKTW`$Cxg$oeq0;hKNv;u@okA5C8$ z3=$o(PQ|ThoAfJY|IT2-XR_V+nGNo1Rj3D7G)yle3LR3q+(rp7MFFWnX7MhuRdJdL zv$js(4KhF5l>hcm?L)QGRX&$ZOF2_(x}qN{^94ytwJ^{@zj^AiWUn9$vDb9UBT`#M zDKD2^gHi$cOSqVgD@EAsU5crf$W)26Z4)1lR3UXe5naz;LdD+1Hnmkzmn>`6%#XtS zBacb1bIS$~-|kA0hD~9XclRAH=v|x8fEtSYhl@i z8N@rzThaTEH1W zEy9F|Pi+>XxB52wPr=q4AqN$dL$)l=cKcDugO-Qrxaf^ciSF|xckhIJ}gk&(SyDZvrO39Eu5CUq%*4deL0~D zc$(?-`YMdjB}w1%Z9ipxowt*G=p2zvORUnUgS=6EazA`Y7h`Wy_Q-)Q+#|V`wS7&2%uq+0nroJV3u9Pi2~f(H473F^Qyi|CI8YtF&SuIOzQ0S9%y7 zy$<$AD!1`Gv%68WS<1f71cNGPfsLd7aVcgrWLv_mm7u|PGNWZJ=dXnCI*OfDdzvh( zeu38hm)!nU*oCC`;CZ%gqXR=0`19h?V-b z&@Z+(Z$wIfk5^K`37H|MW`_d_#mEi8t~Xg82aEt#t#v9EZ82%~T^yOt>?cX$R@n;y zRYcL;g4roc+tvi$$rI~3mppyh|K>?Nw3ud=UCQ`M@+So@WxV_0ejJb{aArO?t{_*v zbV%MMcS5C199XQ>3!ElhEVpZmMVC5j#7@1BJy&Mf5Xn+loc+sQ*= z5S^O{SYK$X<$rf$^rt+&Qh)ucFKZ-Cb$Fm9yvH@j#`bnk(L-Brr)8wRm)nCeU@2Y< zq+1itD@@xx_M6%G0l-17Hj4Eg$2HSskIF_;cQ^m!I+_^ipBS>fT<$t6Nw{pOtR&~c zctNC~sB-bto4as%_~$>z3ajHIpURM`YQG!O7F34OWaBJ4_5ACXZ9#2IQUCR~4S-V};; zH%KVhZLZuqeJviRLi^f{J7Of8C`XObac`*usNZl1;aXU>er94Uq|m2->RCGgvHQ2X ztJF*DIsQpTv>y$!GLF{c`ju6Ill27*2+eDUsJpe36`Y6GF1I}CT@Tnl3RcjdZ0-f? zJm(I-JjzHXoby_J-nL?D6C`=xksg-rr4ouX(%=Er@5zJ~zNOmJJb2}qRu)&^VpJV^ z9b@Jgeq}(_ZIx`qpX&}ECky+pCy`Ppk24|>Mez?qT(6z+kOC#$v)guqII+QUcL9eR z?p!&hf)=KT?0+5Gy6NSZ6JPuebc}fW(H~fQ+a5kelUgDlqh5}EZAfA|1LMR6kRQH$BS7fQ~C z8h9u9^%s-rix7YE6zQH7J~tg=H2zY1sK6dPDkebdPV(Tdb2%D&%;Y?fpD@3~GPAS5 zRaEtuYhY&patW6f-H;u&I&x5F2U#16X!)ZFLmP!s`V$vHNNN}}j{e-s0-Gu1k4dN# z(MhmG4WA4}vfpr%DuTR0)(>cB-8tIOR~zdIkns0_G5Rs?7#TD>q*Wz7(Q=vtp$z4z zBKjy-A-}73{@kX=yVVN%i}6ZvZO1PIZ$b}+zod7N9R-nIvslRK(2EA`yuztz2!%hx zJ*r<){>$I4+G61TxJ#udQd8+RMzFv_=mzT6r{j%nuXOk(4UI2lm@{XVnR@Q>Z_RuWAyD&@Ko$X zjwG6&S<;X0b!5HODu1&B?Wo5i!aT7C2bso^B0JBEN@7b6Nw{S#xBO8dd%NflrSS_M zf+R3slJdYGyf6QA>yvfq)gJ6t6JY?(N`0U+-Sz*ffFkci02@(EXR?dKe-taIxEaON~a&IVg&f9`of=W90 zGY1v|RX(>8$xVc@A;I3Wz`8(}57TVIS{hm%I-d)zQlqO`j6LHi?io?;%y$WScg;G} zp!O1k>{w}YPDqxRDM33qk(y+YDqPXMYDFX^7Qhsws8I*%k`TB8aFpJ zC-wgrA|lirD%LKxUUt-9zw+{PQFF-IJ9$}qe6&s$Ue+?!mabOT|KAWUY5^`jL2ha> zG3x(!I={S&epGWE*$%Ogvz4tLVP)H$aXAzVhDZuYL%wy%#H=PH3=6Y#S)3GAoux$T zaFnXp*jU^jk}`?0cm$o2@^g|hvXV=2iTlzcS)1>G{~mqp;Hqx7r~06-rm<#)p!22b z8tqD#<$gRmT4J`(YTM*C(+a&eQAG4oEBH*^vWuf?lr<_4ESFHF(InFUo^FGYO&RuL zD}DBHa2`}9V4kpt&0IGRNLv?ur=jGK4T@6ak1L#LY8KY`s!}%7F>r=WzLOn3PX!My5?|cUq5FlP@J2 zs7~cG(99gmd4-47BKCRjC}$Tp+cN%H|G4_OAiVoZ5UjrVU%JwxgM9iZ2p6Qza3URv zuWF7KlIE{{iSj;B%EkkmDmX-N8B6J0Rx3Lp$ZV^eK0P6rF+>27ZP8KiL;%RMX_)C{ z(hx0Jpt=6h_9up5;WM?-Ik9yK6caZKDlohsl@xeb16#$I2OzgY#7`aM{*9ZlVy|%!4C!~;AJ2Y~B zJC$=4P1SAP9>r^m^fSs)o{tTV`0)_`7Nb*9pi;Zc`p)U6m;Maf-7I+beW4(El!OSt zvhHH2*lRCTjA9D)mtNIr;B-hm+G?9ulxfzr2l0H`|>p?PDf}z;Us=w zo2>Gxyn8d^paFzV>b(}mAd~H0ZlTRXip654xbEtMZQAIQ@vHCR8Z}HY=j4;6T5xxj zxy+qWz5>R)1gr7#{lY`4fzY&ldnd#7R@fliV^Ln(?lxV z7&nT`x$he~uCZNjZCbf;Ekx89);VBphJG$QQUi&nf#OSL17%EF-x?1Zb*P8km*r*a5FkY)(qi= z2Ifw>Zj1PLSgnR{KoJ%DFSWL73J2y_T9g(JwTJ<@Zq#lwxFfq0i+SQS4uqH8*hS(> ziLYf4_%{uBDfXf_YcmA+V47D9owom$^wQ!xCSN$D4@qPT6CNhHXbd;s z{OrnHwugPyl81hhg>Rrj zgdroa250~Apx%(%iz&*=nJsz$1VkSUuUOa92Ee-_Za`8Gx}O0rTGfF( zm|shaY{lEge%3}RnJiW<0o|hh_J% zoTYPbM)a|d1XE^3VQx+w8*#N(c+bO3@p}H2_?uY{d=nE*5(<$s%1!Y1#ie?98t4w# zT>UuDuY-lzw8bm9W<;P$Q!H90TGF!$?a$b4T(Eg@B@X)2(@^5Ly zg5Q1+&l#4~fxmRrSfjAu_h1LZk9!BE010lN9Pg!n3*M>@N^Ft1lDAt_F*H>uZ%K99 zkL(8XrN})Gs&F-i)4Yx)1k9OU5?y)4?CyZdD5NRYuwx&P7kY#iIahBb7|4*`3d>gI zx3ro5I7u5Q=#}_N6^JfjoCCf(hXXss=5}($)wB`TSl)*xE>o)Ew-e6B+amtdsuW>1 zUGfc5`cdKdgq7zNf5kiJYJgosr6g|~9-@G2f_`83LGsaUN}GALk3`Y-nR7#}6p8!- zXD^aj!Ax$)yx<%IwVC6PK#p*MGu8YM3TjB}!!B>u8+1kS-hX2R9m!^x;R_=!_ekjd zX|coCJmf5?;VM#wy-;L%gl{@wex&ZhW~{4a#y&ya4b5*j!=0NA;}OnRNqBQyw&jBa zhfloW65Q+8hqb$5%dYVcDt2x0)d!KRebO<*;3S(18&V4nZ*0aYRGwW8gqR!YHN7=X}Zu#ZX?U5Z}&sUTB=~2L$@Bm2Q*~sK|?z4tZVg#pESU>#q`JrhEcFyFC zWNohL@j2hA>O?r0pq+@X+Vn`=O711OI^j(|kq0V28uQMd$O;W9keaT2ghlOmW51sh z?lAd$l&atOJBNA?E)a$-aXZDa+KtNB>Aw@B;!-Pt3&5Lm4*QDY0hq>n6|P6}gs#|9 z13V1U50Hse6y>9E{0BFY`Qm_m)NW};yM=T~+SR|L2wGEM*pH%|DIbD;t27JqFOW%+ z%?=P3G(#ZLhF5FkjS=q>B9MKy+TiUli8kpNbhU1f3H1j^lN$qP( z#jqk~+vxUFU*4F)K628zavtpQ;F@%brkEdseb@g(&QsREp_37j8z^0Yi}Orbi97TP zJPRTAM(ahfCIhs-nzWe#vnhRpv0lw7Ci*c03%Auo3m5S8Xf`qJiB)C~ zy(G#Up{pEKVN6!fB2JIs@r35Ng*Q~EPS4{@-&NwP2;{X$ZLXO{E~+vGPcf&D9B!16 z5&K(ePfPXSRLol&(tTcq$m~y^VO}x|wf^P(7K-*LN=I0eX7~U)(C93=|F$~+b)RQN zGh)zmijPl6Kx)=Sr|66+!sSXsIhF(E=m3ejw7G8yRF*21i~2=!hOo^f5kAHyB09S| zy|gjLiN6$LkTO;%$;Rw%TbfUrGAx}19h+x>72{H~GD8I8{|?a*VUYl4n|;Hc8Yi%n zzuQ41_|RJR=n6q!5YS1yg=tKc=RY%+cfKR9ZvIqwQhL@QY@H1l@yoLoSMSObHFk!^ z^~>S(E3h}kL}B914KLq$JkWl)1^Ct=a5<17B!cuJJ4Gt!0{^x@UY$cf=W#E9>3&~y zC`XUUHM>AQ${C=uBjIZ2yI9%))Ff|Z=Oyy#&PEt0K&Dd6GE3kzV<@I-O2&K9opR;^ zZuZ+n`txtuZGR7F*5fTK`ZB(1aD&}Xw04X*8YT>XYD;HU1cYxfRZ(}44}Gl0bZV;j zco|z^d}63?cV+WKalIJ@I<`YlR?+ImQls|c6W9~0%m6zh7!z9LZ^Ekx!eu*g=Eeq}QIEFis`(7W+hkW%C&l$fmK1B$>{&Lf>I zt5Qv?Mf3_hp2fS)JSDT_+NxYG_pZ7nyHuR(xmt}$8qn!kJ*81I7B#HglsZqG-BnM2 zf0fB%25GBT^#2#h)cW??9`L^Lqy;a^n`{7Er!zfpYgHifa?H>2{4r);B z)ho_B{R-O;7x)i^E+U(rm^`S|8!6Befx$lch4M%O;qG{vpdK?4Ksqr|BJ9sK z`oL%21k@UgEh}$eZzFh^kR(wOANnrHSddxm-iFrm#F5qNxLo-5?Oy|bL+Qv(c2O=- zEytXlBw`zP03!@<+>vtKt@xK+$-dA)Af_h_8!?O-fIvg(?XW?tZEd_HjuFuP?)#gf zGVpHLtF}sdiS3LK20&$oBs{VhV2))K7$qVrDd5!Hxiq^zDG~o7_(eb;o)zf@h6$?y zE+hV$=>c=C*MtM~#ZSs0Fnx%JeQsrvMjwfHD030ABPC%9Yq!X8hdkL*Arkc|3WEcY zNpH|8>`pahAS(Uv1||}!h4bbHJ4eN9!78&=G8^%t@UT9@P27d&N3VZ0b9?t~w^@0& zDB|$jR5fB2{PWGTM@^eFj5n26mA zhix3+A+xe!=#y5yo5T|$XLJ))aTE#s9uLYZ>6ybTqBVa6rQ1U`7}@XFc8_r$^2ut^ zl+vJ-!AO%bFk%a0Hdov{XO?SG>Vm)w0iTa7X}qG}&u^E8z{$Zn{f%jQ4?%xpxME!i zJeVh+v%5(1Y|mdJyxv!(@&Xz0D1y~Wlh&(jx$b|No_U|7hn>Yu$hlE<;rw(A^`XUd z<9~R9U*ZW+g60)yExrl2XEbsAdMiBt(e~-|J(dRuqyB4DkadBs?#DL5gFU`Ol=lq7 z(*l+y73_&?xLF&qzaE+1BI~0bkIdls*uXyP73NB>c=%DM4LsE%0Uc?OXk^c$m9b;XMcz zul5ZJ#Gn2JV2R|*hz2%6Nvt>giLc1zYdNBJc75*=dG0IHdFi;2M9FEzu-vw36@GUHj44ei|je#wY^W|M|tg`$Ot={+! z{HDuiIFkeGOZ zONaE^uYLnBz8T(2?2}v5>~s=gTC2B9>=KTnlQ&!s<{ZZkdsDk29ud^TiDsdd8fHu< z{1Tx^zc`4oC!pUSoZuyr$WuncSUQk?`;SNyYh#ag*sdK``(WKx@E+Ma-i`RDBS=PP z3zA+4}4@h@SPjvq#|K~t)`1cS!) zB*lG*lU^EmjS<%^sl}V*Vmsk}$iJU+B&;4g@0o41=$i82m2#rx2l<8GJo2|fCQulc zpFt5geDVj674|gdpy-s`U?Wu|u=`UZ@0k64me0$t%c9R~*z0BS-Rv`VVQ~<}r< zr*#r#U%8Up+Z+U_hye_3#Q~|Ofx2{xdBZ}syVA?Kc6k|+Nr(rx-x&`CWj7N4YvKTp zY;Ot9rW}_f*+mPap{%9SHg2znY>xmxQ#|loW7}td@@%fjovTO>v^N%5AF@L~$mdB{ zd_3qvZW$<0Ka ztUM$nfxEUevH7^y(tNC!0B$q+v?qf2qt*`)%4qwh{AmfRzuJvo5>L30{lQn!A*kDU zQTV0<#oZ8Y<%~psI6t8^h1Z$9|Ab@cY%xqBRu7gR#uIK3rk9@)%x3)4vX8-;`5atP z^A?sj%ZULsvPiw>Qy(P{`Q3l!_?#K^!$_9_G$DdtG~QHBA?pu_cO|_TKuG|Y0{Ph~ zfZf`}ukvq6AmX&-$X3pKnA>qf1e_2GkEolEX`0X@Nk_O3t}pE;fOPJQdYtX>o=Ova z|K?k?!;6t^U6}1pta|rV3r9@QB|lgMGP)H5c*2T2aV=K=VAOWh+IMDKlG)8q zGpq8u+iv$$+xP&>$ni@ussj&_I65QL!`JcM;EswkIkSYs*4KPf#p~ak(_8&Jkk$L2 z8-%`o-7M^t94P51R@$JLB(Gr_9G`xy2Mj;!HR&$PdA1_)j3XCTlohRbXCl4nJI9-A zq?4vns(9wRp`adiQrpZ^aM(?J_u$MZ{eExNLt5=ZJItHZ<@j|XE4+m$m1btq=?NQd za`z#u0FgP2>X|{|7SqoWoiZ>rjJx}Ru=)(y3U0LgU(lacXiwFn4Yvuhf_Fb^2t(Ko z+pb<-?;Bbo`43yHryv*+qLS%7kwZOmFL_aQnpwfNDLm=v$w0*>|$y=4es6S=&Gzyz*!Gf@9ScIx@Oqy0lZ zkHYoFXb++fDv;R*6;EIOLke%$Dh{GVv)i7+ur8-fH=(t1IHN>qZ1sS zUgx^Gf3mKK?Ux5?xa|t%_q0bB*s}a^?uslvjeVGERP%CA-xA(A zEoB=6xCvcQRh%%74EaxfyVr8Zb|~tAh;p^EpUBFV&{Ak)8B$Iz8A5L}ALU-~sl_hg zzITtAcD243zkEn=1fVdqWgdtoR92iqL++I1`Hy(V*;G;VPQF@SLbXJS?fV1mv>|HQ zG23bEIQHXbZy|5E*{GJO{JMNU$})};q!%?qWFRe=6q5Lq&!gIfxONU)=}{gJ!1Ye& zJEmPrO0XlCqZ&tifz_+Nv^RiJ0_312{(N*#QQz#w-2C$vb0gf*)W+6q=I%7X^y?qt zqt&Mk-*^mSUmJ4jCQmU6hp`kaTI+I*8NxpUMPQzmz;W<9Hrt>WN~*`M;^A+a>4llj*p87Z**sqW*-uI+a(HIl_um> zyb)chQT8J7CglRAU=>2pLtI2*E{TH)-6@{9`uJlbaPC5Vr3E~ zP~<~Ftr~EGN{R6srC}X_8f;)z8!Yj7-ddI1XUmBk+>+Zc7c-}SNw>xgMWj5Q`<9qX zIhQHDiOj{`7?!B^TsSXO(ziJ1q9n0izm%;Xh|l?G89Suwg77vE{~)WkM!+;-dY)w} z*?q>CL(~;`DQFsu9O!{V0oUdUDg7k$+x@uaP=}nyrhbiX02$xHR^CIGp-XS-ZymbB}UrmncGx6pW78s) zZ2l}X9oi6-Cf3-GYWr_tHiJ79(AL4=<6CC4yhiyV5XT;R_!-G*87V1&t{)9YNq_22 zZv==6>Cuy~OgJTEe8jnyNj$rO4dN^j2)gsYx%NuHJS{xE0x?Y365@(yaF^b)s@c; z={vp%os`GD3LAyxw@k$#?7kB@t`nU=<_9yw&(QVH&8rv~N3x`t{#m4#u$Niwo1B47 z6{i1YgupHV5<^p_j0Y`cZ##n%EnYEZf+%-+)FnDMZx8ojNoG9NE zT#uQ=W^JF!8}GFXCPeq8GlV$&wakW;?$bpXF#wqoEt)H(05v+GKPl%g@86|2Z&g!s zx=q^MsidIvcAVEnaXq>eAC3!ra(Ch1&DpaVzu(2^#+e*{Ka? z*_H)-);j+Wh7jz5NloE+vFIUoDcuw76&PB>u!cIdQPJSjW;*zFuK01zsVm!5vG(vy z>DqW?9o`~ImB1b+GwgccN{Vrq1522yA&r~DdE?unIlnV*U+7rJXn&jhQmyR|EDA1- zjeRQm4Jg_4yUF-XCUkbNlpSl)r7vhR>Tfu72i`d~Db$R@QMyf-WKBZBcm|qWk@kf6 z@Mw?=$1ixNSKRS)trQ3o@>qzhKA4B`>&rQQa9r?o`2kMesEG0+dwk;`Ww-8J9BezP z4IGOsesznPBzQK24mjn|a=0_*C-TXrdO5sl;yJlr?CNFD4TUF^7yWwFF8o)0p`fT0 zp~E^@rB5QXXDByd4e|1yMYBR)1NiJ`OiR%)$9A8|Xy>VRDcI@Y>K%8g4^g&;giy&Z#N5xtIVZ$ShM+ z*mLDwn=YzJnp~$Kw=t9)Wqcjh5mvPQMeFJ9hA>FUlmVu3h@$3bLM-3%kN9$QXy&4d*mIS1U@dVoYS9A&3-xc;T77n!gXS*b zUN(5h-^F3JQe50PWem4EN|A-z^fVw&5_O~i1ZRv3I74BbK4D+tJ;U%2^a)8>gI`23 z)87SsU?c0tr9xTqn}{g}WJNzfPv;a?!hhE@CB9GN*Sk+#3;M$!B2w=axKXdv%ZD*x z!QG3UwONZctz9R3P)|x062NvY!8pM*Sct<4tIq#iwIk;=+LGJ|UH2hhAC>_0iqTtn zvoyi}BjiiBBELY~B}sv8LvDa~kuxUcM0L4txGV(*Zl&(;7sh9+0gx6a|61YXaq61V zsale=jv}!&4G9SaUv;Ii&-ubWdYSV!%@3)pF>8mSE)=}tb$ndE3VD|3n{D_xk33jW zH1HiEr@LoP1>1>?T7u)4$gARC#MX(WDm!+_2EYdb^@g}kLIJ|>P=T7l>Lxex8`8zr zo*@OPi$yu1uHRx>pt0k}S_(Ln%iwqaQP*KJT{@Km)gL?NPYhte`@yeq&=3d|;al)J zvCPKV^6dD5XQT3OJ#lRO6NW3tKzRF&gr-&WFL6$eyDHUwH@*e zNNzY?=;xYZDN6K+p642`K$(AYAo%izHS%thN4y-gP5tXVEO-*|8Ez*cWhbL6zXNG| z$TL_e%0}2>msv)<6rj0!B6*frmX))$S zyrOLI)%@mtBP3@xBw_OiVZ!qf#ze}$L9|GFK04`u4=vnIJvZK0YvgroZ8g0nf-Bi( zzP%>dhTK2BfrG}kXgaHNuOM?nUsW^_af$9KB-;ms)mVYLq&84VEHF&G!yR8Z(-9C;~(l3{z$>>+q^ld34*tow=VBDfDW^PuU^P(D?%UH zSUrx1LO`Wr7t|dX#BqUp{MMwbd0n6#bvuA>w`=nG9`yk6T@x52UtNCNfM-{fzt{g| zSaq^Ja8OUZ%t(6jzP~MxN@^f(aP}Qf^*&Rl5{Pv;T9~;g?$Z-e4cHS#+bew9hWVkT zMDaV&Ej44_Z-a`!hbGC(&Q%f~d>Y38+(2pj@EQ;fxSpYeoWp}{5T7!AowDC3&D@}q zzMWzv&nxL~kZuDm1SZwjjc%m=F$pgvXN)ps2S zQ*~>PeBzEf_$GczxdNmnh7JveH~NYB8S^^l^he5Qp+~Cd_}3B#M&8x;&tPEu>(gGZ z0=7LM1q>#(%!_*s*3JXNViEF1f|lMXi^$}harLTPDhNvHE+89C8F64($`;`5o#T$E z4*qEeVAK~IYO=!*u?+&sc3kQW{G|ndhL8^|(}Ja9U5jGDEwQdmiDlh0&sJZLDYoQ8 z_H#3}L%^L}TV~Q=2(pCPOCfCQGZ0ry=*6|Zk^bgHa@FY!zJKk{Ve9OR@iPzi)5Yvi ze-J*a`GmCXx~_g?TJF2sEBGxq zGcYx$%I$$svdcW#gY*&cHGNlfBI@8Oj#2)f{)E&CWn|PulLknh8Qp?% zLOv_@?~_R^C$^_{aAX|GcQdMAGAOp}*^B8wq|dY=vRJ`m@Y8LzC0Xnn<$uintJrIi zjmNOK$qagb-UNKVOB!WI~E`w%opSx?H)d?Z;2~hLvRw8I4@$(}Q zw08v9`n03g4|z`P zF|fTyjfi(Xp(X%quGQJz6%obX-TQp{QUIT3lbsdjzZ2dhf46a<`tPbV8^Qs$b^uiG zQib5u2a`;S3+ye6#U9D`L9SjYFWtxhJHyaK0zktqxES)t{oMN)V+Xdmk_N=DU@ad5 z0vNPjwRr#xslcR@&a`KvdB`-s>C$%F6FG8>qif&zj(!#8-Lu*35*F4ma`4%CHiS2U zit)gDvfnU!75)Uhr;l{59IG1!C5#j{J=r9P|2xWMeP0{pyyQx7#n>kgJ}bppDkThpZ*fxi zn;a^lHAE%1Pt`C?)$;V>&Eas)HsEsU=Dd{54~-Z}U<*ke0e3u^5SiIr z3xmg({M-Li^xhVN(%9qU7m4079Z z*~A>b77EfS<{Avye!e~>gj763zm{lQAd&>)9{*zXev3AvUYf{cpIc2tE>P8SU#P4dB3DpZZgSI;TLN|jAZsKB zOK~CEFbE|`I@NDrPq=5SN6I>Rme`2#V;*OrCt$vyDNpC`2dq`n>yNdMApuLsV{_VR^{(KH+AUf zy_TOGLZfoA;TBo}<;-HRgCUQ)_iZ{sfiZ)m^2~wvuhKRl)V>*)lSD!XEk<>flhQ9U z$Ea02#n{Q6e#QvNvd+zfB1jfo*&;nD9};{D3G#zf7VfSz*x0uYe>Fvd3dxQREzp-W zen;wFrF{A)xhT@S*{b0kDV*E%fA{_V>skbqnD!GT+}bcOEkok z-nv!iX3ymaDZEa8?<9R9epkj4F}*N?Uz4BHTjNc~VS0@fDB8kK$33+lbfTq0V1!wL zcZEN0vb2MtPDalNMeoQVe`u~GbjxBqP}^nIJn5CO=!6}|H^t6EqBimS@`IQM?@;dk zbG#hs{4O1m_2?#iUgSt~G$Yovd-tGZiC;RtnNm88FRh=Flri2}b;OeumF9#1j7X&q z!l1g)L@l~0_n>FLlQ~ioqJ%L$B-N-!XFc72j`GCQiLoFILcVdp$!6cq+6`WGC< z9Z<{>5b?OZTmEP(6O6Nh47rolH@lPG0mr`h!?yKP-8|}r3BgQUV6WegiFs0=^&=gc zz(4Yi2V#Dh_Q*6l)OVNE>4GRC*x^nMvVje<-K$cRdt5&3Pt%u3MTH(*Vo1{45t=LJ z>AWN!U6l3>@~<}Ns87%p?!f>gCsQqbnkfbi(673x|G+1W|bFfF4sAE`QjcZ@YK{Ej$ zKFR@EwUF{+`{?}d;Z?H#cN41W1#h!7`0=64|JKD?!B^D^bH|#9rGG^1FpFi{-ifK+ z4?))0Uh)KDF9t!e%^v_nE`7J+==}F}A2VO857`ob3wQtzI+1@}+6iML{$}$J051%E z%lhx8ab&vQVK-#A_y6%5K;F9gKMVLjc(i90B?upu?D+rlc@K)@q6lw;KfQ&ZgEvjC z_rF&J^-e->wQB*U1h!*!%~WBkZY1TdF^(`$|SeF_|C*wvC7bgo{_O7 zKtq$hI=<#?^G;Vcgmq0gp`_J7CK|H8KM;IwlL^v63DZ-4(=DJ@;!UyEWIm(1#FV~g}E`AUCmAO(XT*pK_z zO@8SJV)M0tayhkftW4QTMzKvT(;VgCk%-fC=~|O@6ttYb+}uI@iKA(TFv!q6csk&r zNv&BD(W%J00r_|Ts^K7!0s41+Td_8xW<)rumT@{K&1Kzl3`schx<_7<t*P$QknLo@cwU@cGH|@>!AHmH^HmcQ8`)TID~uu1vx%wZuKHmh~drE z6>^2Rq3`F0@vhvuE%>@PTHAOI-MU}JZriq1ZMVV94w1F}*}hDE8FZ8E+NB1tSW#^u z<6W)84~QTx+zF;m^tH$V_1_bk)Z5m(>SwZV^?WPyz6MxatPap&j}*JMR(;vpb<96d zR8dj5`aQ;Ay&z39OTV#I6MQ5;??QtL{*%{Ap+12F&b|;^Jt8%|Gzx?C)HQsk@0hZWAhJ39U9wK#p2-hc+++jzpO#yGh)ataJ`Yd^+?8jFy_}S1es{_CUA%j~t=!?6rCjxVGdszh zdw)rv20h(K>sK*sTK5dAX0Dgnw;nm{U$~7{!8&FUswHx_wyIRr6jU_WX=&?z<`3p! zefx0`gTES6uW4eCR7I&gn)PV4s{GwWhl58@%{qsrLDNn~0o~QwfBo<9;r8mx_>ehv zZ0v)_?>?WKF%BA94g`iVCF4LNLyMhX2CCG;s$Dnd|2SJoFdw%nv<0yBOd8yLv&McN z{`p?6Q&2)5c%>dZi+d5`@=l*zoXTQx5h(casY>VNJeQmsIuHS00 z?k`B^iDuu&y~4;j+B+7AcFr+nzjxEsiYF3hkR);`T7PcEU|ZRycF)u=+TRku+f`uF zh;fTCO_so#Cc-tm?nd03+OE1v7*TE;)tty9HP-&KwAWhA$ynxV22J3PNsFWbr%CPg zi24nOI_IY)a{Y>*`~eWXg!;mIV(`{lRoMOe96Y|f6X_bbhX~tv+4_9i#P;Ayy`Ck| zDYs=(NN^q`+%3;fcq)5-!`>fa6kK2PhZ@2oY^1fU8fJ7)@U zj2_znioOxPe6Kx$D?XbjFR|R9AdI=&s0Vk~$ZJ*2^|XD+G)EeBlOtgoWZ*L` zHRw5Py(pdQ{wQhZn*U+kE*5k(@Y7L$I0~Iue+T-T6ST%69^`1^4(VE!OyrQutpoq` zY`G8`&;XT*6A?Ld(RuAz%uxy+hJ}}cWI9~Rt;)ybMrBw=E25sp$Qlg%cOq6EZPy&f zl3U?--p#$me5TG`(o9^W%lm6AH{~?2&EQ?D#xA*astkQ&|Fn>8KLZ~d=^fK7+X zlgXFK!uq$Hg%}bt$8}9TB~et zMOtR-C&eV^=By8bEQ7?~QZdFCl=p(YhL>xV<>YuH?b?|Pz5M^ACVt{*9$B4tEflbY zRVZCWT`|}v%=}lOk&adUp@xJ@sWcuNkeu{-sz77(jiTkB%~#p&>N=fgsb_+H>Kp$< zCQuEx7L9ix4z>1+jR`LI!lvuOMjD%I174=>Vgiq5wyn z0o4F~!8hr>yS4ET@XTlA6UAbg*6dEP3e`wG6_TU!JD&IyV9>^s|1G^r7QZjtN>A{L z{EDU{)onAYZsBvf2NB>b{r;!-S#6_!-+xZ3HZ1F2d=d3+^a&67a?q;XbydtDuAtl+ zr^R?o&=L3ky^Pv5*{y`op|wwf=ZsR?7g4D+K4qB~U)I%tL`-XK{eK*XQ`6XYRspkS zhDPE_>&~CG#ARRiPF>8Tm2`P|zmJSEIOgP3k7%#mxTz~11pF+}+_U6C`)X;auSKGM z6|!j?Xy>wx{`>6}bZE)TM$Ft4?EQ9SQiOI0`di!hn>XH>U`#M-#Qxgd-Tm6T+QoS5 zX=O>M!8?ffto}as9G6NgFZ%0{U>Z78nZ3E9b9P0%tnO)J-IFyib-PyndWwc>vt_L( zDyk{EbKp;^xz^`qd=r;Tz7PxGK%MP=#UXg-=DoEgX%b>qWji;Dw6waK^-Zb7xOQtc zI^)E?R=coX8?Rl|vVWk$!bwMp#~=UOd7!1ggO@`NOL=kU&F9E~uFVxlOM*HY`p^rk z5Y<=px>tvQt(RY%O{+blb?uj3p^gK`VKH@hj+(;1uczwtbb~#FzNYayE&BYzl--}jq!9CyDUD|3V!J#HRxU_!+~!P-$RI&R zYtzy*BU8pcEKZ;Cx1;|c!>d~Mt&K=+Hf^ZzekNna(e4zH_nB0*h?En`FA=KkRwi+n zBO(2kCBwL5B)w)s#UkkOy9ekH-cxaAI#BPCa^HSWaoh60098P$zuu7J!QAOl zzPhTByehH8@UD(n6i43JA=7ekJ|cDqo^cSFR2r4@ULjh7&dFGY zP0YVDkf~1HeQ{cX!WA`vb0t%QI62I4&dBh7Y}??_eiv9{I}Fa)aG%HEiCTT$n)l$^ z@Tl|{md?_bsbi}4Sj&{GsutRjqra%?9%#JzkWZx4Wf|0*uJ$#E56LPay(ERUH^nSZ zS(6F z7z*@v-TExRI~w}Vuq}g1_C<7CJLHsgnzd&JtH*rSUDlrQ``CgpMHm!CMd>WMG5R|v zhj~8wJF9EWvesCCu<}!tGfS2%zU{WfOP0v_dMLMRAj43^z?yGu#)2lxS%kG#lq2?^nZ76!Ypqyt|LEqb+=52AWnpp! z#U2!^l)dsgMV`azE6R0NU^UDxSJ(xev}5Y)7@Mg+uO`eCjX$UFM46--!VHqDW;u)y zmlDHTGwoPqM_yK8X$pVG+G*{oV28@tA)CjeEK57ak2!4(r6-hK`V*?DF_lbd-pI|i zGzwzm-%(8wB~@7b*k3>X_F{f?4fc_yKF4+%Is|5jLaOgvJ8HJzf)ngD7RWv zK#K`piZSO>F%Oa{oqGDRk`pyW)f2+$o)qtj@Kqs?Mir;rou+FpmY6^;B{n>jloVE1 z?&A-O)xcQ}&^1DBe2c|S*kS2%TX?~ml_TasID-MLLDb3t>wzv4eC=Bo48EqcXwJdm zXBqV$;p^7O?o)QI#h?YFJG2_stjB<^U08=k4PJkF^t$}^SN3W8ig+rZ&>hx#W2&|R z^S2*O@^uIa=dH5)_G=j)pWsU3yTe;%yLKnUWbY1tzHPnTG0%6sw|~o4eG~QgkVc8r zC^DsCVuN0h4H`9U)v3QQ7qG5jBzUckuSLq08-kNTWoNw5**Ou;c1QeXv!LnA#O$c= zY!X_xw0FB%_3Mc?OY1r=Ruz*dPFFMP*2}W(?l$!x3$ahebjskJ#}CP$FmXuUc(yiW zX@1Fve|ai@Y07)^{?Oryk=7TRXB-}K|Kk(K6f(Z@*2?^e^R1(6Ua)pATzLDPx8BMI z?EH*PncJtIwa5A}OG%phhkI|CQ(SBfxq86Q2M<;Zyn0DhpQtw;DtxBbEw^>LVzl+f zbE~Xh3P+C}F>vFku}kL9XT4s6X*_@4oliYF`qZt~->t(!u5Kbd3p&_<%kudsS=WqY zUDw>nrdz`}5N;(|9#=D!l2fK^h3upmbU@maYaNp&A#Qie<4&m=pw>Q$P<4O(5 zG#k0nLVBq^w5!dYt~{Qv4%V*M$MNxMkv3K@2$?~1*)8f!ZLT@PwM@NTyWL#odQe@h ztuoiTc9}1@-l7BSfby2{s`-xVD1E>_P>vc$%#U2nrQyZXnf&8wkE+cht@%nr_LkDn znqRerJ@_{BTHk3$DjF-9${;bXIhDdDSq9me*wLiXKwoAgy%4@ve<88h^+LRk%|v8M zNVqFLNi}$EN=R&s*N9Ev>CnG9;?Y_};311Wo$%K_+vlRX-nz}}4y>!P;mk3sBBBBg z+v;kFZHR4KMGhS?V(5|2XUv>2^K+%=ygRLrtq-aeDP34w7FWbq4(#9W8mp{o`sf=* zjk4w_3H4qr{>x$QNa>-;4@#X1!V28Rz1v*t`I^M2rXi#^ zPV{0o88Gs#GVcMK>+GG)lSU>fYk{bK}-W}*n}_VTX$Q1*-kcd{+AOb zzB~O-<>h~x{_ey)cnTt#jRaNgV~b>g}amGxwm%U?P0t^Bc;Y?Nr5yja%QymghI^9+N^SN)UeqgIv zF6(#m_@bimv#ss;o1pHfyz!e)KlzGfjG8gVI`_nr)=y(*j1uwzALJF}xl9bRQq$M?vYN|I*L0vHM#X4Cgw{!S&x?1%1j*+PlZzdF*)7R>S zeJu=Wtzx8EH92i;v z**_BMt|5K4NNFdYu~r=vBC2{_X^%NP2SOsJPNkFF6E}IDUQt9n*gyB#9-iB0yEk_z zws}OpcKP;(n(gvxK5d}JWeugGRG|@2j=$I{lI3{lDqoaGA!DERDiw!lrp{t@$@@iR zmX$j@D>;xw;h{c^A6d9qE96iXmAq%Y)4${Fxu~iXJCbsiar@!`@A{2$Z@dVW4=fK( zuee}Csk$lJ;ju@L+yi0x#yagA9IM6Z-jI&`3ZpOYV+`ea+HhkkA1idHKF%lzS-@u- z3yf(YOV!);twvmylA~N8$ir1}J@vzV7Rl zd?VjIPMK;pY)|wAsK7O@1*vxkg3>(MB z@-gNFS3%fP^Dfr|W;|A(C?P$u^UshX{03@jF#FoN-`aB4+G4HLj#QrDsTGaYZk5M) z<}ane^TkE;e8~pHz?3#HL^4I=UokbE8A=P)XkqIS`C!6sb^D;buqxYXh-b5{+&Xy@ z^mgoO)>|LU^7Vn9v22`P;Mv1=>0t>=p?a%PdTVsvGhT}nNEPGHrYE_p1)v9Fb zU(1=w;;cezm9^R`Wb4@kHj%9ltTl2CcT*I#@WqB~Gd$a<*cBCOFw@&q^_ZAQ(YE3V ztTyr?(+-MZqUmBGRxwx8t5=>p+$=a-%_5j zjy&&8vF^2s*n?~=M6>F{H(66_h4sbuSNHCOV3XJyHc5yK!d+2m-9OCQuB#C4cYa&8 z&YDef&8|at_;QjGl{yK@v2n5S$#HS9nF+D(DB9-Iw}lkPxnrZ^xwlS&PHHH0dz{y0 z#CmwLt*p?>xc1KU6mpg)P(d4i`z#^8j+mRNN%2VuiHS)`iFMk-=@%;4C8 zDPv;B#1^E4R~t|XN_s@~zC11}onzrrKAkgu{G5%}0;Mm@Vo~=lA28qdo>jD~?TsUN z=OJT@@~lPHk5yQiU;E(xy-gz*EVA<0^l5{n?plepwJG{7i=OZ`qD(b9KEmxuNmXOm zel=!){I&>nTju(RH4ReSp423Rk`ltAjfA=lydRgB9WED#Zta~XYOtqHc~4avg4w>@ zX$@KX~XrSrKxx z0tq!|_M?j&RefvjH{_6}L^t((cC+sb>336}I(if)NO1>TJ znsyqty?wU3u^fiUy4#EOFS1&jtwe{?w530;>+UVnX!`06ipCPbkbQe z5@ZSmtchJZ)8zJi=e>lDw6iUO0>1Q`!+cFh@hWM`c14By;c+aU$E$H#s+ne9O;@v? zyr#bkU^7y@GL}1Zi>29`!-NWu?OR7G!T4Sl)q4uw6Y_GGOh|HB@y=0Spz4c_Q zml~MHdg*TCaf5qT8}ROFqj1ID#^vT*QIfe5g5+pNNTwS`g)Wv+GsJ^^o-WVEJqCq} z{&VGuJ{;O-yGQ(loHuOV4lJ)ZmtI{j)$+HwI|gl!*1Ve6o#{@)Uk5C;9kk9`OLsQ@ zeDZIEGC~{W-mN_A-j2USO>tv^ceyl=9ulj>^Efp@i!q~JiJrueETsX@QX6R4GKMq{ zYXkcrN6pc)^=u>C%yG3s`#XpA;yu)!T6b4(kJ$eWQHJpA)a$fC`XFPFImC6HXL!g| zn#!gsQ}{S_oH526=bGrA;u#+@HRNV~vpL%}%QHLVPGhOLEaZ7*58tKk)}A%@hV%*a zjO-lzbYeGRaV9n$P}me}gVhcD@3U4n^woZ~lK|GqslTkS`z#AXNRhVWcfRgwvKUCo z=m)VW_mIbxY`RDgw+oBCnQRz3#vw;Oj6}-BE}T@i@ruf%%kVHm3kgiOaM4o{=jUA6 z$7R*FkkeN|Tk{LL?0i?{nLM29E^?)Eud6w)?@DuZ-#1e;F}$)BpE6J>z^rv+gNjukk!P|-yfy2< zv)u#SQ{7^4amP50h-Qz&w993it6rCuak&y*xuNQAWv1Qt;+*3~Y16?X;9|a-=zAs8 zg!bh7G}yFQZgn?QN~#{NL#3bxtM|Yc-dFIYYTRSS@I*6{H#FPu_GV{K58l%p;2F$E zdZv29?FZ%&>8)A%boF%Qr@URoUwL{ZOvTpJzCrr@_E%VeUnl~ zk719>BgiYRd_}EHk_z&_DD>eJ#u#b>``ManG#m@ z{c$CHuf9^8K8kwpmgmsX_AMaPxe0YYW>N%d#sc!Td?+ESW#T{8mM5=!u(yRFMwTo!mE}x0WON8%CR1&!|T(HOHu*5R!UcJb=lg+m6={)}z z>H&2w)}%~&$k)iFQ$nhT{v3BmeUOS#+wmqLMS7S$A`K?J)Kf{X!I5J z#Ss7&+MEd6ptX;HzC82enf8ty(zkh5r?gJ#owNF-^-CX~HavX_431mVZcU$-bx+zo z=?|qnl>T(u)9Ejzy_6o4laigRCU74~xbz{ng)Ez0?Q@z6e z2%M92VwvbD=P_!%^p+PK7b+X4-8l4`F?We4!aa8`+IEzMv%2r!{)g$WT{r!!8LT-A zW#{_#?$&R`zpAVoaV3Oe)P@&pW40$9!x zqnp$8Idi5@pF4MM@0~LbF}L;Op_w~-TWeX-=`9;JY=1Z&l&%`Qf8C zf*m=YMSrzMee< zS)UK)Lp$E`eJTxAlDQ*XL6h2E&fVZcgLyaip;&J?3HKr!3-pW}J5*al+KbQ(VKwcS z+B;0`eeFfvH>bhvWyAK-FgXD1e}U2|v5jlc!B1TcmXo^rIJcbzW@bFT!y!9*VF; zd3bfzg1byi_WV2V95!6($jF4b&y_E44!5Hf+$hJHIH(hM^RNNz zHSh;Dj8y=F#Od`Tj9Qx-J`mA-wM5($cXSoEwyKWc_AD|fRn-46~FElG79dK2!J(Oea?Ax0(9TysuRNF6`4CCR{c za2BOrZ?cabShIl);TsPvd*fZ^x$cT;xb4wpvBA)vwsn8T+q(D9p3$lD7yL!)LFV#O zuvPN~ILPj0IEbrc>NjsGOB1CksYco$v3<783vfPpin5)py1I+EDd)&Ndk!lj={>c; z2ukD_;yrBO4EWC6=eoTnPUQ7auLC9%y}c?kDaRtQcjP(dDszo_gIRr!jSmN6grE19 z_g@-3e|-3v&0l|ivGQIXkO!-6x&}X210IxZ)PHyo?2R}O^}y8Mf!IzQh*dEt2J6@{ ze338)jS;4y8T=Gs7Ih)kqTAWq`L)7*=x+92ZnMyU9_P05PYSQ0SO??a3dP~fC~mA+ z!OReE#oE$5ZZ%WG+|I2N?`7`eHj9riPjF9)_WrI!Tz|L&?&|)6DO1Xnamsey*7Xv6 z5;N94@M9%SeTQ&=cwYf~8B*=u_$S;nToqTtZQ#OPK%1Yp{nDY1+2;TdnlXP#1PkR9 zx7{MK0`T*K%XrrRVGy149*n~S*Jja)dVaJ`ZyD`#>pi9<)su_Iu7`}>u41Brgu`fy zi`z-`Xci5kCG(=P(HF`HO$^n9HiRAyy%-W^KuUFXN`4XH7ci^5(j1Nr!Q8xM`0F(% zPAc^fjx3vB%_#NqO}EzIp9_XQf9uL7^vr^#ofo<*n9=&U*wu^oH*|l_jBZ){>{H#J zu~kpcs;W`nkB%Aqe%FqfgV!H3?f?6jvHve)=E*-q#tg29I%L9pJcR2({C;V&mEUav zyLBgt-*2dKJQ`{*y2kH!DBoHdGm6;h(eV}0EhtrhR zqBI0kd;7H_FR`~d!n%Pqs;Z2Iv`dtF@H7eT#bR$ycQdbfI!ZY}`9xo!5|8lf3d*mw zYTd%Riwk#I%t7~;#(EFcTx6`nL`maF-J;Z&=vK2vNoB&T1567Ry|>}ItmzfWDsQew zt0U64JGECRkHT#Em&?8MggS8BnX&%jFdMM>3D9xvV}_H`K|#aofoQUj!C@tXL!`lR zlpB)BvDWZp`n9CwL>=if(jR!7wAYA(>n#J4QM$wa(jU9K*s52T%|je{?jo!=&Bo6S zfpfB~*D(fdp4aE)ctMmnR+H!Rc@tIt8`Y_7r|fO61~c1`c(Tt2ceDE@gH4ziKOvb0 zHFvc4_rm>~Xjzu)#W0h|Wi9bG&XgocBWbldtzI&6!B}0aKGxte-XIQ?25JUs2kHju zQ~U*DkyNB9(iZ9p_2Zi>^hVXy6TkK{QAPjb59tFHM=1 zA`$;Xl#`BiTpM1eI_XH{0qb1x$*lQv#{I4oT8}C}D_5$&U%&Y4l?xY*Sz7wT@k?EE zKF2!Wj~N-+xv2xSQgGMv2b+UIXv)bcEXYXLi{3qdY)Ryu?9{w zqTObAP}~hPqE=!gJP1q{!z5eO)D?9ejBB(|-Nit4m)1VrrL}`#GU!~E>?#GNRt6I_ zGMbF$iOfVa(O$(=A@xOxFtj;}@D8>Eh)QE-vf*-N%izjamG|3TYHH$kDsS`vC9y2O z2fWk<&q4qPQyScbc?r)}(K%~3R%oE^tnEW*y$K$)@C>jT_2yBSx0zzq@u9Ni_N+e6 z=H5W`Xe*{a8}WWS)#mNhUz2vh1&qP$7=?Ko5f(STy!4ItU^DYV&2;7af%mR<2a{gd z#-v=`wTE&y2(TK>#o+qz;NxrkfvBH9@O(diV8egr4_t>EkTFqD1MxCcF!PxW%)`ts zrZK!7$J>W^`-*Nq;w^>)SPCKy9t~C)hho_zkN{Ir3Y!OVU;!#%GsKZ#B*fC2trCCF z-wW?U_j32~TftVi4Q*o|=eG0v(INO6O6c=1`mh*wLI=E68KtadtGccr{^~B3Cyd52 z)Pvt&2k*MZznG)?7juYzF^BjUbAHpmc>cQnMdGmf|HHNTtzF~S<(#OcgtutKzGKDsir+ zO1p}wVOMZ9e2q{euGG|MaVPNqCEhRHqus3AVt7n^Qunao8Rl8^4ErqiNAX$d8SQgA z+$H=W@ipDsuoazT-{sFRpP^6L&$(~Jzf0e0|Dl^syUPv9e;Clhz-U-`_y|nJpGxI3 zWzCVp${O5tU5M>wnXaq55YwfE=~sjMPYc(`BY(@k80~}X^EF1CjVwH`5$GP|1gP!r zY_yOsTc54d+V(4tZC2w z6X0R=FnWUDAvH+5(2G(dBHJ;EY{$`YbXqzseTY6p=cV(~SLiGBgY<*+6ZjGR#P>*9 zm@rwLh%{Cvj*Szo8lN6_I-4pcXmCffMPiO7LqD7u$Bq++YpV74fDOzR_I`egxIyy- zc%0eJZsWI$TQ&RmM&=lMOeA!5nmsKZ*L(^-WX`jH;m?a7YQ6(sF+Z?><9`sp()OBm^h$m5I;xYpvh>^N+RJ&nA4jgofg$! zYLJ4nATonO!9Ty%V_0B{w5y)(V_C#4I*(b&+=H3cW0Y+*N3pH8FxzsmP(mDsDNNu* z2efl`-Yz6?34DS;#@HZ~$L9$Jh63XVFanN6W7!eh2>w=P9)AyW4|flLpZ-3>6Uf1{x!p&nfLVX8QwL1!hFLN^s+VsRIQ~_ z7=w9S8WuD2m6TCOo;+PM{bnZ~7u_QB^VPi9AHP^Q&KL2|vLkW3OW=MvmbzxClQt1c z&4Xw+@z1ibpMUmL)^GY}hfifHgoVs}VGVP;@L$5Cf{4jnG(p^Y2wO3nNt=XH#B?oj z+>RAzX&(}IiZ7ufA|_)IldyOJb%-(aRU&TORp_JcCZ?>*!IX8s$5vhG-rfVQF!KQ( zt4b5wgzcmRFjLNqG1|3!q7-Ygd$gQCfPmDh{Tj5wuk5YXy@{R}ouuIs99G5#{4r*Y zkxMkS6`#U#K8xr~M02vJ5FiqjL}o7w)VNUUB;f2=ik83#9suv<6@?ubbpF*t0xH?2 z&p!Y2l7~u49$NC}&p#VccgwV8)l+Y&Tl#h5iQ`*WonN{2{Sz;KJ^7($o_Z+8{m_nQ zwoE2%4_UvD*CNg39pB2`bR_^9tL@SdN62>QKmm7L{EbUSoL(XF+|7+KDb zfV(vYzi;p>W2<>@Vq8qDXg9*3g$1!bJ64soEPdguuHsXwnn+);-y5spq4cdYxbSP{ z4}`t%?I5q&_ui?vLL(o%Wmwr(g4YSqP`NHk|#y^uLtHeo^; zd~fWQA;zgs6x{qsp=OVA1)D_JKHdXIJ&LB?@aU4Ij}1Tt%DIfJ?u9TbT{-LZEA7yq zjJ0v*62yA7Px%^oR9$F2<_+I*KVrRFmIDqvnn@781+!cBg_s>C-3vC+0Q8bph&5X6 z<~S0xO_XOE-$&ku*uGix9dPwkTfhV9go>FWRdTa)O?kxCdv@ew6K-D)S1FsB*sEJF zyzzztt(7lxEy`a*N$WQ~_k+?x%sM#ohv%U2XSdqsV?hafnth9+AL?Y6&7#8^qR|WD z7&aie?Z^{=R&4?rqJc4Z^teC(#)1LBj(=&POHMLo#M!JKx1Duam<)|qXVFRsvOEY` z*4x&(?o0#gHS72c)47h0tga5CcRPD|f>RA!X$zmC)Jl1X3h2v#LP$kk=7;i~s!^El z6jWTXQwUM5JU_~x44Y1GI~^D2^?tPNbjFgByd?#v>rZ>)Jl@mWPY+yFTDaty=^JV* zr*F6u>hO`w#igZ72EM=jwAbT~!@u*F<&`c>KfUb({QFRCWo2z`<%~OtJSDy`Oy@4p zEDtq#%oZ~dsuuFcWYp<(29I8^OEl`WEcnUE+oYc?T9dwxk#w99*)71l3>#4n7^`2V z;g$+0h6c=c5Pw|q*mw~! z+vORNz8@KUZLOxaDf6|e4EVwYuD)BtTu4jM z&oB)YL~z@!#EgH-^cH5$1-(4L9yX|*jxbK0ev^ru+^|_4N>VZHz1ZI{-%xSvtLE%1 z7&rcKtp2|nmam#H?w@CFd3pYdLj^<1niH(=?W$frZpb(9PHI-R4iKP>oB#A+V25THm`TW{I}5M>=vHQP$36-6LpQWmN6 zB|NRDBh!i^omLddd3xNMZ4V~m&s!HS!p#>i@|l+}Uj_(bR>6P6y^qI2CKv-o%gF|_ z1~^&0<_9xme{f!m{Wk0Sq;Jg^2MhCUH%!rkIfLf;r`Q$@A4>*z7bbOrcT4Z+R64tG zS17I5b_1QXvPWSkLRd_x?XAwssCbHjFqG97yB!Ur;8F{!3zpa3d7Hdq;E+v&KUS2F zM{MX^^WkLjui~RMYd@fSQ%O4tcy!5<-5xhV=y97L&&4W|>!^*aTSj5Car|31T@(^j!ZiT5W-EOASTNB3DsNX>6&xG_J^FAlhM|-~4MZGXIJdv#<-A>I#lVl-Bhz{P^w# zLkp+g26g|=e{kj>p8oH@-aqx0$Md7aQVmUoc0C0!sehQw%2~{)tmu?-4zn*S8~W!LU;Gm;Z-FbqJ7K&Q^kH48j>Z#f z*nJG(kp(N_rZ!bUY^CwUK{J6?UA+2tRM-6o-1vXTTeH1m#0mT$2aE@^V7d z1ToK>f_Wa9zZvl|1NvGYtMs5RMDPfSh)^RV`dFLcdJz+Z+TUVs?|y){k|bww0V5bFySRS~Xdn2u z1ahsno^kG7Y`x+N<@O=|R0cwt3+{lobX3!v(Dg&%vF>Ng zmYRhls))_Gl9Wvv1}Fj@RxTX4U3kc1g@cg|U`L$JD(PcZA?qqB zj<$Y8%643$ye=wZ5sKCj$n@pVGe2Gal`b0X9Ua18?D8jXO7p%~ln9hUxb zUn1f@jiKL=*#*B>tXS}$RRZv$V#lKY92-*VT9hqB>_>L+qkDS5+@1@7EO$kLG>|fC=(|FlHK1 zz%+Q!yVh~%y^{BvU6%LQiX5M(`+`{b2^pO*X4^`eCko?Zk zIZsY0EE%8nCY+1kjmE1Bi!DhY0l$%8Kgt2P>N>{{U+=hCupi@Ga24QRGHOi4nZ4&% z^qxP0&#wihW)6mZ$_T*q(i{t3*f=#C;Oa-Oil>A&%+CRz~c`H0-qQV zfCC-y#r;+9*y7`0!0HDvCZAyCSPhRD7;}pWT5r)nJ|1ftc;vNphEeV2$R9F0@%Fc$ zbdr=01^*F#Im}4nDIs#r+ z8$2M~?R&ugIM^-_=Xj&GQFqL6%y`Un%-m>gv>kIDi#Zniil@e_00m=BHPBXQVP%xUPEXw7=_3OJZkl{L#K#oDU z|Lib^O@fo*J>VWJa1X+l%`aPYq+QG~3TSF3&9t@$z%|Nx?hoB7nEBn?33O4hJgU^O zXS#PXvmxjM|H7Hd9y~_oE7b&pjmJn58HeBwxPp!yijSmYCs`f0Y%?97*B(Fo8^@1b z?>HHQ*jR58c z<0|}r-0@f)A8TM4Af?#`dRX9a>;KEIM#^E+N}XZvyxjRoac5SB zJOu}Z#aNMSLf40%lM~Fuix=;wAoR=dad-rLEG)(CmPz~g2$xIynBppFduD}s zeA#u6AO4Nw$NC*#svf7j{Z`yBreJ0;IPLtmo zq(%4?r^&%31u3OzqdZgX6>*aSQwH!c*a&6sU-wp1eq!XI*4lV*g#-eE*!l;^f~;+oXEUbCQ=3 zCQ)K7;SeH<*mpPyH&-(@sJ?bJgjWbLl{uSke(4RPX+rj0H#NRtFev{RJC>kAxBoo< zo#pRN7*F7}+j{1oTn<+ZE`sdE;j1zqEi6#FI^^X8m4D2=@&tj2j+^k#ig)JpY$s^j z^78kV6WS$sJxVWw!ZaFE`O`JW4`1&%)k9>ehd4M@54raI>-4<8S#sGS(Jgk_Uvxce zZ*bMvYh6|LY8Tc^TpE>jRjd%bwpit5?ECmyy)4y8)zU1+5EF}GomgN6zA!Gqgr-rTUcrz6f;L)b&BPOKjR4k~3FcneFJ8-Np% zm_WTPM%c(SqDIy>BOGsU&Q`I704g??P}A3wRsI0E^_DfywcDfinbnz@|DITD6Y!yC`mkpO5>0IF-4>Knu9u@!PL|oVl;x@dEX@SzvaO<3McImS*^b z)XbPrQah6iabf1XK`1oYl~ zlishe z0*AV1u0H>}t)GpWaOw^y!IG{P!;^Ic(b03~LFK2>^UiO6?BIY@Q-e?K~ikPu+ zo(bg>%9S^i%e_dC#d8mI-T z`o}R%MIX;pkDCd-;NwJJtBI@etNL2c85;9WuKgD+GpuKIxC|?^VV#b|>c&Ksxt*55 z`dUq|zScu>uzlKBhPkh2CO+|NeJzN~ZKHKk@3n}Q`+w_eH0B%g7X#Ki|1D2V3MGdU z6B3h?L-E0QpWheo`+e~NKl0@!8-2k9E$WSCPlMvXvV^0`=0uo%7*XZg=zKE>mI-TddCT!fMdA-`Iq8! zsw`H|7xbRr364@eC}qZ@C_aeGWJbzhx(=7|y45n6&wU0exU=j5I{&E!86-2k6Ei&q zI%PA^?Bm5}bkZFhTr1we0-_fZFFDNz+|@?Y&xXw~E?^HZCt$YnKKUpv;wp!mmG{^w z%6l6-2s*Q850}E825TE^!kG)tO}}X zpeJZbaq>RX(BOD}sIw@n2b!-{1l7>vh$a{n^g#4Lxe(-Pim>jN8yJLjzcFB>W}JPL zXLw+A%5-~$XHwvn!ZSAI7SGJ&g_?PurO6WEozXcR!fwjn z((BL^&$#r}>jh!7uRLSbIzi|z8a5n`g7J$Ej(c=z-AIa|SaN8>V>M`aocsCRDMQ?w zz24_{rw;RUx0n5SEdfy6aKp}dk54>#Cn31Bv?piMex>o)ls2ZQyok^kwF_f=?ZSR# zC|&*Yde>sQYNPze>o-Ff#edXtnZ3_gM9YcICclS?&=-w|r1z=}KVwH9-Xn}}ERsDG z>Onyt_2NnRCE9y^yhq2cFcpctkg@+G-a|M_z+=|~d_>hdv$x)hXuZR@CYm49`wBS! zpWvDZq%4wWM-fkOp8^rv$`j>yr`03rj~kC_Ng_3~aNH_Do5Y%Q4xlku*tFPGKVhO| z9wo~XNvMXKfy5(W!X;UF0;WJ|pgb@uK(g=zRkbr4MR`8r`92`(j)j~TXm6?GLe8q zIwL}yK`JgZGJkGM&n?X@$J?yjYP{9viX-D;ly1_igpirkq)>FaJF2B5MkoC5q-aqz zB!VWrvj^Py$4^GzbmlG86Uw zH!5!zMsQ8nvtM3kzrps4*vuJqqRLBQ&t|29;!)jTp=>tktp>)ef>7-voYuJhAXIBV z5UL91kewQ<&Dfy-JkG^ITNuph;19-``Vgw7OKRe>>)=$eULR0Vh}Ys(+dfb_@orO7 z+XuYu;-Fy!v|4%iIlPCShM?^5bLxEly=*61!_UY4pC@Zsj!dTsEW`H#_X%jC-;|m_ zjVggAaG(>!*)SLqg7DsdLeTWiJ56Lh?dz|9eQyNbX5m``;$ZK+i#z_8drL6enV${e zy*>2SJ%H_mzrS!nxi6eAf%Bk={79h3ZLeds0x$?0MYs{DvtZPd(Ko$K!*^8W!$6e} z12BY@4-gLDG0?{wDBy-FC1w)QO>*A(fDifvpD50-W~)S+O?BkPE!sIZ-#kaVg+H)k z#{qui$gyKbKD=!kfN(We#N1C~j0U{I{129}cY#O{ZHHQ=>rJ+k38K}|qIB|^;h3%q z?AOR6xGAP@*b#uB3)rCtNYEu~j4pnYr4Ve=x%y47_iIuYeJ2;*!rc|+QWhe9X8a~_ z{e-;y@#M38-|e^WBOgv72Z;Ar{k@O)lPZ*I#LziEpRCtt1p^)#P{V4>Hd9;cDRb1U zUm&}8x}`T33BFaAl~j}&nvk47GiAlvykTQvLzza?4z0GbBA4c&f0}cnO1=Pi!Mn1} zX*MC7UW5R}aWO8NUL$d~!!QoSK{w!FoNUy;l7` z1}=kRxLHEEzzAyUjKKpqullGnR;{i3v1)cxS$BO3T+>f|1 zX3J*LCAyG@*QcTUSZkVx3NDgoowQ|o`pcZiyIry2MQvogn};)+^{hUQ!74jp>?B>WIWHg6B14^JPKT3-xCEMM4&Dm4DP1tT z`{pFipWbL}eB)1^r0$!sp4kPraX%_^m6Pnfby!qg+we^zEg)SZQqs)842>wADj_H# z4bq*`og&?(g3=--4brJdHzOfAbi=y`y{`MZpXYw+J+Alr{&_rRaqhj>+AGfUTzjoO zuHTxTVS*kCyH_)NhGX_!?7E$Gdi&$$!Sq(X3A{vG&D-i<_ozl43wbw*;si*HMvM#{ zJ{u}ouLw^Pj$}I-OPR}bzE?~6NI0S6gNjYps;%1)z|;xWU1R6&z`dtoB~v6ZdaIBf zMN&8=%XVetcw0x{(LGF8SIgyWw5$0lg9qep`#lyWo*d6c&~Np3JU+CG9D#{B<5r{^ z<2O4$#iIFoM~O7W)1AO_`p}dbH{sGnAM_m@Kja*3@%UB`+|GSLcu7?{fr7+)i{pwf zwbkmK{g16Ngl!0?!A_u-sGR$7ZHXKJBhrmpeF==G;7(78cz2Je=&{S!b=cxM9^=>@ z2Qkpt1IT*VY-p^V2HYT;o z>J2IniT1!6O69$xkA+5F4#t}6DvK5j%Tu@XJ$PzDSN!p(j#<;ne5!2Y!ka_L-aOeU z>o>xoJg?#nKgh_+{NZ!iZ-=W_=@(5GwBURao7MZP4=QP6waR%%vn2wZQ>jkb7J_H~F)+(8)9O1KCwh3dWB62s$BYgW z+HH4@L7-O!jn*LXTw~w)%sA5c5%jykJM7F>6qm<~mE8M&N zL4<=no|FHkenMJ?=U6gd+D8Y6y^j^JC^|=q<+{Fva#s_Rm1UD9D_V$)nu`m)khIf+ z*m!oT{FvKq7yFxglH?m>2;*{!Fk+!#W~cmM?EH`?YR_q&jun{k$N9(uo0K zUWnpukEfI2UBWz|j1G$!^z|PG6O%oyR(LF0UQU2S!&eBaIYO!F6_r=e z$LtlfVR?9>nh8f2^NFD&@x8F@%!w98%4iKs+wD0rt&jol1CIT^Ct8RP^+q=<&e}3hK7t*ojs6<`$PmuULX#&U%>nITO?Oj|8m@kaWDjuT8uQ_XRd9nH@nSzcEYvsF zGyi1dkPA_Lci08i4kWu-5HHL{g)_h5=>3gX#j5kw5@|r_m&FMSDLw8w`-3&S!5N9m zONvAWw*}0tz976A*@a%QWRe8?z9Ft23^zNxoPb>5>++;D>~j#hE6=jAHwV3+R(GC< zoQ;Y%J!bZ!WNBXdi5oY$7%VkUjw!smBW1~3_B|uuGW70F+m3jn8ax)yszCg5yMvRi zd#69*9|cXkO_7hLVW{B{X&w+s%GS|6>Dg88u~ePmdpS{u;B8&0~teC+(gj##@G2UY|<(YcniU+H}u8jmO66X=AZRj=+5;H~nv)rFp z7_7yEl#D)>a++{_&NNchxvSARr)eTE7Pu|DH?*S!o5Cy!Ex>XRz(~wVb;6kZUZ>fu zsdRQ$$DnrT$m%WrCI5W)y+_t9FNViFTx?0Y)S8`kPcWC+YZzDgY47_k$ulvqY&jMe z8$8~6oWreU5|to`?NCn0je}WxE9&N*w{qR7w>CjxYHG^`Kl2=!1>+;uJp#4AUEDZ@ zClo6w9&v63?y4P4Zh@C}@j^{fzkiP0K8a83fT0p-u@K#q^7GwxzwcxmhW)uU0BZ;n zBo($&EA_Dpeb7P@Zxol({51h*%3D^qm!SKxMJ;6S?MerAH)LPzm&&mbR^av(2R+P9 znAx|`a2Z9jdr*)53Uwd(J^k7{;fiQ-~^c7ccla2io@19$J(!YkFKALtR=&xE8x-uGpxxKMk{+MP(|f`d@0RD zF?mnF1;zh{fCpsa20OpEev9wRlu<(-IS9GzXoAJt8(#+;GuRdQcTe<(a!0R76P*@X z=D0l7+rqH?nHx03Sa&Y$-mM8iDWf1^W3G0Z;Dz6sF|=An|ftK&~2s?zSfud_Vh zAY8PP(1qHd91!J2hj*xb`~a(8JkGp=a$lGj*hq3QQhm@e3L~OmXCGa;^X^$SR*}l> zspynCG2i=rMUa1j33056vsF;4R?KcWtCUUE*OP!Xu$*hv6pJLB9 zH#UrCFIV$?TEZv{CY-lbu_$`&8OJ+yP5G1g%6zArY6QG|QftJsR*Re}v%WNv1wdU~ za+ehqhNa)`=rg=OT2271{dn@|V#me(M!+c(0r{2NDGIEKcbvP4GGh(R7@SEmpGJ(77cl8k$aO1??AGIHTimy9hBY_hVj zCxdzy$;xd9O6}IX@rIIy%}NtJopMF=tCeM=Y(IRpWU(a+{C5 z&1M;oV654{0opGa7hNUY`wkK-8VU0lz7b*Y z`i{;@iCvVkW~{&qS4AuIamz%)HL9mGv*|ttt{zubK7CJ@>2#6?cG{Wh?)D$ceoVH% z+thP1c0i8p5nj_9Tlr24AtCC>6<8KU9ch67{0SvSmo5wF-mdtJ;>18E*ds=g2VF** z@1c^4rOX#*cP?MaQPLzPd)apZPF-rCfY$^wJwcjVA9o=QwqwJ`jS16(;~j2lqmxA{ zq&wO2ixzlgtQ z8Sh(d7sY-@4^sTd@>^;pd9lVv3p(NaXpi1V8>95EM*Gw+AM-B4*0=c_MW$6?2gxVX zje=R7D+ecr0q^Tu44#)9WG=~w3^`O-*S`p3>jN>pX+MdBK_XaLqY20+9=!W<^CXu4 z^&Tb_v`R2y#cDdY&QRxeKzWUC=NS!MO>yeD%FI{M`yOx z>=beo&u9GiTN-MJM(5973mh?#+bN9~&VHz}veXaITi;JC{=VM#I18fqStujHPWD+? zT7#!}pOC88!jDIFu5j54pYC~XAzTw1V@D?k69a4Hk*(niTnLC4gp{J9JnHUtCLkUe zTN@`3kD9Zg)AcFxA|Ht7zJa63uNXNKD;E;(wIH|358B-NM?$k?X##mGPfNf&Y6&LI0;k{n@C0E)MeFD-QN&aiITL ziM)SRq9pR4G>4SQ3jKE*COSOO>CSjoZPwOfQ)T5Y%BmRn}EPbn>_~c zNSQbq0ai4yaY9Z<8jpp+FGjSg*pjo23SaYqB?s*Gi7VAFHu^c;BB)DU980&-b}IM zDKpbdC)jrBQ|Y}S{`X)jsa$VDaMosm8jjnDzCfEQZd{2M5D5 z7il+b_iRKjJUw30WlgoERS!l;ygWPoB<@o`r*E@8H#d8EaI!d--)URD?Jd!?e^56y zB_T0z;O2TYyjjL)=2O`wYodcW$Yche~rU zGV3ieYnF#=SQ(P0jkj~V*oQu#UA&bq*v`ytANFi|(L2h|Y@W&uEAwv^v1UK0++{NV zRuN{lnBvBg`L_z}!GM*Py?J+ps2jZ~QRd%xnqsz`;%=Jxw+hz5xRvg`AMU%N?wO*h znZHh*Jtj2I&CU>4XJK&%-KWMcKZD?y%mlL~ZTG)bKr^Gv;1h0tt8mH8Fk6{$|62uNX28n4 zklTMLPJ}N!Bw`2WtXQ$u{5-Ph3$Xud!MYaak(*iYUkmTgaVtNB+*LCF8zN$5vDS?{ z^KTVtE6cU+Hkp5;XjEys?DY^beknwGxg_X%etulDm8GW|qaS0ZKVZ4NHO7P8N2E`$ zr`aHSg}I?%efIAsE!P9xuVL*!7;zuSOCbkE{F3%ItGmszd1f&b%gCIZ1W3UkN16&6K(GWgC z5I-*;h#$%e5`+kXpb#iXNPrgv6XXSfVFDnC5RecE0=&QCk?A2&zU%uS5Ezg#zaU5e zc72}!a3lm20i5xIpy1#60fh)a_&|KTKn_qrejq?WP$5AO3|Rof=~zu1{44jMCJ(`BPEaq3IPHi9|#8AkIYj@PzaE}t|8@ht$}(VC9+k> z+9LxLPyzB@0icDy@&M8T*My_*FYTWZZR2_yGx|7eJ-~(gND!11y289Uowde^?nP1F#Dp z^j8h}pipESpr=3db8RGk7~gd^$ciIPeSPtd6v&I${sQ>SwMKy!Ubhyh0YJmoalbPF zN)r?W@c}jvf(ii=$O;J8&H(6&PYAFjU^_lQ7tela8aUDgfq`7WfUS}G0rLVj;f4M3 z3tnWpYfk|@0!YUPq~qhi_6abc8Nl6vx*~Vo0Qd64e%Awe z9eEDid+lF9c>)k14(TD+9tcQXkS;C{@IX+vm6exLHn0PMk*^Yu|2m^acItos==n>x zzkUq-dNukNPa9zNZRUvV=-0{a-?w!GJ>%lz1vJ9Nk8~!eAYc<FJC~S2L^U>CKhJqP9PYdOdhS@Cjx*L zc+`MroF)kH!0RJ9z#)N5UCf?X7z1wr0)S0Jq`t@4D%O?oDL;b5akH5ZcY))g=OhX&l>|(ik6PYJ6c_9#1 zf_%T=ln9wK4xOuKJgf0G>$ca9UVdag;rS_X7&(~YxJ-+3 ziHos1D6l^k;!S+QN_q1+3hBe=s909>D1AZ)zDuH z1Pw)B^mhY^%b}3?OM&?0&|do+gM{QzAN#9=1mw`a`8$Ecx=_IWN+3uV+DCsYkVqG5 zBbtyT_bZwosP2;DuNZEj=m+>`-(rq$`A3r6Rt?0;9~@|Jme);LK|+O<)!Jv+-ngnL*YbIY&I;r#fi?* z?0}%t!qE(EjyH~9J4GPfo!~0+|Pbn+1RT%9)7dgM5}nGewW1V__$_Zru1H3UfM{MJ1uOy z)R8!5P{K%T(&jIA!Er6O5M0T)?}8jNP)+@{7ra&iA(<2d?xM>k>=#qUi@& z4tit*9?F8-&I{=<->Bzmg42@@B{%e{#r=_VdGg zIAr_TMCg?MvCoYuF=c|jK6j!-?+7e^ZbgaR5w!E%D;b3)FzmTuG6qXf_j8A2w0D8; zpT9`PdKdKbxkoapX<*88(_~E3po!-$$>`pgj;%Vpus-y?Rxe%&PL!r#OoQ86l;nPM z&ADZioP>(auK`mL^frGiqva&x0QSTqDZ(#o{!m6;L}=NZT1F0RVb}b*jJ}A7ra8Eb z*a|672&hy#4<7~f~n@JGCC_Fk>=}Ef^o3!{L%{g|Iw1l$Fv39p;2|An0?PzIs&1pR zW1YryZ4#T+lPxa+26IRO7 zJ(T^9<1C~5@X2=qXIZg_s^9SrWL`eh|4wuui#~LZ{|14~gQ17~_yn?dhUEBhqhySR zwD<|5WJ!ml_;HkF)P}0f*;9kxG z32#Qmbx7BVXhxQ3=)wLCF&Wh%wS9asS)L)qecT2a+o5OsgblI`L$dogFJ<%*S&hy2 zB6%-ktoT}F+$@9f+R07FI|!G@FQ)Y0lr@uZY#1lU=uO5 za0qNW6e_YX06c-h>lU_Zu(!fI7iMdSwj$0JF5OV*L$McHfX7mJ$ijjf27Q?9!dEwZ z`iRbj9XGVhP}YTRH{45d)%Ib8lPLP&mkNZHDE46c9>S|0h388I!mu8Lr@a^9P><#l z@?=rNO+YVTY|+_GY}OaHsO$!r^{-yEb`zQPb6wPRgUtpUExvS<5cefod~nPw?jN&g zbS!vDpViE|bJvSHtHo?b$ctXTnPP|Nn4~eXbe>^H!;3(_6NXUs!kg=GMd*4F&2rZ~vgbHH9r`ywuR#7dx3Tzen8^*kun;bM zVfL5H4VCpGd37^PiZPCji9JjvH;$5tB~02dPLPQ^Om;C2gXy-s6iFNt(_ML)*KxO) znB}D($MG|9$;*C=!)LnFEd`F_Wa8+S`4~t0gX4AF55`(~`qxQ6?wrV@?h4$M!;Niy zbK@lV7IV9t{bT=lrnhnykAvfxm*m_Z`>8V}$eBD2QfD5KbABA~ovBjJ`f@#1;`G9@#nF6|=g9GuI+q&$){*g?1UFP86NM?AK8`w{YDXz;H9OR|=?zM%naEheq zYi(m_%7f+C?#ANU_sCyM8}n)3Pke1+ETk>jc!#5#{bOp;ZOd-qkC|2=8ep-W95lAy z7;i$MDt6NtdqUnNcE*@!Lh&&6;s=V59ARwRj~hY?(XsF!o(}%$O!-|F4#DZnD_!mm zemYDNuM~j|VD5WICU3LX%9O;>{9vh-wh5VX?b3CKnPw&GdaxTR%A(q(wi_wR%G0H| z8(z<1+x2WWx}KGxOLjNRi$x#*`8{;1aZs>9GL`^m09Dlj<@Aj?d3=Met7Vb7x#ow# zX2&wm10&^RjPHaKkA#{^!3-(+qO@eJ?nD!hg_?bVkw|@E;U~E;^fJ5?7W-Y!lnM5j z@@|y6%!@lwv7>TkZ(v|bswgEH(>oEdBVDG(Fb7I~DxoMH8JjzUgB>dZyHqDpXdPod zvL%>N_ZO@U^5opk`gx+sFSHxRvyR%^-UdGU#%2-^?V&V@a*%P)^MCZUz*rsnfl?#t zg^Y7v@T1`ZlkdG^*n3Ot$QUECaiG2X!zS zm6w0fdcg@vq~VC%j!fuaH>xb}(6TIojMC6VMs=_lRg|}nzp#Q-(TGH5bZ{G0mv@d^ zZa@xcupo^dk)~Q|&%V+e ze%~vq?no;czP!}0jL}jsqh!9TF4-cB)OX0wE;1Q~t|vS9dzikg@S7O2GKNCa zl9l^SO&u$OCcasjR6(bbt@~X}Ju3nxzHS)1Knm+hG>lmp&`i+`VE%t90P^E(V9dq@?5G~zs0hXW3bS0 zy2$`^CE2mxec8*=uXaesm>Zgutk`d|?BE!5l2N;RB(8R?!e@ON%P$f*`Dm)2lxJZn^|7l;Ld5VZJKLe-LlwT<4LoZxj2|1 zO|>t78M0S<(&}Z=2-Z)t?WJ*urM;83l86DYt7M#?;7E|^XqSRR|**F%AsmUxk@)qFK^mo~J zE!b02-{n|X2&ZP6W>ZQ5}i(w4)*pSX)<*N3q_ z-L{sZx%#;=%<}23wM^PD`6p&;>1V^xPh8frQ^SOx?rchl40C_t*p#UorvJpcDeXBd z{)uN(_G}o{2}CD_J$&1VjZP+HnAnMlPFi-D&xw9BtKlwTW%#0Mrz8*NC&&a{P z_5%|nh3c=HPS`W@u3u+>d6MGM*Nc4=F*%~IZNPL%A?7Q5-_yfC^G*J$g-3Aa+m%&! z4?n#(62SBc+;HCqf6ymEFK_H8fk)hIZuL((kEGeWqo3%fuf%g>ev+Q@)9yuz=ku&8 zo`yHRvt5058r_)Buqt~R=KW5e^SLCR_BdmrK?->#XT-&>w#`JMk$rDvATyVVd!j9- zW>>hebXBg_qhfPSCyox)a=v0MO)HLQvaxWp_G%I>oMI_WLyoY7{U^)Hrp(okweA+H zYrf!!N*Glzds_|GqAFI>H06j$IM6@7f3Y+T$rda^gox<{wFE3sQRHQ!RDoWJk zD69ndQ_ISV$!By$(F@}$nr4L&BO`03&ea}TV#RuzwuLbxV{2vyG0B#`0z=fs1XaOW z4~h*&?JT8gY~Kjn{F`SR1f zqLWcH%bd!tr&e6$iBEfrmPT>cMJ(S|_B^#NE+2imUUV>uWtmrbS9H(RGNN*1($u=z zMN6bucNF+drOL5Mv(0M4^L|;+A>mu)613d1muur+=j=wKwL6Qqi%Cc2*W;Zhg^e;Q z2eem;@kXWBvDaTaPkc7KFxRat(H<+N8C70Sbe{TbG*h{yeN>D+`d~fwVBEt{tTI!3 z&?j{#=-``&Nki4FmaWee+4+jrcG1x&_Ie)he^6F04SXeoDNO^Z`i$eXBl*&VA|XjQ zEGdTcd)m$SIY}b=a?1)hsUrpq%aS?CBl;K1YB=d521&{SIf)hfUYEV$q*5GsTo%ts zrr7_j>=P%Q;vl#zl9RNz?_*gJCr$5wLs_YoN@B#4sk@e5V$6~m=J;3**d zW;~fuyEcyI>jcBM+Eki}2}VoWn3}N~h6&nanh6?4BiaO-aU+J6+H{&pBSr_>=%cR$ z41sNiN8<&I`nB;!UsoCyYtxJ-RvK+;V~@r<8)j%zj3zi6&1e&i#vK?oXfuo^9T;6q zpg>;{7zRw-gvJvXwN2cBzK$}?o1layMj648zp^@(C-# zwBF_N6D!nbUF7BMRyfak63dsYFwdfkjSI(LR0S8CtdDzC`B@vMjhj{lS({9ayHo{i z8rO~6RE2DsoQ-?C_|h4Nj2pNF(wTIQ+aHRFw5WVk+u#>z8~EtBAzIhW{gGju*(F8S zK;mQJ26f$lO38x#0 zHkGY58t2>8a#Qan$Jvx}F%${Q_^x8gTCFyIcT?Tvg-BG!sES#BHDsJ> zQ^{pH^yK5X_NJAKi%1CFP6bFLKcjcRdZm1C@?_)O#m{bVY~eAl4sMX5L0#xYlx})4?N!1+VWSa^uCUxPuBPFI!sx8L_HlMm!*G21&m6(lH(@6Er z4cQpOs?x@lH%(m}>w;#!*_c#UO^sV`y101O1rm{PDTqvD6o; z75P(;jg&)9&nmIbOv}NFl_|W9phHGa`{QF0&-V>|dN!qHO%+cj3pYj%sXdDu2J~!g zL%W>w8oFn#Y|E=Br&^0Q4+%Z<8+vE0x66+v&o(X&QO~kpc8Oatl*deVZom(Z4#Pt2 zSvS=Ve}1^&5@nSo_%=P-)J*eW;Fk>I-rbiD@A zn}UR{IgDt zgf2Z=g*Croxc%pvljCO*vGhz8p8V?J&Y$c1j;A8%>A*LTp~o!)ujU+lT!Mw$ygv}R z%AD6izfm2iZLjJ_pAziF*mnrS({~0i%yJ>!DH}@mt%K@jA0YiHTYYw>!WF=di?n7X zkinE~PCIhpi1hXW60`ReecD?^c8!jj!iDK01Jq{46$9GaR(4R~wDkS~a?g~EwAl#I~C#l^x*-jl_JLhp=}*I?%=VQ z<6hR4$2B@GC4v&dPckeAoL7P!hijLnUA6>WGdu@guK4W@x&IJ#$rM!0FdJ}O3EKPS zzEtlrD`=bHI^ekyu=n-khnGvEUGr^OTE|ub8;2gQftr50f!bcoBpv&hvnzWUH^kmv z+XGROn7%wjfhcv%fDs~Dlsu*%j;Il(j~OII1d0-?_QfIIh*GHzs3GD-$yED?5uZfq zR0ko5NKw+kz6wN!iiE?o@h-N$@3iOug7AiwW*zdI?Y9Bklxxabt^>?sR%dWAFoa^x0Ri#VB{u*?1Vd z-yLuEb@gJgJI!ojHGI<@dp6c}F~gl=Ho+A><4!aiceL2x&M=#F1iv^z5r0Lr7;th^ zJe~;Nc5*}fbq3>=2dj*kHX^@jlrc$>&G6Aezrf-j!hebY?r2vT^a+nf7Bh@G=^+1 zogI67`!f6pIX3VPWLWAvw!ajUXi?o&JLi{Z8{Bm~7j0_h*=0Cp_D<1Xkk~Cer*0as zMWmgRH}!8L>dxt#1{n|`=fpmJS%~~|DxU#;MAA8#PyZaE`kc;ZPy!KiPI}eXRMQ;9 z?NF|$(MsZ*0J@+O$^XpYI&h>MW)|*$BfL(pvggO&uV0+S5fgP*`1B+eJ_R zPv8}z&V9PxMjY1ktodS+Yn9vquTFZ}b~@LFue#=0E7#9N2gN#*>5n!-)%DL>idQuq zIO;T}KiCLVe}2|h{BzX7vd($>vyE7F<5aWtD%63dPI>yB4Wznus@3{umBX_->**>R zk?Mx2md#Zc2a!76=@J`Qb=_3k=FdY1&$^e>jW!b1O(M;7tAq~Nbq}U7@L|W;7 zMmxyX8BLc1j(?h%r-l7=?2~UpAtX!PA_fY9*MZVt?SX+&J*OJr zv(DSKM>E)44~}AiVQ5j@IjeSXhGI+cDB*1KCA`sju6BEdXiN4e?rh?M(bpFZhclEn z@NPjF25FTY21Uuu`?$=a3laAMrI?7drHCI%^AqcSxydKZN&M^!vAwh?u|CsH9BIZ_ zEhb`lX>hF0o11r~*<+u+A-0efj@2{1NhQq^t8GlIEe(y;{c%%2ES)i_i)%Nuo-wP7 z2RF1-TJn+HEpq8Eu-pPRmhcFY+&65@3K8JkA~x2Z2;AJ<0w(qd_S_EzEFU7MbKey( zzladdEdkb!L}2CS055P6EV=K2FOVb1bKjaXKaGIq7Mrt9MiA!atuhHmaOW1TvV4x9 z&&^+D_J|PAEnQ_jjX*Wbrewm3xNTTK$r2nvZ1{$fStf$du!xeiBLc@TH<^hg;_l)z zJ`E+(;dXpJwLX%Hc3QqCeWZKsXyp%q>18`fxjHagY{%Wn(7LM`Hewj1#W5OoU>GpY z1`X>sj2LIH3fnXc8NcfiHe(nw&T$xavFIzvMi|z%7%Ipf9R^?Yw7;KzEB}jyy-YgU z$`^NgNu65~p^A$iYZ$$6J!u!P*PXrzYv;0mHcjl>E@rPUdXuRA&W;xFY;1?@=+xij zY3JB^T2E}-F0!NNb(5i;bw}GP_TK$4rbH>~Z}I9+U&}ueey#Wf_wL)*nfoT72jJI{ zoOxXZz;4#uMqSC^#7Hi9R}DBbl83Y_5FD$-8Q1j&oT9|7))fyHU zg5&x)E4qrnX?@&|U8Tk
R9?#6m4s>?~3KgK?0b28!eGVao7tCPpIo8V|aPJI2= zgi2d8F>c8OQ~MDxMK&SR)&OS1CIs4Qz{J;tPWuTk$2CEpcnC~qO-Luyp>h3J@Pj+g zx)MJoSaD5tRej8`;t}bJ{usBxS=UwaF>Qm}vn%ss(gxRASL4U54Ib?CrFB)p_<$eJ zPts;d&jp0`v#7Awpow1 zLsj~nl^%D8Mja3Zu!UH;4r5Y}i9@XpG5tw~&fO>7BMwnI9An)F4gu3_uASAoGr%{J97o+3yS}1qMBQz`7nAHU-SAyc_xqXngO2PvD!q{1BGIE2rNNM1 zO!r5ZAfE2t-SEg`AJFcHdX~~&n%#Hx%(lHEyCwCk+r8MkIbKW*y{x~XBR zF`2Zq##ePGvIp(zsvh5l>>Rt)=nAOA74HKl8HM-Ru5*S4p-zvO)T*%K}tdRe$ z5T8A-=MA`!lfAI#aBn^PVb2@N39?HX5)Cw(CmN^+mFxw$?^{2F zp30DEw5!`|+)q${t8Sqolc2Gr?ye!Jp`M^_q9G0JTc+-;@nA%~Qr%iZc0}Vq{pH9# z0re<#qY)_qjed2YgK#&gvQJW+T$h8Z+vyBM%PL8`Nz_WDhhh z)O`f*5vT`ze=ZFB+d_lYfwYQT{YH@q@{W+NU{?6XJde#qVMp!Dftsgxb zfmZ5nJ`@?@u6(xn$a6%zQlIW2_Q-8#ExJdtBYe&}FH2Pl;@0AYiw6oS*3yMbxeFrJ zu$|>~HJ^NsS^Mz$T}dI$+PlwhZ3;!!NrWAY0_ZtHW{Mv5Z5E9zEzKSo2InjNgu~n0z$## zZT&aBlq`v)`j2|Gp)cJ_TWx(2#4tJe()HnU(+KfefOld zaPuNqHQn9$syFYT{#0Uw#*Lssrio;D+;UOiAl1FUfm~0qG+}Jg5?*;Q>Au-Os3%(* zH+Hh!lh-?!wYS~BzUI95*;A}OQ;(;#daQGO{b29Z6TRMV7Gzrn`$Druuovukr#^O; z&Gr+lgJwNyufvnHK5UlB_9LwQY&306dGFm71xFvk)T5$)VwTpn1U8tq&4nQMh^TL$ zecdFsJU94kjq6O?vbMVQY~b0?;$2No%lgV$VcUl4mZ??iU8v`?`r=urZC!QS)X&Xb z7f;XnhFNjjrlaBQvHF17+uLQXUqsgE&Z?KariZuJKIt!HAXGf^>xXBlwu@W`M7DJi z+#V8cN%g(6WZSaaA6)zEwq_7E9@X_zvvk`wZePT<8;_bjSH*VeJykDP&#!z|#11mu z2OB766}JK;(md-!f z=Qv5YVE5K&O4Xk!T^QT9JgK}8_SS96)St7RhwamxL|w3Wt2Iq9TpSDh`X=oE$G@9C zBu%w*t+qd_Pv6f>+LD&ru2)BlS09NS(_N@E30GCjwQsMv?$w=%oo9OUG*!=aZm%Eh zom~ag;v=w61I}A~zQVpRoW}GYN<>KXF>J*kWKZ+Xzg|-M6iEy)Y^x$zPvg$JFXOXv z8xQhNhtGdrMuv_m`6NnAWx)pzR!;UVFfZ@>d{vE&xM03~?325?Ri8c>?G}i>r&Gvtw}7mp>6Kx_O9!h=XnG1=F7{=rj#Spt8AYxiSsmu zZQ`o}pFWApip=c`(o6ZPc%MlLQk#r}!HZF$EB%$MBc5Z53x;#W%Owe6ivO<^|7kA5 zr~T?{)0+NX=^5-i?UL)N%BQnweQt02jOaY%^3GNH)fb;NiM^~dp7W$jj;qS6<(L8O zv$37I)9v%4%Mb}+qCe{T=}PQ8#>WZk+QTol=Y4i1&h*i4Hltu3+e%|H@uESp{SGR` z$;bUj5zPcrAapV}KL!j*w$NKrgt-`x0?Z}%K{7WXp=4hO7cuMu+$7Ht1sIa8phvF+ zD z?jY4yur7)pM7S9G*q8zLB^R>g5Xukv*~o7ZDPS-MJeK^Kt@IEIaP>s&7-Rtol1teN z4+RRy)rnqU2n0Np+{{*a2rHoYPDG7C5FjH7&z2wJHz(&OdWyjnpeebYtvm!Zr}#u9 zj6oNmBDs>SI3%!2?nLB)Ar_z~xt*;#1Y4!pC&I!&50Lb+ufoE9;Gfe{<};pI& zKenYH^mO%kpARv>B_6r<3yLS-RKjPuu-qNy-}K3S?!e1@3{9q1!h44e@lR4!I-ES5KAbq5Dx55wE}S%+CY&OiLE)wXrNS)*S_KjXY6Wry zdIe$yDg`nHIt5Y%8U+dkhMt=}ls&h4XnRO{PV*~Bdk$swfsHxHd+2+JPub%k@$0I^ zSLm!cqx}DVmA2rYD<%J9D(aumvIn-#4i-p6={HygEJ6H}Bl}OlGUUqXf4?FVSmpRv zhV9?uSF(S>ul^bP0+v+%quf6heE%B;3(0&v{$nBLUl}Z9tN)q7`Uf8NFIPhTxmfal z8LaMx~>UU;;BXsp|vie)$tKXUZFN5`O`K`YdzWSZn-wI#-&g^f6uYPCtU&2?v z`KMDw*5AQk{bP9lzhSWc#pwJ04#Yyv5RilQlm8ir1wbwQNbCt<9grXkR0x20 zczFS~2nGg0c%eWf>^cYlm^Cs11R%7K5C>910HWtl5(~KT7m3A>B%XlJUr8(=@ior_ z1IQ*A5Ca1U4MBi_fdc3RG6-H550F#HQh|WvZJ+=lBm_`bf`AkR7#SDFhgz`aPx#|uzU$OtGv`20!)=mfY~0H_&1aPxH>z}g4_1w)av6mTp6 z)a*JlAQPlSR^Sg7>skXyEdUz0Zu#%lAzShn77M86pDY$o+Mg^IP~smf)^+uMvslPd z{$#O$n*PCJU0?sjV*NHW(!kdNNl*dDNG1KDoL|Tl6xonp0NFLIgCywwNP%n#|L=gj z21Dio1f(}0&yjHgzccs;hXoi1XwDxX7Sb003<(KhU7PM2#Ny)x_&KCb0D1|?=bFR< z{NfK13+WT!YZ41t1Efa)>3)+~NT2uziG@5v#{D9(kXrpkVqH51a4(Ec2pRtei3RBS z7l{QJ8VS=OnZ-X*EI`?Rpjb#{|39WhJpYAaAr0{h#X>sB zwdVoy-=SDQm-sit(Z8Pf|0gKczj)~U2Rs%)$Nl25gpl6G2jl;L#$y2<_?yQ9ShK(I zSTF#b`jf{3^8$VFKj*Q)|3*94>iXlg=r@lgBn0@$zkCV#XB-PX9$Guewo$;IpunE+ z!NYp0>d%i@sdd^_#o3hE<-}Z{_}p^e#LADS92)X#Dh?ExYkCczX?(A+(DqlTPq#z7 z$^HsqHT$6uzG}w&1z};g2HXHKhGH-Vuz}b^v2p__K`fz|h5>>g?ojN-01VJ=ISi5j zCeU3utk(gzK+JNOj|2EYTyogo0`Nh1x-h^2oFI-atd9Y-Al5EShX8=u?ZVy-K+6WP zVc-TZX0x$jg$IyiGqGVR1c0+S*|2*8aI+Z;FxUgwv)K!<{LVO5mH*~*>;m*P ze~)Z&a};WSnQT6Dv{Zl7Y$0>hr~aDR0_NzG{w~>Kt0=<$D%p@#w9o!F*&?f`9{zgS zuvPR^fA4G`E&71_Dfl=`V0?V+JI!*uxRF>!_fw+K;Vl@veDMp$yqHRu!_E5-OCT+r zydv@2(+@lL9tiPZMBEqR!7;hWPk$2l@ltKT^1gN{-crNu_&pYYD#BT6;NslNcup}+ zaOm6coMD`Z&^KWIrXYT_Z{9qmAfbwH-25#;f&t%(d0IgtZr_M`k{bLH->ha0I|3bS zShKPn-ZYkLv#uS{G&WK51H=tcEY)T;1imOXPqQKdw;s#3`5A(+9-ERN5eL^e=8 zTlLCd8|Y`P-enTBDA=u%cD%G`A*}{>g0!fzt&i;ZY0*1d?d?RkY$rC20&7*agG{4U zw_4kYOryHC>e|7k(T`eR+DV9_5Vbx)@QR|vv>G7oOX`+(=xrK%rdI(>4zc&?cOUt-<{;S6!b2Hzy4Y~T z!*g?1f!-8mm^02s7#^{hbIgXS5K5Bsg$+j`{B_O`po@h)&iT$ppb+sbXP*tdCls91 z$A;Gv{xN3*=yzcbIn!)JJrTP(=LIP2p}0A%1vl8k!*dpa&KRbU^Q{1%J)$RPw*c)! zD0@y%0q%$J4>@Z<4-I>fGg(0RA!04(v;g%*D0NOp0nUr?)SP9Y+lD>O87&}q5iyx_ z2=v2H;hX`0hz$RnvjuFu5ay9HTR^lHahh`pbk0z$oE89+3=hs(Fvp+{lgasNj!zxY zk+TEz*ie?7Zh)N(f0y&q94j@E5)~)b!=+i%(d^((6MWpHQu((uPbwVOmR14Y_0$bI9HaEki1Q$ifLLLwaS%-3e7!Drv~X3G*VbB-e6P__Lo)?z2_s=YXwT&sA{` zU;13xRX$)Hajw~_5U_wa_sOb&N5E{Z>#EqPuXwKND&*9^G1qog8OWAgW3z>B1L59F_36g&zQ;8K$=I9UuxLh8Ok)AFzS%3}HQXg3>u{`^+ctqTaF&|8Ho<9d@)~BFpl5Js4HrPazzJ*aYz2zIxobGKg6rV) zHLP1fo^bIRo~@8GII0_nJ`fvz+l`GrI0R1Y#zY?^3+Hp=qz~zYl z=fkOhy=;Qa;6lKT7$GZgOt;&5ffR6Nx4U}5NpLbZX1$;%Z~-?iy^t|Df!m$gKp33M zjbk>r8cyfNIveB)7jxs84LO3NAA`gLiQspR*~Eim;H1Y);z6o#$T6pQ$RHf=n6WXC z2hMTK>P4pCHnv0HMLO47y+h|kG1qpqgMNNfqBUlR^!ygEI%x;*oTRC>bcY65jnuZi zgAFW0YR%fA0M;M1&Fv7O-CzoRem_)F>3*0rWjPM3zn~OJ65Aqi76ub7jw<7;P$rTv zrQBBqOw?g2hOd&D$itKuU)3R$<{D?y^Gk_RS89bD~gIj5|D%< zAP|Bep_c%PhBQJ+kkA4GD^_|?f`EbwmNkkHAlDzPIrt$Api z$-cQs@}Y?*`}`)@L)-wnaFg^y)1~YXprm3P#!k5`w#~$defsj+ZMaA5%**SynaZ=n zF8_Spn9Jr~mbh->!cM#_dL7rzF1Rdp-Bf~o0%)}uC$g_z7N?omv*RwWqv4v^xtBN4 zOx4*@m)CR|7qD+#mh3X|XD45Vb>Tjw@JnMZpz@gC4KPxfpcdl2OL%lb_x9}ql`t>1kA z!J)5>ug*RodmbOh+&b;rs-C|Z^$G{n9pt7guU6$qvro3JW*H~5uK_51Iq5qB=R#~j$8@HyN+L%Toxq|uVp%jS=^y2m0PNwh@_V1G!*vVZ^5y(0*Y6MzNY)zzLIf)pCtc|A_qbXv_k#^;7#3*EaJhcKXDz+?A zzubu!n(-V@*@3nZ+a76M?m~>rsKZllqETX!k+^aSF+8KTf#Qbt5z~m=Urr}RXVf=P zd(bPz7Dwup6W*OV^jwv)9&IAFCDO8-_AcU3ohtP_T2TxZxi|RGark6P&}OTk&*7=I zlN}nPuH`E43J%@*etUGW1Y6qWs! z3CUgOj)+$+XJ8Ssi7^!q2nH$f=9SLDt>UiJH`T+Fa>}2jlXSM86r)r;LD}FnbH%r0 zuNb36i1))&-kw`hag35;rjU_PX6z!TeCFJ?ir7m&^2#|0a@nSm@?CeFo}CldZH}PG zDQ6|zt8k$xXPr~4I8RYj&P%voA*mi$UBM6)30H6yRa$mVzar(5e}>sMdK_YJ;+2Z0 zl!V*w$d#THR#u2z%}tUG>PEbEr3+!Awo;0>MvxKPBoz>lYo&L)Kl5mQ z&5N}z3{+mcL#2DW5A$UHvlrw()JS|lWng>I;4iEvyGT-~=y(IYL-#A*wJ#aG%zCuT zJsDY@*ikXq{^MW@>tUgrBQjViJ+Z#xefx^RtE|U`?k&jv6Xh?I`_HYaIN2^cnDMFX zu#1-Rg>&$Vv+dglb3T`qBf_cIsgGr`mB!5IT6F0alxp*-4}BX#=d( zH?)6B#9&imXlo@n*wh-@a)~qLDH*i&5@*X(KhXY>$d*e9rTv^3E0_9^wlwkd)s*Wr ziNv_8sa-VT#289S0!=iLLrHCz+7kQI zaVb}5;`VWIscp0$?PF|GIJ9;49Glcy+6wzKbtyTt4fbd2Qio`Zn%Jn6$Vsmu+M1?V zRB9z{S<~sI&BIf>DM$mO$x&Mt_E~E7DV@5TimJRe@g1AL8rNYgw(YyoreBl$yceJ zcK%Vx*I=Fc{-KUnZ97dr$`@hNpGjW&#CYoP5mltu|1{vER^V>wrv@L9fw~u-Qa`E% z>Kr)X24fdE+ku8qo#0_(e6T5YC_gEya(;4-5dGcji8o#t;7c;iUz6Bm+7 zZXzC+MzLYuI9~hIg`AVygm+K#u?e_wv=+Ix`C+%4cSeEz%bR^Rt8QGYecbInl=0bq z;wGQKTyb02{^-rpx}RKsRjH7mM~VzZW@GJA(~xy|*YheZi3f4na&~9Zw$)j=CaSzl zBvfWo?6T6->h`%NtGu#5sE{pc7oN7c&cZbz=Y>5XE!)QKMw&{Uy=ziVOVdI3Y?R%( zG=)nEdG^gWd+S!ZUdwshmKLrWoQa;vzOvx8aTA!mdzgc>B1hD^zhjHZGJ*vBTTMMUts%^KG#3IyR@)QS|ZV zHWBNnoAHJ=VH^q>Z)X$5p{~R0+k{$Etnt=1k=9fdJkBP(mg0@yZxdZhU4hrDJEcOw z;VtVTRHzF0y>($Z6nDHsT~rQr1Kyx6)SI#&Z(A4XP1VGk)`bsI0`UjxqKBx98g`>j zt)S>Nn4uz8P-PqTpu!?4#0ESnDw4XU0fP#~Q7jv*P?0#Qa)U7{ypqCf*oTU)q%LdF z%{`?++1p@|8=*km-e8m)mPT=Hu+NQ3qe?blb3@%J4h=TBk?vHD29woljH}71p5d6S|*b+hE!w&nv%`CD|j#yGPH` z=uza|@5@@;^RIw1sjMwM+XBjyvtT`&1MWFyp?i8K3nqIu1XOF?j_z4AR#ALAy+?Aa zDyZT26R6A#oZDTLyNd%Vt5^G8^9#{j;@;*QYkYH7pvLXHjcwgmYy*B7w`7|GDR0yR(SK~p3^?t zc-i~Q6 zY)&Rt=X5j<_Wn4m8xT{};P|t8@pDHCJkPdadoPH@7Z6!g=SWS@LpMnF;t2Wl+`I;d zUiV?20E1t1p0$wsb4MBidIN`p#(oKWqD7LxE^# z)y=S;@Zrs4nSuBC4~tz6EF0RN$7n$JIt;syMFrLuQ(xr)p;oWKFmWt&;&~87JMTaP zyw`Tvbu4nCE{Ix^r`;gkYdTCF3!kXvQ-bq?7ntIx!Ct&M&4WyFcD;V%=O=ZxP_cF*sSW60UoD}FR^ z@N8@IV>uqNZRPlp!TGbT*3TQb0BOzfa|g%JwjsZXC%*|7{)yWiZty|9yQhq zuWo0K?$e5{?pQXeTYL)MzIW83I0D|WeblHpEWO=z)V??>y+d*oTO7)0cNn!Pj%0wn zvq^Dye|x~FV{vqU$Kp|)pi|QA2BYRd5z-x7Mh%0)F0@le?Si5%bihXSgF+9q+v>hQ zInlPJL_)rP)H~?ttJb_x_n?!n+D1kL`M+qlMvoHt$F$q3N16PPlGgN5SN@5Tw*Juo z{*mC;3!_y2@!+;sqrQASp&x$y8UGVO#L|qgM9!`B_)k&nJL`=6?o6g{-xzYhQF^t> zG1zJhX0;(k)Er~A8i#=)F~+O+mWdw1>|1SG23vyBjoGtF)DUA4W4sBr4Pz8zbXk;! zv5zsi3=_v-V+={6b{Lx&90{g|F^SpRD$2q*#+bIke#A@}YGBOGjn~39V+_rWVnxXq zJ9Cp**gA~9xuKP)HOAT;X9ZKi;LP_v7xl*MH#dC_TY=H5*|Sp=hq0_N-U(B{?5#1% z7Inus)R<($Hed{D48276V{B`1UNB9JY0ch`qJfwLHKre7i^_H*_beCHD>FkHFNevN z?Litvh!V^2NRtTInlcR1&{)*6%nFG!hAEdBBllK_GRyWMO)Fr_%5*dK>=4~sW|3jM z1Gc@)D8uNcsB4*hhRIEsWEnQY&`s2#%m%PPm`0gN#@-&$fHKDn(;nF3GMz(v){7dH znIAG<58F~^c*y9yD7DP)kjZ%%tW5uq;XYB@GSjzQAjk=qe0vqhY{E6(-U8y8@WpR0 z0ZB~wmbce|&?Ox9_6m@%grnc40Z~f$s<){?Y7!2Adt+3tI9z(A$Hk-Tdw#m_VSG|O z?(X{LH&Gtz4b*R?uCM-(^!t*IW4;?zS10|)>>|HdMRv6ME>-<8N!NsM?Ud#7ZS8A) zjZ`-$S(wnSMOfBt>xlK0S6!E6WJ10cW?6f^-OATRRVB&Z#Qj>7W&QPz=e~bp3K{vV zj@FUwtFF2s$pl#7hCi$AYWMQ>SJg~%G+|teepcVr@zGaUby1Q|)j{eh<>%t<%YCt` zvPtGu&eRCyI`NK($+nKtgxAK)n@v6CG%U|wui8oV#|NBHewNTy;nRLBr(J!JpOE*o zBvJX5-Rm9W`8iwNc%$gIapSe(aeRH(gsc~KZ*F>lO<$5ql|3~ntEKU^n-@y$T#`bS z4fR~s%f>f7<6E*?+IsksvLnYHwcKth4yIQIAIo~B_QzQI=Z>6Jb1fqUc9HyF_ho}< zYqX9CW}RBcd0$0USkhjweuWL5Vbl zR{JhrM^$)|ZIx?BFnM;_T_ikK4Gm=+$cv&HT z?b8^G0t-Xa&r0k!BtLN-Y-|jPB(9I;)R4Ty^~z&2NN(Z=<(vCm6JIK9Pce7oXVUB!V4A zlyi@C2srbJy+WedVdFS$B$l0yO)Q5*w$r!a)RMgI^y*@BNbYtZ=*18zuyHpkHj+ea z#Gp8pBxa*-ZfqLKwGo@k=_Lg;>iEPak*JOOKAe{%-$uRR*dh|6(O{S}K?+veEilkg z!>r`oZS_#ojfzcebymYhapv0Pm~fu8da3DE#b&j-sTovp23rs3?^cWrZ*|JYC~_XR zdgkliioMb50{jAT-naVa>(FD*wNik4AWn0uPrhDXEU%TGZ_vjXYYk%UmWn;uN?>86 zIQLr*0fU^_YppaEHks4W%3|p_#-42@v-J6!(jU1F6oBRBk;6bPSVtZO3>1SUC_|7%4rSbq4+&Gb&5ux|qI#r`+9ylnGtyj1D4_f6upynIdf zLgxp6khXlG&{r4yy3c(~Kaj_}`?9Og)0YwGShkJ7w7sEMsfr07rk#`_VZS~IN2vV zk}*~m*saC9z=OXy+qZorXRJK%eKGSDPx?i4-$>$iQKIMAJ7d^VD#5I=BdX$pMb(7~ky5z~-C!hByb%1+V zzC`}wQm!udwtPw$*NOX^{3Ro<1veX5ZgD-ih1`qsTqABKH-*b};TCW&xp3{dx!lxl zu0OZf<)Q=^%gt~}N#s(v`7W32xi;J!m((V%54WiMqB_@vo7J6Cz@>9}z;KD{$jt*b zO57lBiNr-=u8zxXiIfvug3E6bm#|!Omu!jDa_%9Q!o-VmTtk=4#FX!_yRzY0yX4rX z)^WXEikdE>xHy-rrj%T+y9=-Bk`H&kOI}mzFgMVpME&AQu3qyA6a9ks_xCJo2$1M91&lk0~V)o(Kk1`Im>aP8jWZN1;JzIKJTMe7|+;AhV^KYrIXG{E{)^bbd!^e5G+%L4QZQyh`$ zzuCThmB=(qe_p~2>ec4hHf?{$8G6KOD_ZKPpMKi5@y1*0Aug-7NWu}99%tKp<6Z4g zH*2U!*ikRt+!;em53PUh+O9HU@24;cOpzEJIRo|q?uEII8tFy#rSChv2h;=h7v6G2 zr}OIXzV8|u@CT7!iygJoOVGbdcCHu@4$v#S1bi+1hQ1@&6*+(nAQol-3;#lN>A6na zfLwrO;q{iCi~{uCb6u4KlmKR7e#oQq6N!1lh@e%)_o|K)m*fp#e{J-ueteM z@6a%7tY}e-PCwhXLF4U)p(xhSK)*EpE~4j{&E%x0(~F)dyyr^ZZRG|BKo9XZ)%QJ6e|Yw^jGr zw!FVRA=&TVz)u=!8G9W#UYT*Bu(}1-e`BO_tZ(9vBdY>ii5Eu8wd2AWpP%O)9)<8d;=$Ub-dvwZTW(Pcai)wGH%#Qa{y9hy_*Lw%MVbD}6uu z{r$mrV@t-51#Q&+P#t49emO`>>zdRq6?+fozwy4$$L$9<2Qp) z+Pn*QtHtZ8+B${@M_ChxgZQ_7ekgf;ppwT12hz8&30`&HlyTU&zUj7->;vWS_h$zm zpR`{$9v0kxe)8Jj7bCHW=qmmHB0lF)UGK=-`afJh=ZrT6Z78{QpgO%D{fFe|$no-^ zH6_Okhg#pts>Ub7kZL%=9w50RE0DR1L{KEJRzRF}l@ZFNGR|AYO-*FyabFz5y z_ux+L0qHT*@oRkL$^6MX!CfT-2gVrVd3=q@qRG<9PJ!9gcsd_F$(xiF`eC`*FN+2q z-&iMhMEuF`pX*;<`Q=BS-xsa6@%_iAl2ETjL+HxRAA^4S=NrDtCtBk0g{>me7?F*_ zF(D6hVr5)@QaB}5CgLQV5z?S@UWWctfAD%~?L9wjTK@BdR6bueq)g|u42`{Gj}-Ts zh=uU=kmovyGVW}}J<=o*CE|B&HvEC~T9Ku~$3yPu z#9VYX+p$$DR>Vm7O2|{4go|!wid&_vMC64zA&+!87hTL0ewBJI;v$?A(xj7gk!}Y6 zReGn0gm7d?xz3r3v?n{9rLslrh0{Xnbk1FLf1>Ct?IofvoD@=}bM~U^6NOHxk0SoU zMIkLZ7cMfMz&oXviwFxJ4Jj>UA9P0S5R-}!!3w8_)Re{_bVDeLNgIpE37-jhSQ>lK z1)&fxRUtwV&I)NPJ%5mnfX7Sk5D^s)54l%*`XKH04!qP&5gXwfA+@E62iz4p@fzr{qywY5T#)7wjjckxr*ZzP3I3+Dkj$)X9ZRoEzE-%kXrET$+2j3nE_u zQ>1S>Du++`Xh$dl)l0z_&~8-(KG@MHMHNUZ5J&LxqyZ=HkUw;wy$OATR0}c_7&8&c zOhG^iGfxK5lI$hp05`*6fwnZ+5A?&(oj@h)PXDVn{jVV?D~PiN#i76gU0Z=x9~5J2 zD(Dl?(*ys_nhXIw$+?<)oT!YIcM!`lBZu!r-WJAGu{30m z|BB`GY~#bmWlKUI8aQK1?)d-W(>8WcP2K@eBqXX$G&Zs8-ySSOb2pp>|t$>>E%$qNwPsW5f4?yP@>hPaqW=@Bvx~c@C zV+cC`?G8hYeAQty&|OdPKUMJU0lE)5Eu=WFl90Q-8t{v0sn{~f^Q@{GR) zOi2-#P#~d29jOL=D=8vT3rWx!utqPyAk~H7;Llg^rwCGrAdMtM0i1^cI1zPfK&J;_ zdIl>0`!i4ntT%8=8Mw8D;ndewXD=@gbvWGD*H_Vt=s}_=GCZltOL05k&lmH{gj z0kBv%kVy|j422?ELAho?cM)PjfO|4X-bBDapjTExdZ2!c5Ec|x0oYN4c(af)_>&RZ zw-wa&UFa0rw{50L8iS4j!7BfXiQyQezsq9fN$~I>gCL?0R(IuRybcoFMe68yV`vbT@R|yr!O}dgVrg+E;fY z(5adm{S-)K3c=gWYoiv3_C_Ph=$IMGSb=THE;!UP^fm!RS~l}zQGLlaP40$Q7s_ANRAR6k27bf%(!<`szy zceo$H0}u&fhDbm@bpgvELsMG|+P^3uc7iBbR>+;|$_RBO)OG|~9f8;dUyxHkIJ0RC zPb&t)P0LCT9J=OYolc(33pfak!up<;=H&cRdYWN;SNXYlA)E<_aSqbH7m;ATd>fJA z1wf?o3?jj!`d%{27wqwvS~Am!n3pJk14@};ono6LR|52`>12`T@!1exP*d(|w z9Ek5kCUkZ1|1Kth zZVajn+=lE4Z9!$g1`9+4HUkSjQ*f&V{O6cJ`!eV@1d=_0?f?skh*&^yVK*|=#8f&sUx8oNOtJ}s4t~rE z*k|rYpq#ULX5Ye1J;-#Osb*&HOt3VsJ=2#m@L8FTK;8p7YYZd?0)Z8fc5Ry@5Ap-u zUkU|RUkZuOr#`@GjS6U=A~T()qy$2G3tq|4r_UV)AWZlCG&FFx0)+7k%7O#Vf;4dT1f1#2&!@Um2?TSWpQfe?h2UP0riK7sfflAg z0lF8a?S#aN&}SAlH8m6noIO7cJVAF5&}TLu0{917*e(L03W9ep$cI#dZV~2}1s;1A z!iE5G%fD(DIHXxvpE3#soHNa@4~;+r2Sf|ffCHMZ@+qT$Xl+405LX_^mZ8rqY^pnV zepMehXns|nDhQ;#5T~kW$Su(P`qWe*pFa!Jlz`W$g=vrrsfB4O=&#G7l@{U;$oZgK zDCjc-2jtFb;kW^BKPtc}&1^m|PXdVe?YR`XDz&8flfnD|*HjE}cO_sWU_KcFt`3|f z0iFUqU_eauT{CBL=tvHo$e{!I-1E5B_hb=VsDh1)r Date: Thu, 12 Apr 2012 18:09:25 -0700 Subject: [PATCH 24/52] Add back other unit tests. Disable worker. --- test/unit/api_spec.js | 2 ++ test/unit/jsTestDriver.conf | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/test/unit/api_spec.js b/test/unit/api_spec.js index 72c6434b1..318dbb42a 100644 --- a/test/unit/api_spec.js +++ b/test/unit/api_spec.js @@ -4,6 +4,8 @@ 'use strict'; describe('api', function() { + // TODO run with worker enabled + PDFJS.disableWorker = true; var basicApiUrl = '/basicapi.pdf'; function waitsForPromise(promise) { waitsFor(function() { diff --git a/test/unit/jsTestDriver.conf b/test/unit/jsTestDriver.conf index 8ff218093..b0f917b66 100644 --- a/test/unit/jsTestDriver.conf +++ b/test/unit/jsTestDriver.conf @@ -28,6 +28,11 @@ load: - ../src/bidi.js - ../src/metadata.js - ../external/jpgjs/jpg.js + - unit/obj_spec.js + - unit/font_spec.js + - unit/function_spec.js + - unit/crypto_spec.js + - unit/stream_spec.js - unit/api_spec.js gateway: From c207d4a7d6e383de4c9b1b1eedbda6f56860f1b7 Mon Sep 17 00:00:00 2001 From: Brendan Dahl Date: Fri, 13 Apr 2012 09:25:08 -0700 Subject: [PATCH 25/52] Add docs to API. --- src/api.js | 118 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 109 insertions(+), 9 deletions(-) diff --git a/src/api.js b/src/api.js index f1baefade..74c58a61d 100644 --- a/src/api.js +++ b/src/api.js @@ -1,6 +1,16 @@ /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ +/** + * This is the main entry point for loading a PDF and interacting with it. + * NOTE: If a URL is used to fetch the PDF data a standard XMLHttpRequest(XHR) + * is used, which means it must follow the same origin rules that any XHR does + * e.g. No cross domain requests without CORS. + * + * @param {string|TypedAray} source Either a url to a PDF is located or a + * typed array already populated with data. + * @return {Promise} A promise that is resolved with {PDFDocumentProxy} object. + */ PDFJS.getDocument = function getDocument(source) { var promise = new PDFJS.Promise(); var transport = new WorkerTransport(promise); @@ -31,33 +41,74 @@ PDFJS.getDocument = function getDocument(source) { return promise; }; +/** + * Proxy to a PDFDocument in the worker thread. Also, contains commonly used + * properties that can be read synchronously. + */ var PDFDocumentProxy = (function() { function PDFDocumentProxy(pdfInfo, transport) { this.pdfInfo = pdfInfo; this.transport = transport; } PDFDocumentProxy.prototype = { + /** + * @return {number} Total number of pages the PDF contains. + */ get numPages() { return this.pdfInfo.numPages; }, + /** + * @return {string} A unique ID to identify a PDF. Not guaranteed to be + * unique. + */ get fingerprint() { return this.pdfInfo.fingerprint; }, + /** + * @param {number} The page number to get. The first page is 1. + * @return {Promise} A promise that is resolved with a {PDFPageProxy} + * object. + */ getPage: function(number) { return this.transport.getPage(number); }, + /** + * @return {Promise} A promise that is resolved with a lookup table for + * mapping named destinations to reference numbers. + */ getDestinations: function() { var promise = new PDFJS.Promise(); var destinations = this.pdfInfo.destinations; promise.resolve(destinations); return promise; }, + /** + * @return {Promise} A promise that is resolved with an {array} that is a + * tree outline (if it has one) of the PDF. The tree is in the format of: + * [ + * { + * title: string, + * bold: boolean, + * italic: boolean, + * color: rgb array, + * dest: dest obj, + * items: array of more items like this + * }, + * ... + * ]. + */ getOutline: function() { var promise = new PDFJS.Promise(); var outline = this.pdfInfo.outline; promise.resolve(outline); return promise; }, + /** + * @return {Promise} A promise that is resolved with an {object} that has + * info and metadata properties. Info is an {object} filled with anything + * available in the information dictionary and similarly metadata is a + * {Metadata} object with information from the metadata section of the PDF. + */ getMetadata: function() { var promise = new PDFJS.Promise(); var info = this.pdfInfo.info; @@ -84,30 +135,66 @@ var PDFPageProxy = (function PDFPageProxyClosure() { this.objs = transport.objs; } PDFPageProxy.prototype = { + /** + * @return {number} Page number of the page. First page is 1. + */ get pageNumber() { return this.pageInfo.pageIndex + 1; }, + /** + * @return {number} The number of degrees the page is rotated clockwise. + */ get rotate() { return this.pageInfo.rotate; }, + /** + * @return {object} The reference that points to this page. It has 'num' and + * 'gen' properties. + */ get ref() { return this.pageInfo.ref; }, + /** + * @return {array} An array of the visible portion of the PDF page in the + * user space units - [x1, y1, x2, y2]. + */ get view() { return this.pageInfo.view; }, + /** + * @param {number} scale The desired scale of the viewport. + * @param {number} rotate Degrees to rotate the viewport. If omitted this + * defaults to the page rotation. + * @return {PageViewport} Contains 'width' and 'height' properties along + * with transforms required for rendering. + */ getViewport: function(scale, rotate) { if (arguments.length < 2) rotate = this.rotate; return new PDFJS.PageViewport(this.view, scale, rotate, 0, 0); }, + /** + * @return {Promise} A promise that is resolved with an {array} of the + * annotation objects. + */ getAnnotations: function() { var promise = new PDFJS.Promise(); var annotations = this.pageInfo.annotations; promise.resolve(annotations); return promise; }, - render: function(renderContext) { + /** + * Begins the process of rendering a page to the desired context. + * @param {object} params A parameter object that supports: + * { + * canvasContext(required): A 2D context of a DOM Canvas object., + * textLayer(optional): An object that has beginLayout, endLayout, and + * appendText functions. + * } + * @return {Promise} A promise that is resolved when the page finishes + * rendering. + */ + render: function(params) { var promise = new Promise(); var stats = this.stats; stats.time('Overall'); @@ -132,10 +219,10 @@ var PDFPageProxy = (function PDFPageProxyClosure() { // Once the operatorList and fonts are loaded, do the actual rendering. this.displayReadyPromise.then( function pageDisplayReadyPromise() { - var gfx = new CanvasGraphics(renderContext.canvasContext, - this.objs, renderContext.textLayer); + var gfx = new CanvasGraphics(params.canvasContext, + this.objs, params.textLayer); try { - this.display(gfx, renderContext.viewport, complete); + this.display(gfx, params.viewport, complete); } catch (e) { complete(e); } @@ -147,7 +234,9 @@ var PDFPageProxy = (function PDFPageProxyClosure() { return promise; }, - + /** + * For internal use only. + */ startRenderingFromOperatorList: function PDFPageWrapper_startRenderingFromOperatorList(operatorList, fonts) { @@ -168,7 +257,9 @@ var PDFPageProxy = (function PDFPageProxyClosure() { } ); }, - + /** + * For internal use only. + */ ensureFonts: function PDFPageWrapper_ensureFonts(fonts, callback) { this.stats.time('Font Loading'); // Convert the font names to the corresponding font obj. @@ -186,7 +277,9 @@ var PDFPageProxy = (function PDFPageProxyClosure() { }.bind(this) ); }, - + /** + * For internal use only. + */ display: function PDFPageWrapper_display(gfx, viewport, callback) { var stats = this.stats; stats.time('Rendering'); @@ -216,13 +309,18 @@ var PDFPageProxy = (function PDFPageProxyClosure() { } next(); }, - + /** + * Stub for future feature. + */ getTextContent: function() { var promise = new PDFJS.Promise(); var textContent = 'page text'; // not implemented promise.resolve(textContent); return promise; }, + /** + * Stub for future feature. + */ getOperationList: function() { var promise = new PDFJS.Promise(); var operationList = { // not implemented @@ -235,7 +333,9 @@ var PDFPageProxy = (function PDFPageProxyClosure() { }; return PDFPageProxy; })(); - +/** + * For internal use only. + */ var WorkerTransport = (function WorkerTransportClosure() { function WorkerTransport(promise) { this.workerReadyPromise = promise; From f679f0dfe8bc0f6d2f54a8f645576011ffcbd9ab Mon Sep 17 00:00:00 2001 From: Brendan Dahl Date: Fri, 13 Apr 2012 09:33:36 -0700 Subject: [PATCH 26/52] Move open after everything is initialized. --- web/viewer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/viewer.js b/web/viewer.js index 5b43ee7e1..b1876c814 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -1284,7 +1284,6 @@ window.addEventListener('load', function webViewerLoad(evt) { var file = PDFJS.isFirefoxExtension ? window.location.toString() : params.file || kDefaultURL; - PDFView.open(file, 0); if (PDFJS.isFirefoxExtension || !window.File || !window.FileReader || !window.FileList || !window.Blob) { @@ -1316,6 +1315,7 @@ window.addEventListener('load', function webViewerLoad(evt) { var sidebarScrollView = document.getElementById('sidebarScrollView'); sidebarScrollView.addEventListener('scroll', updateThumbViewArea, true); + PDFView.open(file, 0); }, true); /** From e1b4fc5ac73c7466ef6b12b80e93119a9520531e Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Fri, 13 Apr 2012 16:04:57 -0500 Subject: [PATCH 27/52] Enabled workers during testing --- test/driver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/driver.js b/test/driver.js index be66aa216..26c5a156a 100644 --- a/test/driver.js +++ b/test/driver.js @@ -10,7 +10,7 @@ // Disable worker support for running test as // https://github.com/mozilla/pdf.js/pull/764#issuecomment-2638944 // "firefox-bin: Fatal IO error 12 (Cannot allocate memory) on X server :1." -PDFJS.disableWorker = true; +// PDFJS.disableWorker = true; var appPath, browser, canvas, currentTaskIdx, manifest, stdout; var inFlightRequests = 0; From 42911f1fc975b6f87a39ddb7bf66dc44dfeae37d Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Sat, 14 Apr 2012 13:54:31 -0700 Subject: [PATCH 28/52] Async getAnnotations(); hide map and xref for Dict --- src/api.js | 19 ++++++++++++-- src/evaluator.js | 2 +- src/obj.js | 64 +++++++++++++++++++++++++----------------------- src/worker.js | 16 ++++++++---- 4 files changed, 63 insertions(+), 38 deletions(-) diff --git a/src/api.js b/src/api.js index f1baefade..479134bd2 100644 --- a/src/api.js +++ b/src/api.js @@ -102,9 +102,12 @@ var PDFPageProxy = (function PDFPageProxyClosure() { return new PDFJS.PageViewport(this.view, scale, rotate, 0, 0); }, getAnnotations: function() { + if (this.annotationsPromise) + return this.annotationsPromise; + var promise = new PDFJS.Promise(); - var annotations = this.pageInfo.annotations; - promise.resolve(annotations); + this.annotationsPromise = promise; + this.transport.getAnnotations(this.pageInfo.pageIndex); return promise; }, render: function(renderContext) { @@ -209,6 +212,7 @@ var PDFPageProxy = (function PDFPageProxyClosure() { gfx.executeOperatorList(operatorList, startIdx, next, stepper); if (startIdx == length) { gfx.endDrawing(); + delete this.operatorList; stats.timeEnd('Rendering'); stats.timeEnd('Overall'); if (callback) callback(); @@ -342,6 +346,12 @@ var WorkerTransport = (function WorkerTransportClosure() { promise.resolve(page); }, this); + messageHandler.on('GetAnnotations', function transportAnnotations(data) { + var annotations = data.annotations; + var promise = this.pageCache[data.pageIndex].annotationsPromise; + promise.resolve(annotations); + }, this); + messageHandler.on('RenderPage', function transportRender(data) { var page = this.pageCache[data.pageIndex]; var depFonts = data.depFonts; @@ -440,6 +450,11 @@ var WorkerTransport = (function WorkerTransportClosure() { this.pagePromises[pageIndex] = promise; this.messageHandler.send('GetPageRequest', { pageIndex: pageIndex }); return promise; + }, + + getAnnotations: function WorkerTransport_getAnnotations(pageIndex) { + this.messageHandler.send('GetAnnotationsRequest', + { pageIndex: pageIndex }); } }; return WorkerTransport; diff --git a/src/evaluator.js b/src/evaluator.js index 350ab20b2..50274a9ed 100644 --- a/src/evaluator.js +++ b/src/evaluator.js @@ -466,7 +466,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { args = []; } else if (obj != null) { assertWellFormed(args.length <= 33, 'Too many arguments'); - args.push(obj); + args.push(obj instanceof Dict ? obj.getAll() : obj); } } diff --git a/src/obj.js b/src/obj.js index 200b40a7f..c905a7dc5 100644 --- a/src/obj.js +++ b/src/obj.js @@ -37,51 +37,55 @@ var Dict = (function DictClosure() { // xref is optional function Dict(xref) { // Map should only be used internally, use functions below to access. - this.map = Object.create(null); - this.xref = xref; - } + var map = Object.create(null); + + this.assignXref = function Dict_assingXref(newXref) { + xref = newXref; + }; - Dict.prototype = { // automatically dereferences Ref objects - get: function Dict_get(key1, key2, key3) { + this.get = function Dict_get(key1, key2, key3) { var value; - var xref = this.xref; - if (typeof (value = this.map[key1]) != 'undefined' || key1 in this.map || + if (typeof (value = map[key1]) != 'undefined' || key1 in map || typeof key2 == 'undefined') { - return xref ? this.xref.fetchIfRef(value) : value; + return xref ? xref.fetchIfRef(value) : value; } - if (typeof (value = this.map[key2]) != 'undefined' || key2 in this.map || + if (typeof (value = map[key2]) != 'undefined' || key2 in map || typeof key3 == 'undefined') { - return xref ? this.xref.fetchIfRef(value) : value; + return xref ? xref.fetchIfRef(value) : value; } - value = this.map[key3] || null; - return xref ? this.xref.fetchIfRef(value) : value; - }, + value = map[key3] || null; + return xref ? xref.fetchIfRef(value) : value; + }; + // no dereferencing - getRaw: function Dict_getRaw(key) { - return this.map[key]; - }, + this.getRaw = function Dict_getRaw(key) { + return map[key]; + }; + // creates new map and dereferences all Refs - getAll: function Dict_getAll() { + this.getAll = function Dict_getAll() { var all = {}; - for (var key in this.map) - all[key] = this.get(key); + for (var key in map) { + var obj = this.get(key); + all[key] = obj instanceof Dict ? obj.getAll() : obj; + } return all; - }, + }; - set: function Dict_set(key, value) { - this.map[key] = value; - }, + this.set = function Dict_set(key, value) { + map[key] = value; + }; - has: function Dict_has(key) { - return key in this.map; - }, + this.has = function Dict_has(key) { + return key in map; + }; - forEach: function Dict_forEach(callback) { - for (var key in this.map) { + this.forEach = function Dict_forEach(callback) { + for (var key in map) { callback(key, this.get(key)); } - } + }; }; return Dict; @@ -299,7 +303,7 @@ var XRef = (function XRefClosure() { this.entries = []; this.xrefstms = {}; var trailerDict = this.readXRef(startXRef); - trailerDict.xref = this; + trailerDict.assignXref(this); this.trailer = trailerDict; // prepare the XRef cache this.cache = []; diff --git a/src/worker.js b/src/worker.js index 5cecc6cf2..25f3f52cd 100644 --- a/src/worker.js +++ b/src/worker.js @@ -100,20 +100,27 @@ var WorkerMessageHandler = { handler.send('GetDoc', {pdfInfo: doc}); }); - handler.on('GetPageRequest', function wphSetupTest(data) { + handler.on('GetPageRequest', function wphSetupGetPage(data) { var pageNumber = data.pageIndex + 1; var pdfPage = pdfModel.getPage(pageNumber); var page = { pageIndex: data.pageIndex, rotate: pdfPage.rotate, ref: pdfPage.ref, - view: pdfPage.view, - annotations: pdfPage.getAnnotations() + view: pdfPage.view }; handler.send('GetPage', {pageInfo: page}); }); - handler.on('RenderPageRequest', function wphSetupPageRequest(data) { + handler.on('GetAnnotationsRequest', function wphSetupGetAnnotations(data) { + var pdfPage = pdfModel.getPage(data.pageIndex + 1); + handler.send('GetAnnotations', { + pageIndex: data.pageIndex, + annotations: pdfPage.getAnnotations() + }); + }); + + handler.on('RenderPageRequest', function wphSetupRenderPage(data) { var pageNum = data.pageIndex + 1; @@ -170,7 +177,6 @@ var WorkerMessageHandler = { fonts[dep] = true; } } - handler.send('RenderPage', { pageIndex: data.pageIndex, operatorList: operatorList, From 6bf640260fec1ee16226613e50d96f58fd4bfc08 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Sat, 14 Apr 2012 17:52:49 -0700 Subject: [PATCH 29/52] Fix jsdoc comment; remove resources dict from type3 properties --- src/api.js | 7 ++++++- src/evaluator.js | 1 - src/fonts.js | 1 - 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/api.js b/src/api.js index 996dd1b42..0e27d2369 100644 --- a/src/api.js +++ b/src/api.js @@ -193,7 +193,7 @@ var PDFPageProxy = (function PDFPageProxyClosure() { * canvasContext(required): A 2D context of a DOM Canvas object., * textLayer(optional): An object that has beginLayout, endLayout, and * appendText functions. - * } + * }. * @return {Promise} A promise that is resolved when the page finishes * rendering. */ @@ -415,6 +415,11 @@ var WorkerTransport = (function WorkerTransportClosure() { var fakeWorker = { postMessage: function WorkerTransport_postMessage(obj) { fakeWorker.onmessage({data: obj}); + try { + testF.contentWindow.postMessage(obj, "*"); + } catch(e) { + debugger; + } }, terminate: function WorkerTransport_terminate() {} }; diff --git a/src/evaluator.js b/src/evaluator.js index 50274a9ed..c57e291c0 100644 --- a/src/evaluator.js +++ b/src/evaluator.js @@ -862,7 +862,6 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { properties.coded = true; var charProcs = dict.get('CharProcs').getAll(); var fontResources = dict.get('Resources') || resources; - properties.resources = fontResources; properties.charProcOperatorList = {}; for (var key in charProcs) { var glyphStream = charProcs[key]; diff --git a/src/fonts.js b/src/fonts.js index 7fdab8fbb..7693f5839 100644 --- a/src/fonts.js +++ b/src/fonts.js @@ -766,7 +766,6 @@ var Font = (function FontClosure() { this.name = name; this.coded = properties.coded; this.charProcOperatorList = properties.charProcOperatorList; - this.resources = properties.resources; this.sizes = []; var names = name.split('+'); From 12b0282836d5fb9ee3d72106e7a7897150c05993 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Sat, 14 Apr 2012 17:57:14 -0500 Subject: [PATCH 30/52] Remove debug code --- src/api.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/api.js b/src/api.js index 0e27d2369..18644ebe6 100644 --- a/src/api.js +++ b/src/api.js @@ -415,11 +415,6 @@ var WorkerTransport = (function WorkerTransportClosure() { var fakeWorker = { postMessage: function WorkerTransport_postMessage(obj) { fakeWorker.onmessage({data: obj}); - try { - testF.contentWindow.postMessage(obj, "*"); - } catch(e) { - debugger; - } }, terminate: function WorkerTransport_terminate() {} }; From 50349658affcb3bfa18705c952563289fff14537 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Sun, 15 Apr 2012 21:12:00 -0500 Subject: [PATCH 31/52] Temporary avoiding chrome on linux failures --- test/test_manifest.json | 1 + 1 file changed, 1 insertion(+) diff --git a/test/test_manifest.json b/test/test_manifest.json index 6a083bdf7..207c41c22 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -29,6 +29,7 @@ "file": "pdfs/pdf.pdf", "md5": "dbdb23c939d2be09b43126c3c56060c7", "link": true, + "pageLimit": 500, "rounds": 1, "type": "load" }, From 04c8d1454d9fa30c376b08b667184c6bf449819e Mon Sep 17 00:00:00 2001 From: Brendan Dahl Date: Mon, 16 Apr 2012 09:45:49 -0700 Subject: [PATCH 32/52] Add Util functions to PDFJS. --- src/util.js | 2 +- web/viewer.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/util.js b/src/util.js index 6ec4bc9cb..63f6115a7 100644 --- a/src/util.js +++ b/src/util.js @@ -76,7 +76,7 @@ function stringToBytes(str) { var IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; -var Util = (function UtilClosure() { +var Util = PDFJS.Util = (function UtilClosure() { function Util() {} Util.makeCssRgb = function Util_makeCssRgb(r, g, b) { diff --git a/web/viewer.js b/web/viewer.js index b1876c814..68f0a6a33 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -787,7 +787,7 @@ var PageView = function pageView(container, pdfPage, id, scale, } function createElementWithStyle(tagName, item) { var rect = viewport.convertToViewportRectangle(item.rect); - rect = Util.normalizeRect(rect); + rect = PDFJS.Util.normalizeRect(rect); var element = document.createElement(tagName); element.style.left = Math.floor(rect[0]) + 'px'; element.style.top = Math.floor(rect[1]) + 'px'; From 548591fcf580869803e6c713cba0489327bf852d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20M=C3=A4rcker?= Date: Mon, 16 Apr 2012 19:17:49 +0200 Subject: [PATCH 33/52] fix for opera DSK-354448: onclick fired on disabled nodes with opaque content --- web/compatibility.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/web/compatibility.js b/web/compatibility.js index 9f139b7dd..b63ba35d8 100644 --- a/web/compatibility.js +++ b/web/compatibility.js @@ -234,3 +234,21 @@ console = {log: function() {}}; } })(); + +// Check console compatability +(function checkOnClickCompatibility() { + // workaround for reported Opera bug DSK-354448: + // onclick fires on disabled buttons with opaque content + function ignoreIfTargetDisabled(event) { + if (isDisabled(event.target)) { + event.stopPropagation(); + } + } + function isDisabled(node) { + return node.disabled || (node.parentNode && isDisabled(node.parentNode)); + } + if (navigator.userAgent.indexOf('Opera') != -1) { + // use browser detection since we cannot feature-check this bug + document.addEventListener('click', ignoreIfTargetDisabled, true); + } +})(); \ No newline at end of file From d3a88411ecdb9434a464b92d54bed28257c62a4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20M=C3=A4rcker?= Date: Mon, 16 Apr 2012 19:23:54 +0200 Subject: [PATCH 34/52] corrected comment --- web/compatibility.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/compatibility.js b/web/compatibility.js index b63ba35d8..2a170ec37 100644 --- a/web/compatibility.js +++ b/web/compatibility.js @@ -235,7 +235,7 @@ } })(); -// Check console compatability +// Check onclick compatibility in Opera (function checkOnClickCompatibility() { // workaround for reported Opera bug DSK-354448: // onclick fires on disabled buttons with opaque content From e624971e3f9fc4acec604fbcc952df689650200b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20M=C3=A4rcker?= Date: Mon, 16 Apr 2012 19:48:22 +0200 Subject: [PATCH 35/52] lint issue fixed --- web/compatibility.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/compatibility.js b/web/compatibility.js index 2a170ec37..5c192c9a9 100644 --- a/web/compatibility.js +++ b/web/compatibility.js @@ -251,4 +251,4 @@ // use browser detection since we cannot feature-check this bug document.addEventListener('click', ignoreIfTargetDisabled, true); } -})(); \ No newline at end of file +})(); From daef08cebbeaed6da0c8fe94baacd9f2730ad75d Mon Sep 17 00:00:00 2001 From: Brendan Dahl Date: Mon, 16 Apr 2012 11:14:41 -0700 Subject: [PATCH 36/52] Bump version to 0.3 --- Makefile | 4 ++-- make.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index d4457e08f..9228befb2 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ DEFAULT_TESTS := test_manifest.json DEFAULT_PYTHON := python2.7 EXTENSION_SRC := ./extensions/ -EXTENSION_BASE_VERSION := 4bb289ec499013de66eb421737a4dbb4a9273eda +EXTENSION_BASE_VERSION := f0f0418a9c6637981fe1182b9212c2d592774c7d FIREFOX_EXTENSION_NAME := pdf.js.xpi FIREFOX_AMO_EXTENSION_NAME := pdf.js.amo.xpi CHROME_EXTENSION_NAME := pdf.js.crx @@ -212,7 +212,7 @@ pages-repo: | $(BUILD_DIR) # copy of the pdf.js source. CONTENT_DIR := content BUILD_NUMBER := `git log --format=oneline $(EXTENSION_BASE_VERSION).. | wc -l | awk '{print $$1}'` -PDFJSSCRIPT_VERSION := 0.2.$(BUILD_NUMBER) +PDFJSSCRIPT_VERSION := 0.3.$(BUILD_NUMBER) EXTENSION_WEB_FILES = \ web/images \ web/viewer.css \ diff --git a/make.js b/make.js index 2ee0d4cbd..bcd7f433d 100755 --- a/make.js +++ b/make.js @@ -176,8 +176,8 @@ var EXTENSION_WEB_FILES = 'web/viewer.js', 'web/viewer.html', 'web/viewer-production.html'], - EXTENSION_BASE_VERSION = '4bb289ec499013de66eb421737a4dbb4a9273eda', - EXTENSION_VERSION_PREFIX = '0.2.', + EXTENSION_BASE_VERSION = 'f0f0418a9c6637981fe1182b9212c2d592774c7d', + EXTENSION_VERSION_PREFIX = '0.3.', EXTENSION_BUILD_NUMBER, EXTENSION_VERSION; From 4616ee0ee8f392c3bdd98eea8835fc5acc966c0d Mon Sep 17 00:00:00 2001 From: Brendan Dahl Date: Mon, 16 Apr 2012 11:34:00 -0700 Subject: [PATCH 37/52] Show error on JBIG2 images. --- src/parser.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/parser.js b/src/parser.js index 1c50d0f5f..0697fc0d5 100644 --- a/src/parser.js +++ b/src/parser.js @@ -252,6 +252,9 @@ var Parser = (function ParserClosure() { if (name == 'RunLengthDecode') { return new RunLengthStream(stream); } + if (name == 'JBIG2Decode') { + error('JBIG2 image format is not currently supprted.'); + } warn('filter "' + name + '" not supported yet'); return stream; } From 32b7eba6debcb51d8095a23652a6dbdfb2170c62 Mon Sep 17 00:00:00 2001 From: Brendan Dahl Date: Mon, 16 Apr 2012 11:35:42 -0700 Subject: [PATCH 38/52] Add RL abbreviation for run length decode. --- src/parser.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/parser.js b/src/parser.js index 0697fc0d5..2855018a6 100644 --- a/src/parser.js +++ b/src/parser.js @@ -249,7 +249,7 @@ var Parser = (function ParserClosure() { if (name == 'CCITTFaxDecode' || name == 'CCF') { return new CCITTFaxStream(stream, params); } - if (name == 'RunLengthDecode') { + if (name == 'RunLengthDecode' || name == 'RL') { return new RunLengthStream(stream); } if (name == 'JBIG2Decode') { From 08830731c068d3571d2437245a017089bcee3a86 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Mon, 16 Apr 2012 13:38:27 -0500 Subject: [PATCH 39/52] Fix the operator list deallocation --- src/api.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api.js b/src/api.js index 18644ebe6..f4c42f48c 100644 --- a/src/api.js +++ b/src/api.js @@ -305,7 +305,7 @@ var PDFPageProxy = (function PDFPageProxyClosure() { gfx.executeOperatorList(operatorList, startIdx, next, stepper); if (startIdx == length) { gfx.endDrawing(); - delete this.operatorList; + delete self.operatorList; stats.timeEnd('Rendering'); stats.timeEnd('Overall'); if (callback) callback(); From 1e96c73207f3bd8a9aa1ba3443ec902f6171e27a Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Mon, 16 Apr 2012 14:13:41 -0500 Subject: [PATCH 40/52] Fixing concurent draw page requests for de-allocation --- src/api.js | 11 +++++++++-- web/viewer.js | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/api.js b/src/api.js index f4c42f48c..1bebce28d 100644 --- a/src/api.js +++ b/src/api.js @@ -203,8 +203,9 @@ var PDFPageProxy = (function PDFPageProxyClosure() { stats.time('Overall'); // If there is no displayReadyPromise yet, then the operatorList was never // requested before. Make the request and create the promise. - if (!this.displayReadyPromise) { + if (!this.displayReadyPromise || this.destroyed) { this.displayReadyPromise = new Promise(); + this.destroyed = false; this.stats.time('Page Request'); this.transport.messageHandler.send('RenderPageRequest', { @@ -250,6 +251,7 @@ var PDFPageProxy = (function PDFPageProxyClosure() { // Always defer call to display() to work around bug in // Firefox error reporting from XHR callbacks. setTimeout(function pageSetTimeout() { + delete self.operatorList; self.displayReadyPromise.resolve(); }); }; @@ -305,7 +307,6 @@ var PDFPageProxy = (function PDFPageProxyClosure() { gfx.executeOperatorList(operatorList, startIdx, next, stepper); if (startIdx == length) { gfx.endDrawing(); - delete self.operatorList; stats.timeEnd('Rendering'); stats.timeEnd('Overall'); if (callback) callback(); @@ -333,6 +334,12 @@ var PDFPageProxy = (function PDFPageProxyClosure() { }; promise.resolve(operationList); return promise; + }, + /** + * Destroys allocated by page resources. + */ + destroy: function() { + this.destroyed = true; } }; return PDFPageProxy; diff --git a/web/viewer.js b/web/viewer.js index 68f0a6a33..a25a2a3ce 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -756,6 +756,7 @@ var PageView = function pageView(container, pdfPage, id, scale, div.removeAttribute('data-loaded'); delete this.canvas; + this.pdfPage.destroy(); this.loadingIconDiv = document.createElement('div'); this.loadingIconDiv.className = 'loadingIcon'; From 357805696b1f87f63dfd96026ce703887ff75027 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Mon, 16 Apr 2012 14:49:55 -0500 Subject: [PATCH 41/52] Fixing concurrency and test driver --- src/api.js | 18 ++++++++++++++++-- test/driver.js | 2 ++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/api.js b/src/api.js index 1bebce28d..1dfafb9ee 100644 --- a/src/api.js +++ b/src/api.js @@ -133,6 +133,7 @@ var PDFPageProxy = (function PDFPageProxyClosure() { this.stats = new StatTimer(); this.stats.enabled = !!globalScope.PDFJS.enableStats; this.objs = transport.objs; + this.renderRequests = 0; } PDFPageProxy.prototype = { /** @@ -198,12 +199,14 @@ var PDFPageProxy = (function PDFPageProxyClosure() { * rendering. */ render: function(params) { + this.renderRequests++; + var promise = new Promise(); var stats = this.stats; stats.time('Overall'); // If there is no displayReadyPromise yet, then the operatorList was never // requested before. Make the request and create the promise. - if (!this.displayReadyPromise || this.destroyed) { + if (!this.displayReadyPromise) { this.displayReadyPromise = new Promise(); this.destroyed = false; @@ -213,7 +216,14 @@ var PDFPageProxy = (function PDFPageProxyClosure() { }); } + var self = this; function complete(error) { + self.renderRequests--; + if (self.destroyed && self.renderRequests == 0) { + delete self.operatorList; + delete self.displayReadyPromise; + } + if (error) promise.reject(error); else @@ -251,7 +261,6 @@ var PDFPageProxy = (function PDFPageProxyClosure() { // Always defer call to display() to work around bug in // Firefox error reporting from XHR callbacks. setTimeout(function pageSetTimeout() { - delete self.operatorList; self.displayReadyPromise.resolve(); }); }; @@ -340,6 +349,11 @@ var PDFPageProxy = (function PDFPageProxyClosure() { */ destroy: function() { this.destroyed = true; + + if (this.renderRequests == 0) { + delete self.operatorList; + delete self.displayReadyPromise; + } } }; return PDFPageProxy; diff --git a/test/driver.js b/test/driver.js index 26c5a156a..2f17fa43c 100644 --- a/test/driver.js +++ b/test/driver.js @@ -195,9 +195,11 @@ function nextPage(task, loadError) { viewport: viewport }; page.render(renderContext).then(function() { + page.destroy(); snapshotCurrentPage(task, false); }, function(error) { + page.destroy(); snapshotCurrentPage(task, 'render : ' + error); }); }, From f701a1427a4473f0e9196edbb5e987a699a0333f Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Mon, 16 Apr 2012 15:23:24 -0500 Subject: [PATCH 42/52] Remove operatorList cache from the backend --- src/core.js | 8 +------- web/viewer.js | 8 ++++++-- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/core.js b/src/core.js index 41f9a9c61..cbd2abf8d 100644 --- a/src/core.js +++ b/src/core.js @@ -132,11 +132,6 @@ var Page = (function PageClosure() { }, getOperatorList: function Page_getOperatorList(handler, dependency) { - if (this.operatorList) { - // content was compiled - return this.operatorList; - } - var xref = this.xref; var content = this.content; var resources = this.resources; @@ -154,8 +149,7 @@ var Page = (function PageClosure() { var pe = this.pe = new PartialEvaluator( xref, handler, 'p' + this.pageNumber + '_'); - this.operatorList = pe.getOperatorList(content, resources, dependency); - return this.operatorList; + return pe.getOperatorList(content, resources, dependency); }, getLinks: function Page_getLinks() { diff --git a/web/viewer.js b/web/viewer.js index a25a2a3ce..3233371cc 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -32,7 +32,7 @@ var Cache = function cacheCache(size) { data.splice(i); data.push(view); if (data.length > size) - data.shift().update(); + data.shift().destroy(); }; }; @@ -743,6 +743,11 @@ var PageView = function pageView(container, pdfPage, id, scale, container.appendChild(anchor); container.appendChild(div); + this.destroy = function pageViewDestroy() { + this.update(); + this.pdfPage.destroy(); + }; + this.update = function pageViewUpdate(scale) { this.scale = scale || this.scale; var viewport = this.pdfPage.getViewport(this.scale); @@ -756,7 +761,6 @@ var PageView = function pageView(container, pdfPage, id, scale, div.removeAttribute('data-loaded'); delete this.canvas; - this.pdfPage.destroy(); this.loadingIconDiv = document.createElement('div'); this.loadingIconDiv.className = 'loadingIcon'; From 0380d408e09f2c00489a8f309b732320e50f2b36 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Mon, 16 Apr 2012 15:28:34 -0500 Subject: [PATCH 43/52] Fixes comment --- src/api.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api.js b/src/api.js index 1dfafb9ee..633b1d493 100644 --- a/src/api.js +++ b/src/api.js @@ -345,7 +345,7 @@ var PDFPageProxy = (function PDFPageProxyClosure() { return promise; }, /** - * Destroys allocated by page resources. + * Destroys resources allocated by the page. */ destroy: function() { this.destroyed = true; From 32684fe324839c5d7e084888e6a9f28e251e777c Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Mon, 16 Apr 2012 16:19:45 -0500 Subject: [PATCH 44/52] Change render status logic --- src/api.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/api.js b/src/api.js index 633b1d493..189b94dbe 100644 --- a/src/api.js +++ b/src/api.js @@ -133,7 +133,7 @@ var PDFPageProxy = (function PDFPageProxyClosure() { this.stats = new StatTimer(); this.stats.enabled = !!globalScope.PDFJS.enableStats; this.objs = transport.objs; - this.renderRequests = 0; + this.renderInProgress = false; } PDFPageProxy.prototype = { /** @@ -199,7 +199,7 @@ var PDFPageProxy = (function PDFPageProxyClosure() { * rendering. */ render: function(params) { - this.renderRequests++; + this.renderInProgress = true; var promise = new Promise(); var stats = this.stats; @@ -218,8 +218,8 @@ var PDFPageProxy = (function PDFPageProxyClosure() { var self = this; function complete(error) { - self.renderRequests--; - if (self.destroyed && self.renderRequests == 0) { + self.renderInProgress = false; + if (self.destroyed) { delete self.operatorList; delete self.displayReadyPromise; } @@ -350,7 +350,7 @@ var PDFPageProxy = (function PDFPageProxyClosure() { destroy: function() { this.destroyed = true; - if (this.renderRequests == 0) { + if (!this.renderInProgress) { delete self.operatorList; delete self.displayReadyPromise; } From f72c04b3730c00d7d712f94855bdf25dcf76b315 Mon Sep 17 00:00:00 2001 From: Brendan Dahl Date: Mon, 16 Apr 2012 14:33:11 -0700 Subject: [PATCH 45/52] Fix extension comment nits. --- extensions/firefox/components/PdfStreamConverter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/firefox/components/PdfStreamConverter.js b/extensions/firefox/components/PdfStreamConverter.js index 4467abc6b..f4b5b7712 100644 --- a/extensions/firefox/components/PdfStreamConverter.js +++ b/extensions/firefox/components/PdfStreamConverter.js @@ -153,7 +153,7 @@ PdfStreamConverter.prototype = { 'resource://pdf.js/web/viewer.html', null, null); var listener = this.listener; - // Proxy all the requst observer calls, when it gets to onStopRequst + // Proxy all the request observer calls, when it gets to onStopRequest // we can get the dom window. var proxy = { onStartRequest: function() { From b6edbb38c1eafa35044408bd8eaa2e045d5378a0 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Mon, 16 Apr 2012 16:46:26 -0500 Subject: [PATCH 46/52] Fixes content stream reset; terminating rendering when destroyed --- src/api.js | 9 +++++++-- src/core.js | 7 +++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/api.js b/src/api.js index 189b94dbe..dfc245b03 100644 --- a/src/api.js +++ b/src/api.js @@ -233,6 +233,11 @@ var PDFPageProxy = (function PDFPageProxyClosure() { // Once the operatorList and fonts are loaded, do the actual rendering. this.displayReadyPromise.then( function pageDisplayReadyPromise() { + if (self.destroyed) { + complete(); + return; + } + var gfx = new CanvasGraphics(params.canvasContext, this.objs, params.textLayer); try { @@ -351,8 +356,8 @@ var PDFPageProxy = (function PDFPageProxyClosure() { this.destroyed = true; if (!this.renderInProgress) { - delete self.operatorList; - delete self.displayReadyPromise; + delete this.operatorList; + delete this.displayReadyPromise; } } }; diff --git a/src/core.js b/src/core.js index cbd2abf8d..2734d0eef 100644 --- a/src/core.js +++ b/src/core.js @@ -137,10 +137,13 @@ var Page = (function PageClosure() { var resources = this.resources; if (isArray(content)) { // fetching items + var streams = []; var i, n = content.length; for (i = 0; i < n; ++i) - content[i] = xref.fetchIfRef(content[i]); - content = new StreamsSequenceStream(content); + streams.push(xref.fetchIfRef(content[i])); + content = new StreamsSequenceStream(streams); + } else if (isStream(content)) { + content.reset(); } else if (!content) { // replacing non-existent page content with empty one content = new Stream(new Uint8Array(0)); From cff6c8db082dec1c1d8de7cee3f258af15456b6e Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Mon, 16 Apr 2012 18:44:51 -0500 Subject: [PATCH 47/52] skip cached objects and has consistent font ids --- src/api.js | 2 ++ src/evaluator.js | 3 ++- test/driver.js | 10 ++++++---- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/api.js b/src/api.js index dfc245b03..3d97dacd2 100644 --- a/src/api.js +++ b/src/api.js @@ -489,6 +489,8 @@ var WorkerTransport = (function WorkerTransportClosure() { messageHandler.on('obj', function transportObj(data) { var id = data[0]; var type = data[1]; + if (this.objs.hasData(id)) + return; switch (type) { case 'JpegStream': diff --git a/src/evaluator.js b/src/evaluator.js index c57e291c0..e07394201 100644 --- a/src/evaluator.js +++ b/src/evaluator.js @@ -153,13 +153,14 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { font = xref.fetchIfRef(font) || fontRes.get(fontName); assertWellFormed(isDict(font)); + ++self.objIdCounter; if (!font.translated) { font.translated = self.translateFont(font, xref, resources, dependency); if (font.translated) { // keep track of each font we translated so the caller can // load them asynchronously before calling display on a page - loadedName = 'font_' + uniquePrefix + (++self.objIdCounter); + loadedName = 'font_' + uniquePrefix + self.objIdCounter; font.translated.properties.loadedName = loadedName; font.loadedName = loadedName; diff --git a/test/driver.js b/test/driver.js index 2f17fa43c..cd5ea49e7 100644 --- a/test/driver.js +++ b/test/driver.js @@ -194,13 +194,15 @@ function nextPage(task, loadError) { textLayer: textLayerBuilder, viewport: viewport }; - page.render(renderContext).then(function() { + var completeRender = (function(error) { page.destroy(); - snapshotCurrentPage(task, false); + snapshotCurrentPage(task, error); + }); + page.render(renderContext).then(function() { + completeRender(false); }, function(error) { - page.destroy(); - snapshotCurrentPage(task, 'render : ' + error); + completeRender('render : ' + error); }); }, function(error) { From 28024fba3bdefea19c174e3663a9fe58cbf4a49f Mon Sep 17 00:00:00 2001 From: Brendan Dahl Date: Tue, 17 Apr 2012 10:39:17 -0700 Subject: [PATCH 48/52] Replace test pdf tcpdf 33 by custom generated pdf. --- test/pdfs/.gitignore | 1 + test/pdfs/mixedfonts.pdf | Bin 0 -> 405432 bytes test/test_manifest.json | 8 ++++---- 3 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 test/pdfs/mixedfonts.pdf diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index e4b9fb10c..d93dae609 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -32,3 +32,4 @@ !issue925.pdf !gradientfill.pdf !basicapi.pdf +!mixedfonts.pdf diff --git a/test/pdfs/mixedfonts.pdf b/test/pdfs/mixedfonts.pdf new file mode 100644 index 0000000000000000000000000000000000000000..82bdbec34a2d2ce183ead5f30b5291a526ed780f GIT binary patch literal 405432 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 }aPA2oX1m9mr?#@@Ss0z#z ztJpVW4oU*Xr>vfkl3=G8kga$D z=Ymy?t4g%KV%hDeGOiGp#v|zyqg9YnuwxRS;Y+P(wcM5H+y*fP@<7V2fwxC2xSAx;Zw zRdSm+p0tiz#qHh1NEF^)trpRCbRbW$=@1aAxIJK=o)h`(a2M}t^9r>Q7^n~$lC}+s zA>UAFs5ERc(6-Hd*e5)8{M6-sx#dse8?99Tbz|r14_jz5k;V#sRuV-EMl6Db$0py> ztU2>U3_cj}ro>}#!Hc95I*m)HJC{S^Om`Lpnw24eFndLYD8rZR2(m~LBTyojC}yD! zTzm0B)RXHb4npJ5bTorofEIC;;wrR3`~f+zj^rfX#W)2HYi1#eN#s)aWT6Awf$P9$ z3L*UijKcQd6kZV&{b;5Tdl2J<8Qf(35@reaB3~&~>en+b^DhhgnLi01Gan0IF<%N- znZL7FxqtA#GQV-Z^KC{<0VAeh;y@qKv2<29Lbl1pM616vWstdDjAk_TYP^g-Yib8t zCbDg$BBrPJkuxDs8PKq(~tlUzp3xWm%1Bupk~sUp0=zBtN@TYlHXTHuT_- z(w?yhqJS(AiR6Vrk}P2(B};j-fEW=IT-0G}giR4A^KQ1QjOlJ5vO}~rp*!)XTSdBC zz$5XD_D(hu$`59U36hZPKz6|e@Xg*wIt zU5p>LVS-|!)E?$AgT-OeSaG5>U7UsW;4-EPZeZ-xm%@Z2u~|Ns2w@%6sD)9} z=&Ix$?xI}fAu34;bwC}3Ug$w#0xA;bB7uhz?|{*KPuQCu0*CTr;RJpbzYxB_SHboC zCY_n~8mnjvop5MItLxS4O%ri%Z+X~nZl%8o3K<>Wcnlf)~^#$XvJpp?doQ>;z}3i_|0P$0WYW^;K)t@6_+rTG)$j zeb#G>`k1Nw_pwBbK>M3!eFmVjA2A2t=U8jqZD7JY9iH0!O zQ$l680#Nu#BYCYzXVaD??hp{&MZjDr-?-@Wn>G5u&V-&{{E>_|KT|LMjD41^a1
(2#?I?nYWCI`o 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�Eyh32xQ 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 Date: Tue, 17 Apr 2012 12:53:50 -0700 Subject: [PATCH 49/52] Add browser test timeout. --- test/test.py | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/test/test.py b/test/test.py index 4dc6ca8a9..368069aff 100644 --- a/test/test.py +++ b/test/test.py @@ -16,6 +16,7 @@ BROWSERLOG_FILE = 'browser.log' REFDIR = 'ref' TMPDIR = 'tmp' VERBOSE = False +BROWSER_TIMEOUT = 60 SERVER_HOST = "localhost" @@ -74,7 +75,7 @@ class State: browsers = [ ] manifest = { } taskResults = { } - remaining = 0 + remaining = { } results = { } done = False numErrors = 0 @@ -83,6 +84,7 @@ class State: numFBFFailures = 0 numLoadFailures = 0 eqLog = None + lastPost = { } class Result: def __init__(self, snapshot, failure, page): @@ -180,6 +182,7 @@ class PDFTestHandler(BaseHTTPRequestHandler): result = json.loads(self.rfile.read(numBytes)) browser, id, failure, round, page, snapshot = result['browser'], result['id'], result['failure'], result['round'], result['page'], result['snapshot'] + State.lastPost[browser] = int(time.time()) taskResults = State.taskResults[browser][id] taskResults[round].append(Result(snapshot, failure, page)) @@ -199,9 +202,16 @@ class PDFTestHandler(BaseHTTPRequestHandler): self.server.masterMode) # Please oh please GC this ... del State.taskResults[browser][id] - State.remaining -= 1 + State.remaining[browser] -= 1 - State.done = (0 == State.remaining) + checkIfDone() + +def checkIfDone(): + State.done = True + for key in State.remaining: + if State.remaining[key] != 0: + State.done = False + return # Applescript hack to quit Chrome on Mac def tellAppToQuit(path, query): @@ -376,6 +386,8 @@ def setUp(options): for b in testBrowsers: State.taskResults[b.name] = { } + State.remaining[b.name] = len(manifestList) + State.lastPost[b.name] = int(time.time()) for item in manifestList: id, rounds = item['id'], int(item['rounds']) State.manifest[id] = item @@ -384,8 +396,6 @@ def setUp(options): taskResults.append([ ]) State.taskResults[b.name][id] = taskResults - State.remaining = len(testBrowsers) * len(manifestList) - return testBrowsers def startBrowsers(browsers, options): @@ -568,6 +578,12 @@ def runTests(options, browsers): try: startBrowsers(browsers, options) while not State.done: + for b in State.lastPost: + if State.remaining[b] > 0 and int(time.time()) - State.lastPost[b] > BROWSER_TIMEOUT: + print 'TEST-UNEXPECTED-FAIL | test failed', b, "has not responded in", BROWSER_TIMEOUT, "s" + State.numErrors += State.remaining[b] + State.remaining[b] = 0 + checkIfDone() time.sleep(1) processResults() finally: From 237e1d941df640823a796228ce63333fe66f6c4d Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Tue, 17 Apr 2012 15:33:15 -0500 Subject: [PATCH 50/52] Fix annotations; add text annotation icon --- src/core.js | 3 ++- web/images/text.svg | 46 +++++++++++++++++++++++++++++++++++++++++++++ web/viewer.js | 15 +++++++++------ 3 files changed, 57 insertions(+), 7 deletions(-) create mode 100644 web/images/text.svg diff --git a/src/core.js b/src/core.js index 2734d0eef..90a2c9733 100644 --- a/src/core.js +++ b/src/core.js @@ -283,7 +283,8 @@ var Page = (function PageClosure() { var title = annotation.get('T'); item.content = stringToPDFString(content || ''); item.title = stringToPDFString(title || ''); - item.name = annotation.get('Name').name; + item.name = !annotation.has('Name') ? 'Note' : + annotation.get('Name').name; break; default: TODO('unimplemented annotation type: ' + subtype.name); diff --git a/web/images/text.svg b/web/images/text.svg new file mode 100644 index 000000000..25df8f466 --- /dev/null +++ b/web/images/text.svg @@ -0,0 +1,46 @@ + + + + + + + + + diff --git a/web/viewer.js b/web/viewer.js index 3233371cc..f5bb9552f 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -805,17 +805,20 @@ var PageView = function pageView(container, pdfPage, id, scale, container.className = 'annotComment'; var image = createElementWithStyle('img', item); + var type = item.type; + var rect = viewport.convertToViewportRectangle(item.rect); + rect = PDFJS.Util.normalizeRect(rect); image.src = kImageDirectory + type.toLowerCase() + '.svg'; + image.alt = '[' + type + ' Annotation]'; var content = document.createElement('div'); content.setAttribute('hidden', true); var title = document.createElement('h1'); var text = document.createElement('p'); - var offsetPos = Math.floor(item.x - view.x + item.width); - content.style.left = (offsetPos * scale) + 'px'; - content.style.top = (Math.floor(item.y - view.y) * scale) + 'px'; + content.style.left = Math.floor(rect[2]) + 'px'; + content.style.top = Math.floor(rect[1]) + 'px'; title.textContent = item.title; - if (!item.content) { + if (!item.content && !item.title) { content.setAttribute('hidden', true); } else { var e = document.createElement('span'); @@ -828,11 +831,11 @@ var PageView = function pageView(container, pdfPage, id, scale, } text.appendChild(e); image.addEventListener('mouseover', function annotationImageOver() { - this.nextSibling.removeAttribute('hidden'); + content.removeAttribute('hidden'); }, false); image.addEventListener('mouseout', function annotationImageOut() { - this.nextSibling.setAttribute('hidden', true); + content.setAttribute('hidden', true); }, false); } From 72fd078fa1ffb65439d6f8a151b580e5966d1359 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Tue, 17 Apr 2012 15:53:17 -0500 Subject: [PATCH 51/52] Fixes page-width mode --- web/viewer.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/viewer.js b/web/viewer.js index 3233371cc..97178f0e9 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -247,9 +247,9 @@ var PDFView = { var currentPage = this.pages[this.page - 1]; var pageWidthScale = (window.innerWidth - kScrollbarPadding) / - currentPage.width / kCssUnits; + currentPage.width * currentPage.scale / kCssUnits; var pageHeightScale = (window.innerHeight - kScrollbarPadding) / - currentPage.height / kCssUnits; + currentPage.height * currentPage.scale / kCssUnits; if ('page-width' == value) this.setScale(pageWidthScale, resetAutoSettings); if ('page-height' == value) From f59a1a35b3cf4d4d936065d3991768c85b397b48 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Wed, 18 Apr 2012 12:09:13 -0500 Subject: [PATCH 52/52] Remove 1502 test case --- test/pdfs/issue1502.pdf.link | 1 - test/test_manifest.json | 8 -------- 2 files changed, 9 deletions(-) delete mode 100644 test/pdfs/issue1502.pdf.link diff --git a/test/pdfs/issue1502.pdf.link b/test/pdfs/issue1502.pdf.link deleted file mode 100644 index 37b4e80c0..000000000 --- a/test/pdfs/issue1502.pdf.link +++ /dev/null @@ -1 +0,0 @@ -http://register.consilium.europa.eu/pdf/en/11/st12/st12196.en11.pdf diff --git a/test/test_manifest.json b/test/test_manifest.json index 00ad7be11..6a083bdf7 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -559,14 +559,6 @@ "link": true, "type": "eq" }, - { "id": "issue1502", - "file": "pdfs/issue1502.pdf", - "md5": "6f0569b7e85561ea784cb0403de89d84", - "rounds": 1, - "pageLimit": 5, - "link": true, - "type": "eq" - }, { "id": "issue1317", "file": "pdfs/issue1317.pdf", "md5": "6fb46275b30c48c8985617d4f86199e3",