From ceaca4400cce96cb5b2c7c49d387b7df970f7869 Mon Sep 17 00:00:00 2001 From: Kamil Bugajski Date: Fri, 31 Aug 2012 16:27:05 +0200 Subject: [PATCH] =?UTF-8?q?CutyCapt=20f=C3=BCr=20Screenshots=20in=20die=20?= =?UTF-8?q?libs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libs/CutyCapt/CutyCapt | Bin 0 -> 45821 bytes libs/CutyCapt/CutyCapt.cpp | 662 +++++++++++++++++++++++++++++++++ libs/CutyCapt/CutyCapt.hpp | 66 ++++ libs/CutyCapt/CutyCapt.o | Bin 0 -> 31148 bytes libs/CutyCapt/CutyCapt.pro | 10 + libs/CutyCapt/Makefile | 228 ++++++++++++ libs/CutyCapt/google.jpg | Bin 0 -> 8227 bytes libs/CutyCapt/moc_CutyCapt.cpp | 165 ++++++++ libs/CutyCapt/moc_CutyCapt.o | Bin 0 -> 10064 bytes libs/CutyCapt/readme.txt | 12 + 10 files changed, 1143 insertions(+) create mode 100755 libs/CutyCapt/CutyCapt create mode 100755 libs/CutyCapt/CutyCapt.cpp create mode 100755 libs/CutyCapt/CutyCapt.hpp create mode 100755 libs/CutyCapt/CutyCapt.o create mode 100755 libs/CutyCapt/CutyCapt.pro create mode 100755 libs/CutyCapt/Makefile create mode 100755 libs/CutyCapt/google.jpg create mode 100755 libs/CutyCapt/moc_CutyCapt.cpp create mode 100755 libs/CutyCapt/moc_CutyCapt.o create mode 100755 libs/CutyCapt/readme.txt diff --git a/libs/CutyCapt/CutyCapt b/libs/CutyCapt/CutyCapt new file mode 100755 index 0000000000000000000000000000000000000000..d354d3acfd4550252cf08251cf4baf6e43dcb5a9 GIT binary patch literal 45821 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 GrT+u{5VUFl literal 0 HcmV?d00001 diff --git a/libs/CutyCapt/CutyCapt.cpp b/libs/CutyCapt/CutyCapt.cpp new file mode 100755 index 0000000..32e6d19 --- /dev/null +++ b/libs/CutyCapt/CutyCapt.cpp @@ -0,0 +1,662 @@ +//////////////////////////////////////////////////////////////////// +// +// CutyCapt - A Qt WebKit Web Page Rendering Capture Utility +// +// Copyright (C) 2003-2010 Bjoern Hoehrmann +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// $Id$ +// +//////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include +#include +#include "CutyCapt.hpp" + +#if QT_VERSION >= 0x040600 && 0 +#define CUTYCAPT_SCRIPT 1 +#endif + +#ifdef STATIC_PLUGINS + Q_IMPORT_PLUGIN(qjpeg) + Q_IMPORT_PLUGIN(qgif) + Q_IMPORT_PLUGIN(qtiff) + Q_IMPORT_PLUGIN(qsvg) + Q_IMPORT_PLUGIN(qmng) + Q_IMPORT_PLUGIN(qico) +#endif + +static struct _CutyExtMap { + CutyCapt::OutputFormat id; + const char* extension; + const char* identifier; +} const CutyExtMap[] = { + { CutyCapt::SvgFormat, ".svg", "svg" }, + { CutyCapt::PdfFormat, ".pdf", "pdf" }, + { CutyCapt::PsFormat, ".ps", "ps" }, + { CutyCapt::InnerTextFormat, ".txt", "itext" }, + { CutyCapt::HtmlFormat, ".html", "html" }, + { CutyCapt::RenderTreeFormat, ".rtree", "rtree" }, + { CutyCapt::JpegFormat, ".jpeg", "jpeg" }, + { CutyCapt::PngFormat, ".png", "png" }, + { CutyCapt::MngFormat, ".mng", "mng" }, + { CutyCapt::TiffFormat, ".tiff", "tiff" }, + { CutyCapt::GifFormat, ".gif", "gif" }, + { CutyCapt::BmpFormat, ".bmp", "bmp" }, + { CutyCapt::PpmFormat, ".ppm", "ppm" }, + { CutyCapt::XbmFormat, ".xbm", "xbm" }, + { CutyCapt::XpmFormat, ".xpm", "xpm" }, + { CutyCapt::OtherFormat, "", "" } +}; + +QString +CutyPage::chooseFile(QWebFrame* /*frame*/, const QString& /*suggestedFile*/) { + return QString::null; +} + +bool +CutyPage::javaScriptConfirm(QWebFrame* /*frame*/, const QString& /*msg*/) { + return true; +} + +bool +CutyPage::javaScriptPrompt(QWebFrame* /*frame*/, + const QString& /*msg*/, + const QString& /*defaultValue*/, + QString* /*result*/) { + return true; +} + +void +CutyPage::javaScriptConsoleMessage(const QString& /*message*/, + int /*lineNumber*/, + const QString& /*sourceID*/) { + // noop +} + +void +CutyPage::javaScriptAlert(QWebFrame* /*frame*/, const QString& msg) { + + if (mPrintAlerts) + qDebug() << "[alert]" << msg; + + if (mAlertString == msg) { + QTimer::singleShot(10, mCutyCapt, SLOT(Delayed())); + } +} + +QString +CutyPage::userAgentForUrl(const QUrl& url) const { + + if (!mUserAgent.isNull()) + return mUserAgent; + + return QWebPage::userAgentForUrl(url); +} + +void +CutyPage::setUserAgent(const QString& userAgent) { + mUserAgent = userAgent; +} + +void +CutyPage::setAlertString(const QString& alertString) { + mAlertString = alertString; +} + +QString +CutyPage::getAlertString() { + return mAlertString; +} + +void +CutyPage::setCutyCapt(CutyCapt* cutyCapt) { + mCutyCapt = cutyCapt; +} + +void +CutyPage::setPrintAlerts(bool printAlerts) { + mPrintAlerts = printAlerts; +} + +void +CutyPage::setAttribute(QWebSettings::WebAttribute option, + const QString& value) { + + if (value == "on") + settings()->setAttribute(option, true); + else if (value == "off") + settings()->setAttribute(option, false); + else + (void)0; // TODO: ... +} + +// TODO: Consider merging some of main() and CutyCap + +CutyCapt::CutyCapt(CutyPage* page, const QString& output, int delay, OutputFormat format, + const QString& scriptProp, const QString& scriptCode) { + mPage = page; + mOutput = output; + mDelay = delay; + mSawInitialLayout = false; + mSawDocumentComplete = false; + mFormat = format; + mScriptProp = scriptProp; + mScriptCode = scriptCode; + mScriptObj = new QObject(); + + // This is not really nice, but some restructuring work is + // needed anyway, so this should not be that bad for now. + mPage->setCutyCapt(this); +} + +void +CutyCapt::InitialLayoutCompleted() { + mSawInitialLayout = true; + + if (mSawInitialLayout && mSawDocumentComplete) + TryDelayedRender(); +} + +void +CutyCapt::DocumentComplete(bool /*ok*/) { + mSawDocumentComplete = true; + + if (mSawInitialLayout && mSawDocumentComplete) + TryDelayedRender(); +} + +void +CutyCapt::JavaScriptWindowObjectCleared() { + + if (!mScriptProp.isEmpty()) { + QVariant var = mPage->mainFrame()->evaluateJavaScript(mScriptProp); + QObject* obj = var.value(); + + if (obj == mScriptObj) + return; + + mPage->mainFrame()->addToJavaScriptWindowObject(mScriptProp, mScriptObj); + } + + mPage->mainFrame()->evaluateJavaScript(mScriptCode); + +} + +void +CutyCapt::TryDelayedRender() { + + if (!mPage->getAlertString().isEmpty()) + return; + + if (mDelay > 0) { + QTimer::singleShot(mDelay, this, SLOT(Delayed())); + return; + } + + saveSnapshot(); + QApplication::exit(); +} + +void +CutyCapt::Timeout() { + saveSnapshot(); + QApplication::exit(); +} + +void +CutyCapt::Delayed() { + saveSnapshot(); + QApplication::exit(); +} + +void +CutyCapt::saveSnapshot() { + QWebFrame *mainFrame = mPage->mainFrame(); + QPainter painter; + const char* format = NULL; + + for (int ix = 0; CutyExtMap[ix].id != OtherFormat; ++ix) + if (CutyExtMap[ix].id == mFormat) + format = CutyExtMap[ix].identifier; //, break; + + // TODO: sometimes contents/viewport can have size 0x0 + // in which case saving them will fail. This is likely + // the result of the method being called too early. So + // far I've been unable to find a workaround, except + // using --delay with some substantial wait time. I've + // tried to resize multiple time, make a fake render, + // check for other events... This is primarily a problem + // under my Ubuntu virtual machine. + + mPage->setViewportSize( mainFrame->contentsSize() ); + + switch (mFormat) { + case SvgFormat: { + QSvgGenerator svg; + svg.setFileName(mOutput); + svg.setSize(mPage->viewportSize()); + painter.begin(&svg); + mainFrame->render(&painter); + painter.end(); + break; + } + case PdfFormat: + case PsFormat: { + QPrinter printer; + printer.setPageSize(QPrinter::A4); + printer.setOutputFileName(mOutput); + // TODO: change quality here? + mainFrame->print(&printer); + break; + } + case RenderTreeFormat: + case InnerTextFormat: + case HtmlFormat: { + QFile file(mOutput); + file.open(QIODevice::WriteOnly | QIODevice::Text); + QTextStream s(&file); + s.setCodec("utf-8"); + s << (mFormat == RenderTreeFormat ? mainFrame->renderTreeDump() : + mFormat == InnerTextFormat ? mainFrame->toPlainText() : + mFormat == HtmlFormat ? mainFrame->toHtml() : + "bug"); + break; + } + default: { + QImage image(mPage->viewportSize(), QImage::Format_ARGB32); + painter.begin(&image); + mainFrame->render(&painter); + painter.end(); + // TODO: add quality + image.save(mOutput, format); + } + }; +} + +void +CaptHelp(void) { + printf("%s", + " -----------------------------------------------------------------------------\n" + " Usage: CutyCapt --url=http://www.example.org/ --out=localfile.png \n" + " -----------------------------------------------------------------------------\n" + " --help Print this help page and exit \n" + " --url= The URL to capture (http:...|file:...|...) \n" + " --out= The target file (.png|pdf|ps|svg|jpeg|...) \n" + " --out-format= Like extension in --out, overrides heuristic \n" +// " --out-quality= Output format quality from 1 to 100 \n" + " --min-width= Minimal width for the image (default: 800) \n" + " --min-height= Minimal height for the image (default: 600) \n" + " --max-wait= Don't wait more than (default: 90000, inf: 0)\n" + " --delay= After successful load, wait (default: 0) \n" +// " --user-styles= Location of user style sheet (deprecated) \n" + " --user-style-path= Location of user style sheet file, if any \n" + " --user-style-string= User style rules specified as text \n" + " --header=: request header; repeatable; some can't be set\n" + " --method= Specifies the request method (default: get) \n" + " --body-string= Unencoded request body (default: none) \n" + " --body-base64= Base64-encoded request body (default: none) \n" + " --app-name= appName used in User-Agent; default is none \n" + " --app-version= appVers used in User-Agent; default is none \n" + " --user-agent= Override the User-Agent header Qt would set \n" + " --javascript= JavaScript execution (default: on) \n" + " --java= Java execution (default: unknown) \n" + " --plugins= Plugin execution (default: unknown) \n" + " --private-browsing= Private browsing (default: unknown) \n" + " --auto-load-images= Automatic image loading (default: on) \n" + " --js-can-open-windows= Script can open windows? (default: unknown) \n" + " --js-can-access-clipboard= Script clipboard privs (default: unknown)\n" +#if QT_VERSION >= 0x040500 + " --print-backgrounds= Backgrounds in PDF/PS output (default: off) \n" + " --zoom-factor= Page zoom factor (default: no zooming) \n" + " --zoom-text-only= Whether to zoom only the text (default: off) \n" + " --http-proxy= Address for HTTP proxy server (default: none)\n" +#endif +#if CUTYCAPT_SCRIPT + " --inject-script= JavaScript that will be injected into pages \n" + " --script-object= Property to hold state for injected script \n" + " --expect-alert= Try waiting for alert(string) before capture \n" + " --debug-print-alerts Prints out alert(...) strings for debugging. \n" +#endif + " -----------------------------------------------------------------------------\n" + " is svg,ps,pdf,itext,html,rtree,png,jpeg,mng,tiff,gif,bmp,ppm,xbm,xpm \n" + " -----------------------------------------------------------------------------\n" +#if CUTYCAPT_SCRIPT + " The `inject-script` option can be used to inject script code into loaded web \n" + " pages. The code is called whenever the `javaScriptWindowObjectCleared` signal\n" + " is received. When `script-object` is set, an object under the specified name \n" + " will be available to the script to maintain state across page loads. When the\n" + " `expect-alert` option is specified, the shot will be taken when a script in- \n" + " vokes alert(string) with the string if that happens before `max-wait`. These \n" + " options effectively allow you to remote control the browser and the web page.\n" + " This an experimental and easily abused and misused feature. Use with caution.\n" + " -----------------------------------------------------------------------------\n" +#endif + " http://cutycapt.sf.net - (c) 2003-2010 Bjoern Hoehrmann - bjoern@hoehrmann.de\n" + ""); +} + +int +main(int argc, char *argv[]) { + + int argHelp = 0; + int argDelay = 0; + int argSilent = 0; + int argMinWidth = 800; + int argMinHeight = 600; + int argMaxWait = 90000; + int argVerbosity = 0; + + const char* argUrl = NULL; + const char* argUserStyle = NULL; + const char* argUserStylePath = NULL; + const char* argUserStyleString = NULL; + const char* argIconDbPath = NULL; + const char* argInjectScript = NULL; + const char* argScriptObject = NULL; + QString argOut; + + CutyCapt::OutputFormat format = CutyCapt::OtherFormat; + + QApplication app(argc, argv, true); + CutyPage page; + + QNetworkAccessManager::Operation method = + QNetworkAccessManager::GetOperation; + QByteArray body; + QNetworkRequest req; + QNetworkAccessManager manager; + + // Parse command line parameters + for (int ax = 1; ax < argc; ++ax) { + size_t nlen; + + const char* s = argv[ax]; + const char* value; + + // boolean options + if (strcmp("--silent", s) == 0) { + argSilent = 1; + continue; + + } else if (strcmp("--help", s) == 0) { + argHelp = 1; + break; + + } else if (strcmp("--verbose", s) == 0) { + argVerbosity++; + continue; + +#if CUTYCAPT_SCRIPT + } else if (strcmp("--debug-print-alerts", s) == 0) { + page.setPrintAlerts(true); + continue; +#endif + } + + value = strchr(s, '='); + + if (value == NULL) { + // TODO: error + argHelp = 1; + break; + } + + nlen = value++ - s; + + // --name=value options + if (strncmp("--url", s, nlen) == 0) { + argUrl = value; + + } else if (strncmp("--min-width", s, nlen) == 0) { + // TODO: add error checking here? + argMinWidth = (unsigned int)atoi(value); + + } else if (strncmp("--min-height", s, nlen) == 0) { + // TODO: add error checking here? + argMinHeight = (unsigned int)atoi(value); + + } else if (strncmp("--delay", s, nlen) == 0) { + // TODO: see above + argDelay = (unsigned int)atoi(value); + + } else if (strncmp("--max-wait", s, nlen) == 0) { + // TODO: see above + argMaxWait = (unsigned int)atoi(value); + + } else if (strncmp("--out", s, nlen) == 0) { + argOut = value; + + if (format == CutyCapt::OtherFormat) + for (int ix = 0; CutyExtMap[ix].id != CutyCapt::OtherFormat; ++ix) + if (argOut.endsWith(CutyExtMap[ix].extension)) + format = CutyExtMap[ix].id; //, break; + + } else if (strncmp("--user-styles", s, nlen) == 0) { + // This option is provided for backwards-compatibility only + argUserStyle = value; + + } else if (strncmp("--user-style-path", s, nlen) == 0) { + argUserStylePath = value; + + } else if (strncmp("--user-style-string", s, nlen) == 0) { + argUserStyleString = value; + + } else if (strncmp("--icon-database-path", s, nlen) == 0) { + argIconDbPath = value; + + } else if (strncmp("--auto-load-images", s, nlen) == 0) { + page.setAttribute(QWebSettings::AutoLoadImages, value); + + } else if (strncmp("--javascript", s, nlen) == 0) { + page.setAttribute(QWebSettings::JavascriptEnabled, value); + + } else if (strncmp("--java", s, nlen) == 0) { + page.setAttribute(QWebSettings::JavaEnabled, value); + + } else if (strncmp("--plugins", s, nlen) == 0) { + page.setAttribute(QWebSettings::PluginsEnabled, value); + + } else if (strncmp("--private-browsing", s, nlen) == 0) { + page.setAttribute(QWebSettings::PrivateBrowsingEnabled, value); + + } else if (strncmp("--js-can-open-windows", s, nlen) == 0) { + page.setAttribute(QWebSettings::JavascriptCanOpenWindows, value); + + } else if (strncmp("--js-can-access-clipboard", s, nlen) == 0) { + page.setAttribute(QWebSettings::JavascriptCanAccessClipboard, value); + + } else if (strncmp("--developer-extras", s, nlen) == 0) { + page.setAttribute(QWebSettings::DeveloperExtrasEnabled, value); + + } else if (strncmp("--links-included-in-focus-chain", s, nlen) == 0) { + page.setAttribute(QWebSettings::LinksIncludedInFocusChain, value); + +#if QT_VERSION >= 0x040500 + } else if (strncmp("--print-backgrounds", s, nlen) == 0) { + page.setAttribute(QWebSettings::PrintElementBackgrounds, value); + + } else if (strncmp("--zoom-factor", s, nlen) == 0) { + page.mainFrame()->setZoomFactor(QString(value).toFloat()); + + } else if (strncmp("--zoom-text-only", s, nlen) == 0) { + page.setAttribute(QWebSettings::ZoomTextOnly, value); + + } else if (strncmp("--http-proxy", s, nlen) == 0) { + QUrl p = QUrl::fromEncoded(value); + QNetworkProxy proxy = QNetworkProxy(QNetworkProxy::HttpProxy, + p.host(), p.port(80), p.userName(), p.password()); + manager.setProxy(proxy); + page.setNetworkAccessManager(&manager); +#endif + +#if CUTYCAPT_SCRIPT + } else if (strncmp("--inject-script", s, nlen) == 0) { + argInjectScript = value; + + } else if (strncmp("--script-object", s, nlen) == 0) { + argScriptObject = value; + + } else if (strncmp("--expect-alert", s, nlen) == 0) { + page.setAlertString(value); +#endif + + } else if (strncmp("--app-name", s, nlen) == 0) { + app.setApplicationName(value); + + } else if (strncmp("--app-version", s, nlen) == 0) { + app.setApplicationVersion(value); + + } else if (strncmp("--body-base64", s, nlen) == 0) { + body = QByteArray::fromBase64(value); + + } else if (strncmp("--body-string", s, nlen) == 0) { + body = QByteArray(value); + + } else if (strncmp("--user-agent", s, nlen) == 0) { + page.setUserAgent(value); + + } else if (strncmp("--out-format", s, nlen) == 0) { + for (int ix = 0; CutyExtMap[ix].id != CutyCapt::OtherFormat; ++ix) + if (strcmp(value, CutyExtMap[ix].identifier) == 0) + format = CutyExtMap[ix].id; //, break; + + if (format == CutyCapt::OtherFormat) { + // TODO: error + argHelp = 1; + break; + } + + } else if (strncmp("--header", s, nlen) == 0) { + const char* hv = strchr(value, ':'); + + if (hv == NULL) { + // TODO: error + argHelp = 1; + break; + } + + req.setRawHeader(QByteArray(value, hv - value), hv + 1); + + } else if (strncmp("--method", s, nlen) == 0) { + if (strcmp("value", "get") == 0) + method = QNetworkAccessManager::GetOperation; + else if (strcmp("value", "put") == 0) + method = QNetworkAccessManager::PutOperation; + else if (strcmp("value", "post") == 0) + method = QNetworkAccessManager::PostOperation; + else if (strcmp("value", "head") == 0) + method = QNetworkAccessManager::HeadOperation; + else + (void)0; // TODO: ... + + } else { + // TODO: error + argHelp = 1; + } + } + + if (argUrl == NULL || argOut == NULL || argHelp) { + CaptHelp(); + return EXIT_FAILURE; + } + + // This used to use QUrl(argUrl) but that escapes %hh sequences + // even though it should not, as URLs can assumed to be escaped. + req.setUrl( QUrl::fromEncoded(argUrl) ); + + QString scriptProp(argScriptObject); + QString scriptCode; + + if (argInjectScript) { + QFile file(argInjectScript); + if (file.open(QIODevice::ReadOnly)) { + QTextStream stream(&file); + stream.setCodec(QTextCodec::codecForName("UTF-8")); + stream.setAutoDetectUnicode(true); + scriptCode = stream.readAll(); + file.close(); + } + } + + CutyCapt main(&page, argOut, argDelay, format, scriptProp, scriptCode); + + app.connect(&page, + SIGNAL(loadFinished(bool)), + &main, + SLOT(DocumentComplete(bool))); + + app.connect(page.mainFrame(), + SIGNAL(initialLayoutCompleted()), + &main, + SLOT(InitialLayoutCompleted())); + + if (argMaxWait > 0) { + // TODO: Should this also register one for the application? + QTimer::singleShot(argMaxWait, &main, SLOT(Timeout())); + } + + if (argUserStyle != NULL) + // TODO: does this need any syntax checking? + page.settings()->setUserStyleSheetUrl( QUrl::fromEncoded(argUserStyle) ); + + if (argUserStylePath != NULL) { + page.settings()->setUserStyleSheetUrl( QUrl::fromLocalFile(argUserStylePath) ); + } + + if (argUserStyleString != NULL) { + QUrl data("data:text/css;charset=utf-8;base64," + + QByteArray(argUserStyleString).toBase64()); + page.settings()->setUserStyleSheetUrl( data ); + } + + if (argIconDbPath != NULL) + // TODO: does this need any syntax checking? + page.settings()->setIconDatabasePath(argUserStyle); + + // The documentation does not say, but it seems the mainFrame + // will never change, so we can set this here. Otherwise we'd + // have to set this in snapshot and trigger an update, which + // is not currently possible (Qt 4.4.0) as far as I can tell. + page.mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff); + page.mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff); + page.setViewportSize( QSize(argMinWidth, argMinHeight) ); + +#if CUTYCAPT_SCRIPT + // javaScriptWindowObjectCleared does not get called on the + // initial load unless some JavaScript has been executed. + page.mainFrame()->evaluateJavaScript(QString("")); + + app.connect(page.mainFrame(), + SIGNAL(javaScriptWindowObjectCleared()), + &main, + SLOT(JavaScriptWindowObjectCleared())); +#endif + + if (!body.isNull()) + page.mainFrame()->load(req, method, body); + else + page.mainFrame()->load(req, method); + + return app.exec(); +} diff --git a/libs/CutyCapt/CutyCapt.hpp b/libs/CutyCapt/CutyCapt.hpp new file mode 100755 index 0000000..b7c26eb --- /dev/null +++ b/libs/CutyCapt/CutyCapt.hpp @@ -0,0 +1,66 @@ +#include + +class CutyCapt; +class CutyPage : public QWebPage { + Q_OBJECT + +public: + void setAttribute(QWebSettings::WebAttribute option, const QString& value); + void setUserAgent(const QString& userAgent); + void setAlertString(const QString& alertString); + void setPrintAlerts(bool printAlerts); + void setCutyCapt(CutyCapt* cutyCapt); + QString getAlertString(); + +protected: + QString chooseFile(QWebFrame *frame, const QString& suggestedFile); + void javaScriptConsoleMessage(const QString& message, int lineNumber, const QString& sourceID); + bool javaScriptPrompt(QWebFrame* frame, const QString& msg, const QString& defaultValue, QString* result); + void javaScriptAlert(QWebFrame* frame, const QString& msg); + bool javaScriptConfirm(QWebFrame* frame, const QString& msg); + QString userAgentForUrl(const QUrl& url) const; + QString mUserAgent; + QString mAlertString; + bool mPrintAlerts; + CutyCapt* mCutyCapt; +}; + +class CutyCapt : public QObject { + Q_OBJECT + +public: + + // TODO: This should really be elsewhere and be named differently + enum OutputFormat { SvgFormat, PdfFormat, PsFormat, InnerTextFormat, HtmlFormat, + RenderTreeFormat, PngFormat, JpegFormat, MngFormat, TiffFormat, GifFormat, + BmpFormat, PpmFormat, XbmFormat, XpmFormat, OtherFormat }; + + CutyCapt(CutyPage* page, + const QString& output, + int delay, + OutputFormat format, + const QString& scriptProp, + const QString& scriptCode); + +private slots: + void DocumentComplete(bool ok); + void InitialLayoutCompleted(); + void JavaScriptWindowObjectCleared(); + void Timeout(); + void Delayed(); + +private: + void TryDelayedRender(); + void saveSnapshot(); + bool mSawInitialLayout; + bool mSawDocumentComplete; + +protected: + QString mOutput; + int mDelay; + CutyPage* mPage; + OutputFormat mFormat; + QObject* mScriptObj; + QString mScriptProp; + QString mScriptCode; +}; diff --git a/libs/CutyCapt/CutyCapt.o b/libs/CutyCapt/CutyCapt.o new file mode 100755 index 0000000000000000000000000000000000000000..41fc3ca3fbb07ebf9e06ee5e64cb9ae9d076caf8 GIT binary patch literal 31148 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 literal 0 HcmV?d00001 diff --git a/libs/CutyCapt/CutyCapt.pro b/libs/CutyCapt/CutyCapt.pro new file mode 100755 index 0000000..5064a20 --- /dev/null +++ b/libs/CutyCapt/CutyCapt.pro @@ -0,0 +1,10 @@ +QT += webkit svg network +SOURCES = CutyCapt.cpp +HEADERS = CutyCapt.hpp +CONFIG += qt console + +contains(CONFIG, static): { + QTPLUGIN += qjpeg qgif qsvg qmng qico qtiff + DEFINES += STATIC_PLUGINS +} + diff --git a/libs/CutyCapt/Makefile b/libs/CutyCapt/Makefile new file mode 100755 index 0000000..cb7460d --- /dev/null +++ b/libs/CutyCapt/Makefile @@ -0,0 +1,228 @@ +############################################################################# +# Makefile for building: CutyCapt +# Generated by qmake (2.01a) (Qt 4.8.1) on: Thu Aug 30 14:02:45 2012 +# Project: CutyCapt.pro +# Template: app +# Command: /usr/bin/qmake -o Makefile CutyCapt.pro +############################################################################# + +####### Compiler, tools and options + +CC = gcc +CXX = g++ +DEFINES = -DQT_WEBKIT -DQT_NO_DEBUG -DQT_WEBKIT_LIB -DQT_SVG_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED +CFLAGS = -pipe -O2 -D_REENTRANT -Wall -W $(DEFINES) +CXXFLAGS = -pipe -O2 -D_REENTRANT -Wall -W $(DEFINES) +INCPATH = -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtNetwork -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtSvg -I/usr/include/qt4/QtWebKit -I/usr/include/qt4 -I. +LINK = g++ +LFLAGS = -Wl,-O1 +LIBS = $(SUBLIBS) -L/usr/lib/i386-linux-gnu -lQtWebKit -lQtSvg -lQtGui -lQtNetwork -lQtCore -lpthread +AR = ar cqs +RANLIB = +QMAKE = /usr/bin/qmake +TAR = tar -cf +COMPRESS = gzip -9f +COPY = cp -f +SED = sed +COPY_FILE = $(COPY) +COPY_DIR = $(COPY) -r +STRIP = strip +INSTALL_FILE = install -m 644 -p +INSTALL_DIR = $(COPY_DIR) +INSTALL_PROGRAM = install -m 755 -p +DEL_FILE = rm -f +SYMLINK = ln -f -s +DEL_DIR = rmdir +MOVE = mv -f +CHK_DIR_EXISTS= test -d +MKDIR = mkdir -p + +####### Output directory + +OBJECTS_DIR = ./ + +####### Files + +SOURCES = CutyCapt.cpp moc_CutyCapt.cpp +OBJECTS = CutyCapt.o \ + moc_CutyCapt.o +DIST = /usr/share/qt4/mkspecs/common/unix.conf \ + /usr/share/qt4/mkspecs/common/linux.conf \ + /usr/share/qt4/mkspecs/common/gcc-base.conf \ + /usr/share/qt4/mkspecs/common/gcc-base-unix.conf \ + /usr/share/qt4/mkspecs/common/g++-base.conf \ + /usr/share/qt4/mkspecs/common/g++-unix.conf \ + /usr/share/qt4/mkspecs/qconfig.pri \ + /usr/share/qt4/mkspecs/modules/qt_webkit_version.pri \ + /usr/share/qt4/mkspecs/features/qt_functions.prf \ + /usr/share/qt4/mkspecs/features/qt_config.prf \ + /usr/share/qt4/mkspecs/features/exclusive_builds.prf \ + /usr/share/qt4/mkspecs/features/default_pre.prf \ + /usr/share/qt4/mkspecs/features/release.prf \ + /usr/share/qt4/mkspecs/features/default_post.prf \ + /usr/share/qt4/mkspecs/features/qt.prf \ + /usr/share/qt4/mkspecs/features/unix/thread.prf \ + /usr/share/qt4/mkspecs/features/moc.prf \ + /usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \ + /usr/share/qt4/mkspecs/features/warn_on.prf \ + /usr/share/qt4/mkspecs/features/resources.prf \ + /usr/share/qt4/mkspecs/features/uic.prf \ + /usr/share/qt4/mkspecs/features/yacc.prf \ + /usr/share/qt4/mkspecs/features/lex.prf \ + /usr/share/qt4/mkspecs/features/include_source_dir.prf \ + CutyCapt.pro +QMAKE_TARGET = CutyCapt +DESTDIR = +TARGET = CutyCapt + +first: all +####### Implicit rules + +.SUFFIXES: .o .c .cpp .cc .cxx .C + +.cpp.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.cc.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.cxx.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.C.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.c.o: + $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<" + +####### Build rules + +all: Makefile $(TARGET) + +$(TARGET): $(OBJECTS) + $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS) + +Makefile: CutyCapt.pro /usr/share/qt4/mkspecs/linux-g++/qmake.conf /usr/share/qt4/mkspecs/common/unix.conf \ + /usr/share/qt4/mkspecs/common/linux.conf \ + /usr/share/qt4/mkspecs/common/gcc-base.conf \ + /usr/share/qt4/mkspecs/common/gcc-base-unix.conf \ + /usr/share/qt4/mkspecs/common/g++-base.conf \ + /usr/share/qt4/mkspecs/common/g++-unix.conf \ + /usr/share/qt4/mkspecs/qconfig.pri \ + /usr/share/qt4/mkspecs/modules/qt_webkit_version.pri \ + /usr/share/qt4/mkspecs/features/qt_functions.prf \ + /usr/share/qt4/mkspecs/features/qt_config.prf \ + /usr/share/qt4/mkspecs/features/exclusive_builds.prf \ + /usr/share/qt4/mkspecs/features/default_pre.prf \ + /usr/share/qt4/mkspecs/features/release.prf \ + /usr/share/qt4/mkspecs/features/default_post.prf \ + /usr/share/qt4/mkspecs/features/qt.prf \ + /usr/share/qt4/mkspecs/features/unix/thread.prf \ + /usr/share/qt4/mkspecs/features/moc.prf \ + /usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.prf \ + /usr/share/qt4/mkspecs/features/warn_on.prf \ + /usr/share/qt4/mkspecs/features/resources.prf \ + /usr/share/qt4/mkspecs/features/uic.prf \ + /usr/share/qt4/mkspecs/features/yacc.prf \ + /usr/share/qt4/mkspecs/features/lex.prf \ + /usr/share/qt4/mkspecs/features/include_source_dir.prf \ + /usr/lib/i386-linux-gnu/libQtWebKit.prl \ + /usr/lib/i386-linux-gnu/libQtSvg.prl \ + /usr/lib/i386-linux-gnu/libQtGui.prl \ + /usr/lib/i386-linux-gnu/libQtNetwork.prl \ + /usr/lib/i386-linux-gnu/libQtCore.prl + $(QMAKE) -o Makefile CutyCapt.pro +/usr/share/qt4/mkspecs/common/unix.conf: +/usr/share/qt4/mkspecs/common/linux.conf: +/usr/share/qt4/mkspecs/common/gcc-base.conf: +/usr/share/qt4/mkspecs/common/gcc-base-unix.conf: +/usr/share/qt4/mkspecs/common/g++-base.conf: +/usr/share/qt4/mkspecs/common/g++-unix.conf: +/usr/share/qt4/mkspecs/qconfig.pri: +/usr/share/qt4/mkspecs/modules/qt_webkit_version.pri: +/usr/share/qt4/mkspecs/features/qt_functions.prf: +/usr/share/qt4/mkspecs/features/qt_config.prf: +/usr/share/qt4/mkspecs/features/exclusive_builds.prf: +/usr/share/qt4/mkspecs/features/default_pre.prf: +/usr/share/qt4/mkspecs/features/release.prf: +/usr/share/qt4/mkspecs/features/default_post.prf: +/usr/share/qt4/mkspecs/features/qt.prf: +/usr/share/qt4/mkspecs/features/unix/thread.prf: +/usr/share/qt4/mkspecs/features/moc.prf: +/usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.prf: +/usr/share/qt4/mkspecs/features/warn_on.prf: +/usr/share/qt4/mkspecs/features/resources.prf: +/usr/share/qt4/mkspecs/features/uic.prf: +/usr/share/qt4/mkspecs/features/yacc.prf: +/usr/share/qt4/mkspecs/features/lex.prf: +/usr/share/qt4/mkspecs/features/include_source_dir.prf: +/usr/lib/i386-linux-gnu/libQtWebKit.prl: +/usr/lib/i386-linux-gnu/libQtSvg.prl: +/usr/lib/i386-linux-gnu/libQtGui.prl: +/usr/lib/i386-linux-gnu/libQtNetwork.prl: +/usr/lib/i386-linux-gnu/libQtCore.prl: +qmake: FORCE + @$(QMAKE) -o Makefile CutyCapt.pro + +dist: + @$(CHK_DIR_EXISTS) .tmp/CutyCapt1.0.0 || $(MKDIR) .tmp/CutyCapt1.0.0 + $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/CutyCapt1.0.0/ && $(COPY_FILE) --parents CutyCapt.hpp .tmp/CutyCapt1.0.0/ && $(COPY_FILE) --parents CutyCapt.cpp .tmp/CutyCapt1.0.0/ && (cd `dirname .tmp/CutyCapt1.0.0` && $(TAR) CutyCapt1.0.0.tar CutyCapt1.0.0 && $(COMPRESS) CutyCapt1.0.0.tar) && $(MOVE) `dirname .tmp/CutyCapt1.0.0`/CutyCapt1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/CutyCapt1.0.0 + + +clean:compiler_clean + -$(DEL_FILE) $(OBJECTS) + -$(DEL_FILE) *~ core *.core + + +####### Sub-libraries + +distclean: clean + -$(DEL_FILE) $(TARGET) + -$(DEL_FILE) Makefile + + +check: first + +mocclean: compiler_moc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_source_make_all + +compiler_moc_header_make_all: moc_CutyCapt.cpp +compiler_moc_header_clean: + -$(DEL_FILE) moc_CutyCapt.cpp +moc_CutyCapt.cpp: CutyCapt.hpp + /usr/bin/moc-qt4 $(DEFINES) $(INCPATH) CutyCapt.hpp -o moc_CutyCapt.cpp + +compiler_rcc_make_all: +compiler_rcc_clean: +compiler_image_collection_make_all: qmake_image_collection.cpp +compiler_image_collection_clean: + -$(DEL_FILE) qmake_image_collection.cpp +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_uic_make_all: +compiler_uic_clean: +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: compiler_moc_header_clean + +####### Compile + +CutyCapt.o: CutyCapt.cpp CutyCapt.hpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o CutyCapt.o CutyCapt.cpp + +moc_CutyCapt.o: moc_CutyCapt.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_CutyCapt.o moc_CutyCapt.cpp + +####### Install + +install: FORCE + +uninstall: FORCE + +FORCE: + diff --git a/libs/CutyCapt/google.jpg b/libs/CutyCapt/google.jpg new file mode 100755 index 0000000000000000000000000000000000000000..5982c83cb1099f1ba8a845b747a397daa0677323 GIT binary patch literal 8227 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<ECr+Na zbot8FYu9hwy!G(W<0ns_J%91?)yGetzkL1n{m0K=Ab&A3Fhjfr_ZgbM1cClyVqsxs zVF&q(k*OSrnFU!`6%E;h90S=C3x$=88aYIqCNA7~kW<+>=!0ld(M2vX6_bamA3L7Bz5<;?Xb|O#`E8U^ESkrh(BkFq#HN z)4*sN7)=ACX<#%BjHZFnG%%V5M$^D(8W>FjqiJ9?4UDFN(KIlc21e7sXc`zz1EXnR NG!4)_4cPy`2>|y3s&4=Q literal 0 HcmV?d00001 diff --git a/libs/CutyCapt/moc_CutyCapt.cpp b/libs/CutyCapt/moc_CutyCapt.cpp new file mode 100755 index 0000000..e2bac5c --- /dev/null +++ b/libs/CutyCapt/moc_CutyCapt.cpp @@ -0,0 +1,165 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'CutyCapt.hpp' +** +** Created: Thu Aug 30 14:03:03 2012 +** by: The Qt Meta Object Compiler version 63 (Qt 4.8.1) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "CutyCapt.hpp" +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'CutyCapt.hpp' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 63 +#error "This file was generated using the moc from 4.8.1. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +static const uint qt_meta_data_CutyPage[] = { + + // content: + 6, // revision + 0, // classname + 0, 0, // classinfo + 0, 0, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 0, // signalCount + + 0 // eod +}; + +static const char qt_meta_stringdata_CutyPage[] = { + "CutyPage\0" +}; + +void CutyPage::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + Q_UNUSED(_o); + Q_UNUSED(_id); + Q_UNUSED(_c); + Q_UNUSED(_a); +} + +const QMetaObjectExtraData CutyPage::staticMetaObjectExtraData = { + 0, qt_static_metacall +}; + +const QMetaObject CutyPage::staticMetaObject = { + { &QWebPage::staticMetaObject, qt_meta_stringdata_CutyPage, + qt_meta_data_CutyPage, &staticMetaObjectExtraData } +}; + +#ifdef Q_NO_DATA_RELOCATION +const QMetaObject &CutyPage::getStaticMetaObject() { return staticMetaObject; } +#endif //Q_NO_DATA_RELOCATION + +const QMetaObject *CutyPage::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; +} + +void *CutyPage::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_CutyPage)) + return static_cast(const_cast< CutyPage*>(this)); + return QWebPage::qt_metacast(_clname); +} + +int CutyPage::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QWebPage::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + return _id; +} +static const uint qt_meta_data_CutyCapt[] = { + + // content: + 6, // revision + 0, // classname + 0, 0, // classinfo + 5, 14, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 0, // signalCount + + // slots: signature, parameters, type, tag, flags + 13, 10, 9, 9, 0x08, + 36, 9, 9, 9, 0x08, + 61, 9, 9, 9, 0x08, + 93, 9, 9, 9, 0x08, + 103, 9, 9, 9, 0x08, + + 0 // eod +}; + +static const char qt_meta_stringdata_CutyCapt[] = { + "CutyCapt\0\0ok\0DocumentComplete(bool)\0" + "InitialLayoutCompleted()\0" + "JavaScriptWindowObjectCleared()\0" + "Timeout()\0Delayed()\0" +}; + +void CutyCapt::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + if (_c == QMetaObject::InvokeMetaMethod) { + Q_ASSERT(staticMetaObject.cast(_o)); + CutyCapt *_t = static_cast(_o); + switch (_id) { + case 0: _t->DocumentComplete((*reinterpret_cast< bool(*)>(_a[1]))); break; + case 1: _t->InitialLayoutCompleted(); break; + case 2: _t->JavaScriptWindowObjectCleared(); break; + case 3: _t->Timeout(); break; + case 4: _t->Delayed(); break; + default: ; + } + } +} + +const QMetaObjectExtraData CutyCapt::staticMetaObjectExtraData = { + 0, qt_static_metacall +}; + +const QMetaObject CutyCapt::staticMetaObject = { + { &QObject::staticMetaObject, qt_meta_stringdata_CutyCapt, + qt_meta_data_CutyCapt, &staticMetaObjectExtraData } +}; + +#ifdef Q_NO_DATA_RELOCATION +const QMetaObject &CutyCapt::getStaticMetaObject() { return staticMetaObject; } +#endif //Q_NO_DATA_RELOCATION + +const QMetaObject *CutyCapt::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; +} + +void *CutyCapt::qt_metacast(const char *_clname) +{ + if (!_clname) return 0; + if (!strcmp(_clname, qt_meta_stringdata_CutyCapt)) + return static_cast(const_cast< CutyCapt*>(this)); + return QObject::qt_metacast(_clname); +} + +int CutyCapt::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 5) + qt_static_metacall(this, _c, _id, _a); + _id -= 5; + } + return _id; +} +QT_END_MOC_NAMESPACE diff --git a/libs/CutyCapt/moc_CutyCapt.o b/libs/CutyCapt/moc_CutyCapt.o new file mode 100755 index 0000000000000000000000000000000000000000..db4d7af8607cf2afb8a554d86a3f5b66da70a39d GIT binary patch literal 10064 zcmds7dvIJ;89)07#5AN2%d-_yx|Ec*A)6*`%FD#frjLYllk|b5u-$BK(rq`p>F(V$ zsi0_RX$ToJ&Ipb=PRC)?5l3+b>!2WoGEhf!D&sIZfc6h@z;+bDQAVAqzu&p%+&z1{ z4Xwjpp6SVVzxQ{(^PO|=Ior=gyE=S6pU}-G0-}fs@kq79X_BB$tQ5;7e;#nkEkM6g zJzoxZwR&Ep;9>=@Rq#3mmngUt&}{D?pMGi?3DeKqNHEnN3jRbsv<9bIuR3^aZu<+z zXQoFll>g3u&YnGM$WNT9p4t*xIJr19wKFtt(hdbD?+aBPeAVuF`eSf2`Py^40N(%B zun+7-0~JtDfo#%_~$)d=MP1L|$c7XF~@W*32YCrV+1<9OEJGJUi+4;!|zGxkshc zWP7NxI9^w7#<4$fX65A0P%XT-Ah}F(6B1m9>@^^Jw^14V;AB$>3ns)a@f8g&ydu4KNYVtZ&YwO&R|a1bye4Zzvr(tPoaAoXX61Sqj`~nJswL8SsFJXd6C43Ekt&&XwN1K!&b(QWQRx6mTlGb zXS3<$Vq+#{rxNL|#CW#g@&@Xbi%p5qL|-zO8nL&hG6UKDoBQ`zNjs9Z5;=?fEvaD( zDtKzQ(ur|NGo9o45)WPhyv9Q-hh7F^6*`Nay%IfS;F@-O8QMK%XhUUaAe|E*X&2LE zDf{0&TRHd3&p-Hc+pXg%KPtkh*b;Mn6KCpBJ`FDiIHIY@JgNG^gRk13n2J=pNG*!6 zVdBNQyLJ6Tax&phU3MP3yY;E@x=zN?fmKNS>F{6n2|dwc8Tta zDWA9-$RQv8fV1d!!0w9s#l00j^@+VeMk}86iKB|WUAqTTa;7gPU#EX9 zyzv+3?*=pEx=EGr($G0?#d-WyY22rOaZ$lIDfPxv%xCj?^SPpYaOdRpXP)>@NcgLIR27w{N5maJ?m@i&dW z3w;1xL~7=BP6WFi@*fK9sj3OS{L=CEIo-~~ra1!NT0(ps{UrK@$TN;t&|4AvI3OGM z^i$}^Ksx{kpAE4?0qM1%eS%EgO7-5;-(-61z5}r?nVCyzKnR_m20YU~+cbKR4{bG- z6Mi_^TUArpRueqFVNO4vj@JaE7?R8p^TNgtq~JC9qjkoVPG_kOeLRBB_Aq*I9sX#Y zyz58C@)U*8r0vak&~pA(*SM(9j}P04en30tz}@;OXQk_HYs?n)0|`4J>ihF~QBPtn z>kza+eSAmv+MYf;m&y#aH%3PtDXNm=t~-Y{luX90v7|L($Kfw+l@aDzoXt){Sr<~v zVafR5drP0|+>D%@jV8whpKR*gR^z zx51EOd7e*h3wYXZ$1HL?4Y~ER$PE~Bn`V(q8*-hq$k~P*$9}$X+-JzO8FKoproS;~ zz`I3ngm~tj!N#*5zZZ4efDL2}2=iQpPQT344d~or0_be77`BL0j%@`xgeiP58y%`k5!=UM=?R^6T)80vA9K0jY_MXMFX|ERVm2&Yt?Xfox1*GHC z>z8%%8)eV0=Isx#R|T4GIxl|#fzMj*4CJ^U=*IZi{)}#pV;B5#UtwMrqw8@5Va&Am z!Fl{%>yZm0=yHCqft=}g%<#*#sQtEh?A5~FZt!)hRS!)bdo!?i0z8gm3A(n|>#=tP z_F9w;f?D<5?Xh>)GRH6Nah+&;JZIydeAiR;x3I@Gts8ml`;?rf2h71M8S)M)IW@f^ z2)TD@KsEYh`#fl-iDQUw26V=EBf5@{?~VYvZhx;5;!(q%ek9aBDVzSd5F@C4js>Zd z_E`J$Y1(@O#hEq&(e@x#(oA|#{OzpC43tzb?VA-t{4%*W?1EAb-G@{EYQT1M3`gPs zZVPyB1p@Bw?T7@VHCG(=7Zwpb1>7%NEzcEQYytU3HF3TbiY?%NNjtQF;EiCh1q3U+ z*aEUbO?;`?0`wI65p<3>3-|z%$o-hO*#ZKSZ?pg^;9&!&##c*lzj&eqH)oXN=ZqIy z=`AVwW~C7K>gy_XYy{j>fyPl-MhggRCPoX$H)4?xK-E2?P39dxrtKCW=q?e(~2 zAMx<_E8MYnwK%MBuKy+YDtlDn+&PwD{XOo{|D^|iy+r?7@lJ{Ub>g2M`5+4gP3P-! zg_Fj7ggy8+4}QM~f82w=Qy%;Z zyytYIey;~V?7@Gaa9t0_Jp9)^_`iUMV3*|i{u;5=c*oFR1UUCX%@@PjWL#fR*C$6t zM0`hASX($(_gt3JDxQ^_agZ%JA)5rA8{16+ z)x#}th?Aq8O3KKSiF7&|TifGYmv@K5J$GU}4%QSQGZl+TC!OvwHQc~4J2IXC!fPDc zMI%uL=;$(_^XN)edEKI0oe&xGY@xRFY`6O5XfIqv&uzGPTi;q~jd^VFvr|j|g zXah#0?qBq(b7#`gF|Mq_9Oc%`e*Ewh@3r#y-Kr!PO5VKAF=|R%D~7~7sQ8Y7w6pHq z`E7UT=ABgOJrpDE4mZT($+59Se`++`i06DNo=hk5`M5nkV#QOL!7LMi>npuRh&k6> zoHvK3t5RZmCV&`sadONcXfw^$D6XfXu{AwWK2TUIhQpHAkxJWEE*k5LmlbNT@e5r} zDo113hgi)HT4JjqxjU5}D2hc~v_veNEadI%u#zhm)aqn5lfh4f-B~*|IDXDbUo()( zmz8iw9A1r0e`v_cwI%ITHWNjGt;4>fFlRaF?5x9Grj^NSv8ap1I-wSBb_ttDq%Bsf zLG88dLN24WQf)K5HeVPS$>!|5t1V+FVsge@@y2A%O4ye3^C%_5s}Zh)Zb5N43&SfO zOBaSxnP_jPzM$>xZ0gyXOZRqSj+_P7mCDjjIz$-qCg^MpHw0+hjAn*1m$p zoo^jobnv$sEE$T$FnZZEzV&$+xQ!V=mFo43xyvO zuEIS9`8PXvBmOYHL5Vlw8=DXZ{BILB3GpLBIz#ip7C+4i`Rzx@Z+=347ZUQE=Sw>G zSd4@BScJ8N147ghA|9R>eU@`hBpq3&k*825j;c)Aq+|4I~A076>UYmIO)*eui#-q*!h}*Jfr(RrSb)PU`af!ptOg0 zI1c(XDHJ^QIKDRjcd%mse z?gSUmt<=L{kpkhnO9+H4e4iEqAqgKYvSCvA?#3CO5R(TH;lqCf;XL~8b?yaxn7jev zyVN*3)i~