tetzle-2.1.5+dfsg1/0000755000175000017500000000000013554306730014222 5ustar jonathanjonathantetzle-2.1.5+dfsg1/INSTALL0000644000175000017500000000143313522554645015261 0ustar jonathanjonathanInstallation ============ Open a terminal and browse into the extracted folder. Linux: 1.) Type 'qmake' to configure the program. If you would like to install the program somewhere other than /usr/local, pass a new value for PREFIX during configuration: 'qmake PREFIX=/opt'. 2.) Type 'make' to compile the program. 3.) Type 'sudo make install' to install the program. Mac OS X: 1.) Type 'qmake -spec macx-g++' to configure the program. 2.) Type 'make' to compile the program. 3.) Type './mac_deploy.sh' to create a disk image of the program. Windows: 1.) Type 'qmake' to configure the program. 2.) Type 'make' to compile the program. 3.) Type 'windows_deploy' to copy the program and its required libraries into a subfolder. tetzle-2.1.5+dfsg1/README0000644000175000017500000000037213522554645015111 0ustar jonathanjonathanAbout ===== Tetzle is a jigsaw puzzle game that uses tetrominoes for the pieces. Any image can be imported and used to create puzzles with a wide range of sizes. Games are saved automatically, and you can select between currently in progress games. tetzle-2.1.5+dfsg1/ChangeLog0000644000175000017500000000600113522554645015776 0ustar jonathanjonathan2.1.5 ----- * Replaced deprecated code. 2.1.4 ----- * FIXED: Automatic high DPI support. * FIXED: Unsigned integer conversion warnings in graphics layer. * FIXED: Could not add images with Qt 5.12 * FIXED: Window icon didn't work in Wayland. * Added support for OpenGL ES. * Improved loading locales. * Require Qt 5.9 * Translation updates: Polish. 2.1.3 ----- * Replaced jhead with image auto-rotation in Qt 5.5. * Replaced deprecated code. * Extra warnings only shown in debug build. * Improved Linux deployment. * Improved macOS deployment. * Improved Windows deployment. * Translation updates: Catalan, Chinese, Dutch, Greek, Norwegian Bokmål, Portuguese, Spanish. 2.1.2 ----- * FIXED: Could not compile with Qt 5.10. * Translation updates: Catalan. 2.1.1 ----- * FIXED: Did not always install translations in Linux * Translation updates: German. 2.1.0 ----- * Added support for HiDPI displays. * Fade success message after two seconds. * Generate binary translations at build time. * Improved Linux integration. * Replace application icon. * Rewrite OpenGL code. * Switched to C++11. * FIXED: Lad when dragging pieces. * FIXED: Did not change background color on the Mac. * FIXED: Colors were not saved on the Mac. * FIXED: Could not interact with interface on the Mac. * FIXED: Application layout did not respect RTL languages. * FIXED: Was not properly loading Qt translations. * Translation updates: Dutch, Esperanto, German, Hebrew, Lithuanian, Malay, Polish, Portuguese (Brazil), Russian, Spanish. 2.0.3 ----- * Fixed OpenGL shaders not working in Windows 7. * Fixed build failure on ARM. * Translation updates: Malay, Polish. 2.0.2.1 ------- * Fixed compile error. 2.0.2 ----- * Added support for Qt 5. * Bug fixes. * Translation updates: Esperanto, French, Romanian. 2.0.1 ----- * Bug fixes. * Translation updates: German, Russian. 2.0.0 ----- * Redesigned game visuals. * Merged new and open game dialogs. * Rewrote collision detection. * Rewrote OpenGL render code. * Translation updates: Ukrainian. 1.2.1 ----- * Fixed: Tile borders were not correctly scaled. * Fixed: Mouse cursor drifted off pieces when moving. 1.2.0 ----- * Real collision detection added by Ulrik Mikaelsson. * Complete keyboard shortcuts added by Frank Tetzel. * Toggling borders added by Frank Tetzel. * Added zooming and panning to overview. * Added retrieving pieces. * Added option to use entire image. 1.1.0 ----- * Added rectangle selecting multiple pieces. * Support for grabbing multiple pieces added by Ulrik Mikaelsson. * Algorithm for pushing pieces replaced by Ulrik Mikaelsson. * Improved mouse cursor handling. * Code cleanups. * Bug fixes. 1.0.2 ----- * Added image plugins for the Mac and Windows. * Minor bug fixes. 1.0.1 ----- * Fullscreen mode added by Ulrik Mikaelsson. * Bug fixes. 1.0.0 ----- * Added label system for images. * Improved zooming. * Minor bug fixes. 0.7.0 ----- * Added puzzle overview. * Improved saving games. * Added keyboard commands. * Added thumbnails to dialogs. * Added help menu. * Added zooming options. * Bug fixes. tetzle-2.1.5+dfsg1/src/0000755000175000017500000000000013522554645015016 5ustar jonathanjonathantetzle-2.1.5+dfsg1/src/message.h0000644000175000017500000000312613522554645016615 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2010, 2011, 2015, 2016 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #ifndef MESSAGE_H #define MESSAGE_H #include "graphics_layer.h" #include class QOpenGLTexture; class QTimeLine; class QTimer; class QWidget; class Message : public QObject { Q_OBJECT public: Message(QWidget* parent); ~Message(); void draw() const; void setText(const QString& text); void setViewport(const QSize& size); void setVisible(bool visible, bool stay = true); public slots: void hide(); void show(); private: void cleanup(); void updateVerts(); private slots: void fade(int frame); private: QWidget* m_parent; QTimer* m_hide_timer; QTimeLine* m_fade_timer; QOpenGLTexture* m_image; VertexArray m_array; QString m_text; QSize m_size; QSize m_viewport; bool m_visible; QColor m_color; }; #endif tetzle-2.1.5+dfsg1/src/message.cpp0000644000175000017500000001247713522554645017161 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2010, 2011, 2012, 2015, 2016, 2018 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #include "message.h" #include #include #include #include #include #include //----------------------------------------------------------------------------- int powerOfTwo(int value); //----------------------------------------------------------------------------- Message::Message(QWidget* parent) : QObject(parent), m_parent(parent), m_image(nullptr), m_visible(false), m_color(Qt::white) { m_hide_timer = new QTimer(this); m_hide_timer->setInterval(2000); m_hide_timer->setSingleShot(true); connect(m_hide_timer, &QTimer::timeout, this, &Message::hide); m_fade_timer = new QTimeLine(160, this); m_fade_timer->setCurveShape(QTimeLine::LinearCurve); m_fade_timer->setDirection(QTimeLine::Backward); m_fade_timer->setFrameRange(0, 10); m_fade_timer->setUpdateInterval(16); connect(m_fade_timer, &QTimeLine::frameChanged, this, &Message::fade); } //----------------------------------------------------------------------------- Message::~Message() { cleanup(); graphics_layer->removeArray(m_array); } //----------------------------------------------------------------------------- void Message::draw() const { if (m_image && (m_visible || (m_fade_timer->state() == QTimeLine::Running))) { graphics_layer->setColor(m_color); graphics_layer->bindTexture(0, m_image->textureId()); graphics_layer->draw(m_array); graphics_layer->setColor(Qt::white); } } //----------------------------------------------------------------------------- void Message::setText(const QString& text) { // Don't change if the text is the same if (text == m_text) { return; } cleanup(); m_text = text; // Find texture size QFont font("Sans", 24); QFontMetrics metrics(font); int width = metrics.boundingRect(m_text).width(); int height = metrics.height(); QSize size(width + height, height * 2); m_size = QSize(powerOfTwo(size.width()), powerOfTwo(size.height())); // Create texture const qreal pixelratio = m_parent->devicePixelRatioF(); QImage image(m_size * pixelratio, QImage::Format_ARGB32); image.setDevicePixelRatio(pixelratio); image.fill(Qt::transparent); { QPainter painter(&image); painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing); painter.translate((m_size.width() - size.width()) / 2, (m_size.height() - size.height()) / 2); painter.setPen(Qt::NoPen); painter.setBrush(QColor(0, 0, 0, 200)); painter.drawRoundedRect(0, 0, width + height, height * 2, 10, 10); painter.setFont(font); painter.setPen(Qt::white); painter.drawText(height / 2, height / 2 + metrics.ascent(), m_text); } m_image = new QOpenGLTexture(image); m_image->setMinificationFilter(QOpenGLTexture::LinearMipMapLinear); m_image->setMagnificationFilter(QOpenGLTexture::Linear); updateVerts(); } //----------------------------------------------------------------------------- void Message::setViewport(const QSize& size) { m_viewport = size; updateVerts(); } //----------------------------------------------------------------------------- void Message::setVisible(bool visible, bool stay) { m_visible = visible; m_color.setAlpha(255); if (m_visible) { m_fade_timer->stop(); } else { m_fade_timer->start(); } if (m_visible && !stay) { m_hide_timer->start(); } else { m_hide_timer->stop(); } m_parent->update(); } //----------------------------------------------------------------------------- void Message::hide() { setVisible(false); } //----------------------------------------------------------------------------- void Message::show() { setVisible(true); } //----------------------------------------------------------------------------- void Message::cleanup() { delete m_image; m_image = nullptr; } //----------------------------------------------------------------------------- void Message::updateVerts() { int x1 = (m_viewport.width() - m_size.width()) / 2; int y1 = (m_viewport.height() - m_size.height()) / 2; int x2 = x1 + m_size.width(); int y2 = y1 + m_size.height(); int z = 3990; graphics_layer->updateArray(m_array, { Vertex::init(x1,y1,z, 0,0), Vertex::init(x1,y2,z, 0,1), Vertex::init(x2,y1,z, 1,0), Vertex::init(x2,y1,z, 1,0), Vertex::init(x1,y2,z, 0,1), Vertex::init(x2,y2,z, 1,1) }); } //----------------------------------------------------------------------------- void Message::fade(int frame) { m_color.setAlpha(frame * 25); m_parent->update(); } //----------------------------------------------------------------------------- tetzle-2.1.5+dfsg1/src/zoom_slider.cpp0000644000175000017500000000431113522554645020047 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2010, 2011, 2014 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #include "zoom_slider.h" #include #include #include #include //----------------------------------------------------------------------------- namespace { const float scale_levels[10] = { 0.0625, 0.09375, 0.125, 0.171875, 0.234375, 0.3125, 0.40625, 0.546875, 0.75, 1.0 }; } //----------------------------------------------------------------------------- ZoomSlider::ZoomSlider(QWidget* parent) : QWidget(parent) { m_label = new QLabel(tr("??%"), this); m_slider = new QSlider(Qt::Horizontal, this); m_slider->setRange(0, 9); m_slider->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum); connect(m_slider, &QSlider::valueChanged, this, &ZoomSlider::valueChanged); QHBoxLayout* layout = new QHBoxLayout(this); layout->setContentsMargins(0, 0, 0, 0); layout->setSpacing(0); layout->addWidget(m_label); layout->addWidget(m_slider); } //----------------------------------------------------------------------------- float ZoomSlider::scaleFactor(int level) { return scale_levels[qBound(0, level, 9)]; } //----------------------------------------------------------------------------- void ZoomSlider::setValue(int level, float factor) { m_slider->setValue(level); m_label->setText(tr("%1%").arg(std::lround(factor * 100))); } //----------------------------------------------------------------------------- tetzle-2.1.5+dfsg1/src/new_game_tab.h0000644000175000017500000000405413522554645017602 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2010, 2011, 2014 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #ifndef NEW_GAME_TAB_H #define NEW_GAME_TAB_H class TagManager; class ToolBarList; #include class QAction; class QLabel; class QListWidgetItem; class QPushButton; class QSettings; class QSlider; class QSplitter; class NewGameTab : public QWidget { Q_OBJECT public: NewGameTab(const QStringList& files, QDialog* parent = 0); void addImages(const QStringList& images); signals: void imageRenamed(const QString& image, const QString& name); void newGame(const QString& image, int difficulty); protected: virtual void hideEvent(QHideEvent* event); private slots: void accept(); void addImageClicked(); void removeImage(); void editImageProperties(); void imageSelected(QListWidgetItem* item); void pieceCountChanged(int value); void filterImages(const QStringList& filter); void updateTagsStrings(); private: void addImage(const QString& image); QListWidgetItem* createItem(const QString& image, const QSettings& details); private: QSplitter* m_image_contents; TagManager* m_image_tags; ToolBarList* m_images; QAction* m_remove_action; QAction* m_tag_action; QSlider* m_slider; QLabel* m_count; QSize m_image_size; float m_ratio; QPushButton* m_accept_button; }; #endif tetzle-2.1.5+dfsg1/src/graphics_layer.h0000644000175000017500000001340213522554645020163 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2011, 2012, 2016, 2018 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #ifndef GRAPHICS_LAYER_H #define GRAPHICS_LAYER_H #include #include #include #include class QOpenGLBuffer; class QOpenGLShaderProgram; class QOpenGLVertexArrayObject; struct Vertex { GLfloat x; GLfloat y; GLfloat z; GLfloat s; GLfloat t; GLfloat s2; GLfloat t2; unsigned char pad[4]; static Vertex init(GLfloat x_ = 0, GLfloat y_ = 0, GLfloat z_ = 0, GLfloat s_ = 0, GLfloat t_ = 0, GLfloat s2_ = 0, GLfloat t2_ = 0) { Vertex result = { x_, y_, z_, s_, t_, s2_, t2_, {0,0,0,0} }; return result; } }; struct VertexArray { int start; int end; VertexArray() : start(0), end(0) { } int length() const { return end - start; } }; class GraphicsLayer { public: virtual ~GraphicsLayer(); static void init(); static void setVersion(int version); void updateArray(VertexArray& array, const QVector& data); void removeArray(VertexArray& array); virtual void bindTexture(unsigned int unit, GLuint texture)=0; virtual void clear()=0; virtual void draw(const VertexArray& region, GLenum mode = GL_TRIANGLES)=0; virtual GLint getMaxTextureSize()=0; virtual void setBlended(bool enabled)=0; virtual void setClearColor(const QColor& color)=0; virtual void setColor(const QColor& color)=0; virtual void setModelview(const QMatrix4x4& matrix)=0; virtual void setProjection(const QMatrix4x4& matrix)=0; virtual void setTextureUnits(unsigned int units)=0; virtual void setViewport(GLint x, GLint y, GLsizei width, GLsizei height)=0; virtual void uploadData()=0; protected: GraphicsLayer(); protected: void clearChanged(); void uploadChanged(QOpenGLBuffer* vertex_buffer); const Vertex& at(int index) const { return m_data.at(index); } private: QVector m_data; QList m_free_regions; QList m_changed_regions; bool m_changed; }; extern GraphicsLayer* graphics_layer; // Programmable pipeline class GraphicsLayer21 : public GraphicsLayer, protected QOpenGLFunctions { public: GraphicsLayer21(QOpenGLVertexArrayObject* vertex_array, const QByteArray& glsl, const QString& shader); ~GraphicsLayer21(); virtual void bindTexture(unsigned int unit, GLuint texture); virtual void clear(); virtual void draw(const VertexArray& array, GLenum mode = GL_TRIANGLES); virtual GLint getMaxTextureSize(); virtual void setBlended(bool enabled); virtual void setClearColor(const QColor& color); virtual void setColor(const QColor& color); virtual void setModelview(const QMatrix4x4& matrix); virtual void setProjection(const QMatrix4x4& matrix); virtual void setTextureUnits(unsigned int units); virtual void setViewport(GLint x, GLint y, GLsizei width, GLsizei height); virtual void uploadData(); private: QOpenGLShaderProgram* loadProgram(unsigned int index, const QByteArray& glsl, const QString& shader); private: enum Attribute { Position = 0, TexCoord0, TexCoord1 }; QMatrix4x4 m_modelview; QMatrix4x4 m_projection; GLfloat m_matrix[4][4]; QOpenGLShaderProgram* m_program; QOpenGLShaderProgram* m_programs[3]; int m_color_location; int m_matrix_location; QOpenGLVertexArrayObject* m_vertex_array; QOpenGLBuffer* m_vertex_buffer; }; #ifndef QT_OPENGL_ES_2 // Fixed function pipeline class GraphicsLayer11 : public GraphicsLayer, protected QOpenGLFunctions_1_1 { public: GraphicsLayer11(); virtual void bindTexture(unsigned int unit, GLuint texture); virtual void clear(); virtual void draw(const VertexArray& array, GLenum mode = GL_TRIANGLES); virtual GLint getMaxTextureSize(); virtual void setBlended(bool enabled); virtual void setClearColor(const QColor& color); virtual void setColor(const QColor& color); virtual void setModelview(const QMatrix4x4& matrix); virtual void setProjection(const QMatrix4x4& matrix); virtual void setTextureUnits(unsigned int units); virtual void setViewport(GLint x, GLint y, GLsizei width, GLsizei height); virtual void uploadData(); }; class GraphicsLayer13 : public GraphicsLayer, protected QOpenGLFunctions_1_3 { public: GraphicsLayer13(); virtual void bindTexture(unsigned int unit, GLuint texture); virtual void clear(); virtual void draw(const VertexArray& array, GLenum mode = GL_TRIANGLES); virtual GLint getMaxTextureSize(); virtual void setBlended(bool enabled); virtual void setClearColor(const QColor& color); virtual void setColor(const QColor& color); virtual void setModelview(const QMatrix4x4& matrix); virtual void setProjection(const QMatrix4x4& matrix); virtual void setTextureUnits(unsigned int units); virtual void setViewport(GLint x, GLint y, GLsizei width, GLsizei height); virtual void uploadData(); }; class GraphicsLayer15 : public GraphicsLayer13 { public: GraphicsLayer15(); ~GraphicsLayer15(); virtual void draw(const VertexArray& array, GLenum mode = GL_TRIANGLES); virtual void setTextureUnits(unsigned int units); virtual void uploadData(); private: QOpenGLBuffer* m_vertex_buffer; }; #endif #endif tetzle-2.1.5+dfsg1/src/thumbnail_loader.cpp0000644000175000017500000001362213522554645021037 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2011, 2012, 2014, 2016 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #include "thumbnail_loader.h" #include "path.h" #include #include #include #include #include #include #include #include #include #include //----------------------------------------------------------------------------- // Exported by QtGui void qt_blurImage(QPainter* p, QImage& blurImage, qreal radius, bool quality, bool alphaOnly, int transposed = 0); //----------------------------------------------------------------------------- struct Thumbnail { QListWidget* list; QPersistentModelIndex index; QString image; QString thumbnail; qreal pixelratio; }; Q_DECLARE_METATYPE(Thumbnail) //----------------------------------------------------------------------------- namespace { class ThumbnailItem : public QListWidgetItem { public: ThumbnailItem(const QString& text = QString()); virtual bool operator<(const QListWidgetItem& other) const; private: enum ItemRoles { ImageRole = Qt::UserRole + 1 }; }; ThumbnailItem::ThumbnailItem(const QString& text) : QListWidgetItem(QIcon::fromTheme("image-loading", QIcon(":/tango/image-loading.png")), text) { } bool ThumbnailItem::operator<(const QListWidgetItem& other) const { int compare = text().localeAwareCompare(other.text()); if (compare == 0) { compare = data(ImageRole).toString().localeAwareCompare(other.data(ImageRole).toString()); } return compare < 0; } } //----------------------------------------------------------------------------- ThumbnailLoader::ThumbnailLoader(QObject* parent) : QThread(parent), m_done(false) { connect(this, &ThumbnailLoader::loaded, this, &ThumbnailLoader::imageLoaded, Qt::QueuedConnection); } //----------------------------------------------------------------------------- ThumbnailLoader::~ThumbnailLoader() { m_mutex.lock(); m_done = true; m_mutex.unlock(); wait(); } //----------------------------------------------------------------------------- QListWidgetItem* ThumbnailLoader::createItem(const QString& image, const QString& text, QListWidget* list, qreal pixelratio) { static ThumbnailLoader* loader = 0; if (loader == 0) { qRegisterMetaType("Thumbnail"); loader = new ThumbnailLoader(QCoreApplication::instance()); } QListWidgetItem* item = new ThumbnailItem(text); list->addItem(item); QFileInfo image_info(image); QFileInfo thumb_info(Path::thumbnail(image_info.baseName(), pixelratio)); Thumbnail details = { list, list->model()->index(list->row(item), 0), image, thumb_info.filePath(), pixelratio }; if (!thumb_info.exists() || thumb_info.lastModified() < image_info.lastModified()) { loader->m_mutex.lock(); loader->m_details.append(details); loader->m_mutex.unlock(); if (!loader->isRunning()) { loader->start(); } } else { loader->imageLoaded(details); } return item; } //----------------------------------------------------------------------------- void ThumbnailLoader::run() { forever { // Fetch next thumbnail to process m_mutex.lock(); if (m_done || m_details.isEmpty()) { m_mutex.unlock(); break; } Thumbnail details = m_details.takeFirst(); m_mutex.unlock(); // Skip already generated thumbnails if (!QFile::exists(details.image)) { continue; } else if (QFile::exists(details.thumbnail)) { emit loaded(details); continue; } // Generate thumbnail QImageReader source(details.image); QSize size = source.size(); if (size.width() > 64 || size.height() > 64) { size.scale(64, 64, Qt::KeepAspectRatio); source.setScaledSize(size * details.pixelratio); } QImage thumbnail(74 * details.pixelratio, 74 * details.pixelratio, QImage::Format_ARGB32); thumbnail.setDevicePixelRatio(details.pixelratio); thumbnail.fill(0); { QPainter painter(&thumbnail); QImage shadow(thumbnail.size(), QImage::Format_ARGB32_Premultiplied); shadow.fill(0); QPainter shadow_painter(&shadow); shadow_painter.setRenderHint(QPainter::Antialiasing); shadow_painter.setPen(Qt::NoPen); shadow_painter.translate(35 - (size.width() / 2), 35 - (size.height() / 2)); shadow_painter.fillRect(QRectF(0, 0, size.width() + 4, size.height() + 4), Qt::black); shadow_painter.end(); painter.save(); painter.setClipping(false); qt_blurImage(&painter, shadow, 8, true, false); painter.restore(); painter.translate(32 - (size.width() / 2), 32 - (size.height() / 2)); painter.fillRect(2, 2, size.width() + 4, size.height() + 4, Qt::white); QImage image = source.read(); image.setDevicePixelRatio(details.pixelratio); painter.drawImage(4, 4, image, 0, 0, -1, -1, Qt::AutoColor | Qt::AvoidDither); } thumbnail.save(details.thumbnail, 0, 0); emit loaded(details); } } //----------------------------------------------------------------------------- void ThumbnailLoader::imageLoaded(const Thumbnail& details) { if (details.index.isValid()) { details.list->item(details.index.row())->setIcon(QPixmap(details.thumbnail)); } } //----------------------------------------------------------------------------- tetzle-2.1.5+dfsg1/src/overview.cpp0000644000175000017500000001267013522554645017376 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2010, 2011, 2012, 2014, 2016 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #include "overview.h" #include "zoom_slider.h" #include #include #include #include #include #include #include //----------------------------------------------------------------------------- Overview::Overview(QWidget* parent) : QGraphicsView(parent), m_min_scale_level(0), m_scale_level(0) { setWindowTitle(tr("Overview")); setWindowFlags(Qt::Tool); setBackgroundBrush(Qt::darkGray); setBackgroundRole(QPalette::Window); setRenderHint(QPainter::SmoothPixmapTransform, true); setDragMode(ScrollHandDrag); setFrameStyle(NoFrame); // Create scene QGraphicsScene* scene = new QGraphicsScene(this); setScene(scene); m_pixmap = new QGraphicsPixmapItem; m_pixmap->setTransformationMode(Qt::SmoothTransformation); scene->addItem(m_pixmap); reset(); // Restore geometry QSettings settings; if (settings.contains("Overview/Geometry")) { restoreGeometry(settings.value("Overview/Geometry").toByteArray()); setMinimumSize(size()); } else { resize(400, 400); setMinimumSize(size()); } m_default = settings.value("Overview/Default", true).toBool(); } //----------------------------------------------------------------------------- void Overview::load(const QImage& image, qreal pixelratio) { // Find minimum scale m_min_scale_level = 9; int side_max = std::max(image.width(), image.height()) * 0.9; int side = 400; if (side_max > side) { for (int i = 9; i >= 0; --i) { int side_test = std::floor(400.0 / ZoomSlider::scaleFactor(i)); if (side_test > side_max) { break; } m_min_scale_level = i; side = side_test; } } else { side = side_max; } QPixmap pixmap = QPixmap::fromImage(image.scaled(side * pixelratio, side * pixelratio, Qt::KeepAspectRatio, Qt::SmoothTransformation), Qt::AutoColor | Qt::AvoidDither); pixmap.setDevicePixelRatio(pixelratio); zoom(m_min_scale_level); // Resize window bool default_size = m_default; QSize size = transform().mapRect(QRect(QPoint(0,0), pixmap.size() / pixelratio)).size(); setMinimumSize(size); if (default_size) { resize(minimumSize()); } // Show overview setPixmap(pixmap); } //----------------------------------------------------------------------------- void Overview::reset() { // Prevent zooming m_min_scale_level = 9; zoom(m_min_scale_level); // Show loading icon setPixmap(QIcon::fromTheme("image-loading", QIcon(":/tango/image-loading.png")).pixmap(128,128)); } //----------------------------------------------------------------------------- void Overview::moveEvent(QMoveEvent* event) { QSettings().setValue("Overview/Geometry", saveGeometry()); QGraphicsView::moveEvent(event); } //----------------------------------------------------------------------------- void Overview::hideEvent(QHideEvent* event) { emit toggled(false); QGraphicsView::hideEvent(event); } //----------------------------------------------------------------------------- void Overview::resizeEvent(QResizeEvent* event) { m_default = (size() == minimumSize()); QSettings settings; settings.setValue("Overview/Default", m_default); settings.setValue("Overview/Geometry", saveGeometry()); QGraphicsView::resizeEvent(event); } //----------------------------------------------------------------------------- void Overview::showEvent(QShowEvent* event) { emit toggled(true); QGraphicsView::showEvent(event); } //----------------------------------------------------------------------------- void Overview::wheelEvent(QWheelEvent* event) { if (event->delta() > 0) { zoomIn(); } else { zoomOut(); } event->accept(); } //----------------------------------------------------------------------------- void Overview::setPixmap(const QPixmap& pixmap) { m_pixmap->setPixmap(pixmap); scene()->setSceneRect(m_pixmap->boundingRect()); centerOn(m_pixmap); } //----------------------------------------------------------------------------- void Overview::zoomIn() { zoom(m_scale_level + 1); } //----------------------------------------------------------------------------- void Overview::zoomOut() { zoom(m_scale_level - 1); } //----------------------------------------------------------------------------- void Overview::zoom(int level) { m_scale_level = qBound(m_min_scale_level, level, 9); float s = ZoomSlider::scaleFactor(m_scale_level); resetTransform(); scale(s, s); Qt::ScrollBarPolicy policy = (m_scale_level > m_min_scale_level) ? Qt::ScrollBarAsNeeded : Qt::ScrollBarAlwaysOff; setHorizontalScrollBarPolicy(policy); setVerticalScrollBarPolicy(policy); } //----------------------------------------------------------------------------- tetzle-2.1.5+dfsg1/src/generator.h0000644000175000017500000000262113522554645017156 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2010, 2011, 2013, 2014 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #ifndef GENERATOR_H #define GENERATOR_H #include #include #include namespace DLX { struct Node; } class Tile; #include class Generator { public: Generator(int columns, int rows, std::mt19937& random); QList< QList > pieces() const; private: void solve(); void solution(const QVector& rows); private: int m_columns; int m_rows; QList< QList > m_pieces; std::mt19937& m_random; }; inline QList< QList > Generator::pieces() const { return m_pieces; } #endif tetzle-2.1.5+dfsg1/src/thumbnail_loader.h0000644000175000017500000000275413522554645020510 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2011, 2012, 2016 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #ifndef THUMBNAIL_LOADER_H #define THUMBNAIL_LOADER_H struct Thumbnail; #include #include #include class QListWidget; class QListWidgetItem; class ThumbnailLoader : public QThread { Q_OBJECT ThumbnailLoader(QObject* parent = 0); public: ~ThumbnailLoader(); static QListWidgetItem* createItem(const QString& image, const QString& text, QListWidget* list, qreal pixelratio); signals: void loaded(const Thumbnail& details); protected: virtual void run(); private slots: void imageLoaded(const Thumbnail& details); private: bool m_done; QList m_details; QMutex m_mutex; }; #endif tetzle-2.1.5+dfsg1/src/open_game_tab.cpp0000644000175000017500000001162013522554645020302 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2010, 2011, 2014, 2016 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #include "open_game_tab.h" #include "choose_game_dialog.h" #include "path.h" #include "thumbnail_delegate.h" #include "thumbnail_loader.h" #include #include #include #include #include #include #include #include //----------------------------------------------------------------------------- namespace { enum ItemRoles { DetailsRole = Qt::UserRole, ImageRole, GameRole }; } //----------------------------------------------------------------------------- OpenGameTab::OpenGameTab(int current_id, QDialog* parent) : QWidget(parent) { // List saved games m_games = new QListWidget(this); m_games->setIconSize(QSize(74, 74)); m_games->setMovement(QListView::Static); m_games->setResizeMode(QListView::Adjust); m_games->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); m_games->setItemDelegate(new ThumbnailDelegate(m_games)); const qreal pixelratio = devicePixelRatioF(); QSettings details(Path::image("details"), QSettings::IniFormat); QXmlStreamReader xml; QXmlStreamAttributes attributes; QStringList files = ChooseGameDialog::currentGames(); for (const QString& game : files) { QFile file(Path::save(game)); if (!file.open(QIODevice::ReadOnly)) { continue; } xml.setDevice(&file); int id = game.section(".", 0, 0).toInt(); if (current_id == id) { continue; } // Load details while (!xml.isStartElement()) { xml.readNext(); } attributes = xml.attributes(); QString image = attributes.value("image").toString(); if (!QFile::exists(Path::image(image))) { continue; } QString image_name = details.value(image + "/Name", tr("Untitled")).toString(); QString pieces = attributes.value("pieces").toString(); QString complete = attributes.value("complete").toString(); QString details = tr("%L1 pieces %2 %3% complete").arg(pieces, QChar(8226), complete); QListWidgetItem* item = ThumbnailLoader::createItem(Path::image(image), image_name, m_games, pixelratio); item->setData(GameRole, id); item->setData(ImageRole, image); item->setData(DetailsRole, details); } m_games->setCurrentRow(0); // Create buttons QDialogButtonBox* buttons = new QDialogButtonBox(QDialogButtonBox::Open | QDialogButtonBox::Cancel, Qt::Horizontal, this); connect(buttons, &QDialogButtonBox::accepted, this, &OpenGameTab::accept); connect(buttons, &QDialogButtonBox::rejected, parent, &QDialog::reject); m_accept_button = buttons->button(QDialogButtonBox::Open); m_accept_button->setEnabled(m_games->count() > 0); QPushButton* delete_button = buttons->addButton(tr("Delete"), QDialogButtonBox::ActionRole); delete_button->setEnabled(m_accept_button->isEnabled()); connect(delete_button, &QPushButton::clicked, this, &OpenGameTab::deleteGame); // Arrange widgets QVBoxLayout* layout = new QVBoxLayout(this); layout->addWidget(m_games); layout->addSpacing(12); layout->addWidget(buttons); } //----------------------------------------------------------------------------- void OpenGameTab::imageRenamed(const QString& image, const QString& name) { int count = m_games->count(); for (int i = 0; i < count; ++i) { QListWidgetItem* item = m_games->item(i); if (item->data(ImageRole).toString() == image) { item->setText(name); } } } //----------------------------------------------------------------------------- void OpenGameTab::accept() { QListWidgetItem* item = m_games->currentItem(); if (item) { emit openGame(item->data(GameRole).toInt()); } } //----------------------------------------------------------------------------- void OpenGameTab::deleteGame() { QListWidgetItem* item = m_games->currentItem(); if (!item) { return; } if (QMessageBox::question(this, tr("Delete Game"), tr("Delete selected game?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::Yes) { QFile::remove(Path::save(item->data(GameRole).toInt())); delete item; m_accept_button->setEnabled(m_games->count() > 0); }; } //----------------------------------------------------------------------------- tetzle-2.1.5+dfsg1/src/toolbar_list.cpp0000644000175000017500000000541413522554645020223 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2011, 2016 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #include "toolbar_list.h" #include //----------------------------------------------------------------------------- ToolBarList::ToolBarList(QWidget* parent) : QListWidget(parent) { m_toolbar = new QToolBar(this); m_toolbar->setFloatable(false); m_toolbar->setMovable(false); m_toolbar->setToolButtonStyle(Qt::ToolButtonIconOnly); m_toolbar->setStyleSheet("QToolBar { border-top: 1px solid palette(mid); }"); m_toolbar->hide(); setContextMenuPolicy(Qt::ActionsContextMenu); setMovement(QListView::Static); setResizeMode(QListView::Adjust); setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); } //----------------------------------------------------------------------------- void ToolBarList::addToolBarAction(QAction* action) { if (action) { addAction(action); m_toolbar->addAction(action); m_toolbar->show(); updateGeometries(); } } //----------------------------------------------------------------------------- QIcon ToolBarList::fetchIcon(const QString& name) { QIcon icon(QString(":/tango/64x64/%1.png").arg(name)); icon.addFile(QString(":/tango/48x48/%1.png").arg(name)); icon.addFile(QString(":/tango/32x32/%1.png").arg(name)); icon.addFile(QString(":/tango/24x24/%1.png").arg(name)); icon.addFile(QString(":/tango/22x22/%1.png").arg(name)); icon.addFile(QString(":/tango/16x16/%1.png").arg(name)); return QIcon::fromTheme(name, icon); } //----------------------------------------------------------------------------- void ToolBarList::updateGeometries() { // Resize viewport margins QSize hint = m_toolbar->isHidden() ? QSize(0,0) : m_toolbar->sizeHint(); setViewportMargins(0, 0, 0, hint.height()); // Resize toolbar QRect rect = viewport()->geometry(); QRect geometry(rect.left(), rect.top() + rect.height(), rect.width(), hint.height()); m_toolbar->setGeometry(geometry); QListWidget::updateGeometries(); } //----------------------------------------------------------------------------- tetzle-2.1.5+dfsg1/src/dancing_links.h0000644000175000017500000001622613522554645020001 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2009, 2013 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #ifndef TETZLE_DANCING_LINKS_H #define TETZLE_DANCING_LINKS_H #include #include /** * Dancing Links implementation of Algorithm X. * * Algorithm X is a recursive backtracking algorithm that finds all solutions * to the exact cover problem. It works on a matrix consisting of 0s an 1s. * The purpose is to find a combination of rows such that the digit 1 appears * in each column only once. * * To convert an exact cover problem into a sparse matrix solvable by * Algorithm X you represent each constraint by a column. Each possible value * is then placed into a row with 1s in the columns for the constraints it * matches. */ namespace DLX { struct HeaderNode; /** %Node in matrix. */ struct Node { /** Constructs a node with the value of 1. */ Node() : left(0), right(0), up(0), down(0), column(0) { } Node* left; /**< node to the left with value of 1 */ Node* right; /**< node to the right with value of 1 */ Node* up; /**< node above with value of 1 */ Node* down; /**< node below with value of 1 */ HeaderNode* column; /**< column containing this node */ }; /** Head node of column or row in matrix. */ struct HeaderNode : public Node { /** Constructs an empty column. */ HeaderNode() : size(0), id(0) { } unsigned int size; /**< how many nodes with value of 1 are in column */ unsigned int id; /**< unique identifier */ }; /** Sparse matrix class. */ class Matrix { /** Abstract base class for solution callback. */ class Callback { public: /** Destroy collback. */ virtual ~Callback() { } /** Empty function to allow for ignored callbacks. */ virtual void operator()(const QVector&, unsigned int) { } }; /** Callback using non-member function. */ class GlobalCallback : public Callback { public: typedef void(*function)(const QVector&); /** * Constructs callback. * * @param f non-member function to use as callback */ GlobalCallback(function f) : m_function(f) { } /** Perform callback using non-member function. */ void operator()(const QVector& rows, unsigned int count) { (*m_function)(rows.mid(0, count)); } private: function m_function; /**< non-member function to use as callback */ }; /** Callback using member function */ template class MemberCallback : public Callback { public: typedef void(T::*function)(const QVector& rows); /** * Constructs callback. * * @param object pointer to object of callback * @param f member function of @p object to use as callback */ MemberCallback(T* object, function f) : m_object(object), m_function(f) { } /** Perform callback using member function. */ void operator()(const QVector& rows, unsigned int count) { (*m_object.*m_function)(rows.mid(0, count)); } private: T* m_object; /**< pointer to object of callback */ function m_function; /**< member function of @p object to use as callback */ }; public: /** Constructs a matrix with @p max_columns number of columns. */ Matrix(unsigned int max_columns); /** Clean up matrix. */ ~Matrix(); /** Add row to matrix. */ void addRow(); /** * Add element to matrix. * * @param column which column in current row to mark as filled */ void addElement(unsigned int column); /** * Search for solutions. * * @param max_solutions maximum allowed solutions * @param max_tries maximum allowed attempts before stopping search * @return total count of solutions */ unsigned int search(unsigned int max_solutions = 0xFFFFFFFF, unsigned int max_tries = 0xFFFFFFFF) { Callback solution; return search(&solution, max_solutions, max_tries); } /** * Search for solutions. * * @param function non-member function called with each solution * @param max_solutions maximum allowed solutions before stopping search * @param max_tries maximum allowed attempts before stopping search * @return total count of solutions */ unsigned int search(void(*function)(const QVector& rows), unsigned int max_solutions = 0xFFFFFFFF, unsigned int max_tries = 0xFFFFFFFF) { GlobalCallback solution(function); return search(&solution, max_solutions, max_tries); } /** * Search for solutions. * * @param object pointer to object of callback * @param function member function of @p object called with each solution * @param max_solutions maximum allowed solutions before stopping search * @param max_tries maximum allowed attempts before stopping search * @return total count of solutions */ template unsigned int search(T* object, void(T::*function)(const QVector& rows), unsigned int max_solutions = 0xFFFFFFFF, unsigned int max_tries = 0xFFFFFFFF) { MemberCallback solution(object, function); return search(&solution, max_solutions, max_tries); } private: /** * Performs the search for solutions. * * @param solution function called with each solution * @param max_solutions maximum allowed solutions before stopping search * @param max_tries maximum allowed attempts before stopping search * @return total count of solutions */ unsigned int search(Callback* solution, unsigned int max_solutions, unsigned int max_tries); /** * Run Algorithm X at depth @p k. * * This is a recursive function that hides rows and columns and checks to * see if a solution has been found. */ void solve(unsigned int k); /** * Remove column or row from matrix. * * @param node head node of column or row to remove */ void cover(HeaderNode* node); /** * Add column or row back to matrix. * * @param node head node of column or row to add */ void uncover(HeaderNode* node); private: unsigned int m_max_columns; /**< amount of constraints */ HeaderNode* m_header; /**< root element */ QVector m_columns; /**< constraints */ QLinkedList m_rows; /**< rows */ QLinkedList m_nodes; /**< row values */ QVector m_output; /**< rows where columns do not conflict */ Callback* m_solution; /**< function to call when a solution is found */ unsigned int m_solutions; /**< how many solutions have been found so far */ unsigned int m_max_solutions; /**< maximum allowed solutions */ unsigned int m_tries; /**< how many attempts have been made so far */ unsigned int m_max_tries; /**< maximum allowed attempts */ }; } #endif // TETZLE_DANCING_LINKS_H tetzle-2.1.5+dfsg1/src/tag_manager.cpp0000644000175000017500000002153713522554645017777 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2010, 2011, 2014, 2016 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #include "tag_manager.h" #include "path.h" #include "toolbar_list.h" #include #include #include #include #include #include //----------------------------------------------------------------------------- TagManager::TagManager(QWidget* parent) : QWidget(parent), m_all_images_item(0) { // Add filter m_filter = new ToolBarList(this); m_filter->setSelectionBehavior(QAbstractItemView::SelectItems); m_filter->setSelectionMode(QAbstractItemView::SingleSelection); connect(m_filter, &ToolBarList::currentItemChanged, this, &TagManager::currentTagChanged); connect(m_filter, &ToolBarList::itemChanged, this, &TagManager::tagChanged); QVBoxLayout* layout = new QVBoxLayout(this); layout->setContentsMargins(0, 0, 0, 0); layout->addWidget(m_filter); // Add filter actions QAction* add_action = new QAction(m_filter->fetchIcon("list-add"), tr("Add Tag"), this); m_filter->addToolBarAction(add_action); connect(add_action, &QAction::triggered, this, &TagManager::addTag); m_remove_action = new QAction(m_filter->fetchIcon("list-remove"), tr("Remove Tag"), this); m_filter->addToolBarAction(m_remove_action); connect(m_remove_action, &QAction::triggered, this, &TagManager::removeTag); // Add tags m_untagged_item = new QListWidgetItem(tr("Untagged")); m_untagged_item->setData(Qt::UserRole, m_untagged_item->text()); m_filter->addItem(m_untagged_item); m_untagged = QDir(Path::images(), "*.*", QDir::Name | QDir::LocaleAware, QDir::Files).entryList(); QSettings file(Path::image("tags"), QSettings::IniFormat); file.beginGroup("Tags"); QStringList tags = file.childKeys(); QStringList images; QDir folder(Path::images(), "*.*"); for (const QString& tag : tags) { images = file.value(tag).toStringList(); QMutableStringListIterator i(images); while (i.hasNext()) { i.next(); if (!folder.exists(i.value())) { i.remove(); } m_untagged.removeAll(i.value()); } m_tags[tag] = images; QListWidgetItem* item = new QListWidgetItem(tag); item->setData(Qt::UserRole, item->text()); item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable); m_filter->addItem(item); } m_filter->sortItems(); m_all_images_item = new QListWidgetItem(tr("All Images")); m_all_images_item->setData(Qt::UserRole, m_all_images_item->text()); QFont font = m_filter->font(); font.setBold(true); m_all_images_item->setFont(font); m_filter->insertItem(0, m_all_images_item); m_filter->setCurrentItem(m_all_images_item, QItemSelectionModel::ClearAndSelect); } //----------------------------------------------------------------------------- QStringList TagManager::images(const QString& tag) const { return m_tags.value(tag); } //----------------------------------------------------------------------------- QStringList TagManager::tags() const { QStringList tags = m_tags.keys(); tags.sort(); return tags; } //----------------------------------------------------------------------------- QString TagManager::tags(const QString& image) const { QStringList tags; QHashIterator i(m_tags); while (i.hasNext()) { i.next(); if (i.value().contains(image)) { tags.append(i.key()); } } tags.sort(); return tags.join(", "); } //----------------------------------------------------------------------------- void TagManager::clearFilter() { m_filter->setCurrentItem(m_all_images_item, QItemSelectionModel::ClearAndSelect); } //----------------------------------------------------------------------------- void TagManager::addImage(const QString& image) { m_untagged.append(image); updateFilter(); } //----------------------------------------------------------------------------- void TagManager::removeImage(const QString& image) { setImageTags(image, QStringList()); m_untagged.removeAll(image); updateFilter(); } //----------------------------------------------------------------------------- void TagManager::setImageTags(const QString& image, const QStringList& tags) { if (!tags.isEmpty()) { m_untagged.removeAll(image); } else { m_untagged.append(image); } bool changed = false; QMutableHashIterator i(m_tags); while (i.hasNext()) { i.next(); bool tagged = tags.contains(i.key()); QStringList& tag = i.value(); if (tag.contains(image)) { if (!tagged) { changed = true; tag.removeAll(image); } } else { if (tagged) { changed = true; tag.append(image); } } } if (changed) { storeTags(); updateFilter(); } } //----------------------------------------------------------------------------- void TagManager::changeEvent(QEvent* event) { QWidget::changeEvent(event); if (event->type() == QEvent::FontChange) { QFont font = m_filter->font(); font.setBold(true); m_all_images_item->setFont(font); } } //----------------------------------------------------------------------------- void TagManager::addTag() { m_remove_action->setEnabled(true); // Add tag static int new_tags = 0; new_tags++; QString tag = tr("Untitled %1").arg(new_tags); m_tags.insert(tag, QStringList()); storeTags(); // Add tag item QListWidgetItem* item = new QListWidgetItem(tag); item->setData(Qt::UserRole, item->text()); item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable); m_filter->addItem(item); m_filter->setCurrentItem(item, QItemSelectionModel::ClearAndSelect); m_filter->editItem(item); } //----------------------------------------------------------------------------- void TagManager::removeTag() { // Find current item QListWidgetItem* item = m_filter->currentItem(); if (!item || m_filter->row(item) == 0) { return; } // Ask before removing if (QMessageBox::question(window(), tr("Question"), tr("Remove selected tag?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::No) { return; } // Remove item QString tag = item->text(); delete item; item = 0; m_remove_action->setEnabled(m_filter->count() > 1); // Remove tag m_tags.remove(tag); storeTags(); updateFilter(); } //----------------------------------------------------------------------------- void TagManager::currentTagChanged(QListWidgetItem* item) { m_remove_action->setEnabled((item != m_all_images_item) && (item != m_untagged_item)); updateFilter(); } //----------------------------------------------------------------------------- void TagManager::tagChanged(QListWidgetItem* item) { if (item == 0) { return; } // Rename tag m_filter->blockSignals(true); QString tag = item->text(); QString old_tag = item->data(Qt::UserRole).toString(); if (tag != old_tag) { if (tag.isEmpty()) { item->setText(old_tag); } else if (m_tags.contains(tag)) { item->setText(old_tag); QMessageBox::warning(window(), tr("Sorry"), tr("A tag with that name already exists.")); } else { item->setData(Qt::UserRole, tag); m_tags.insert(tag, m_tags.take(old_tag)); storeTags(); m_all_images_item = m_filter->takeItem(0); m_filter->sortItems(); m_filter->insertItem(0, m_all_images_item); emit tagsChanged(); } } m_filter->blockSignals(false); // Update list of images updateFilter(); } //----------------------------------------------------------------------------- void TagManager::updateFilter() { QListWidgetItem* item = m_filter->currentItem(); QStringList filter; if (item == m_all_images_item) { filter = m_untagged; QHashIterator i(m_tags); while (i.hasNext()) { i.next(); filter += i.value(); } filter.removeDuplicates(); } else if (item == m_untagged_item) { filter = m_untagged; } else if (item) { filter = images(item->text()); } emit filterChanged(filter); } //----------------------------------------------------------------------------- void TagManager::storeTags() { QSettings file(Path::image("tags"), QSettings::IniFormat); file.clear(); file.beginGroup("Tags"); QHashIterator i(m_tags); while (i.hasNext()) { i.next(); file.setValue(i.key(), i.value()); } } //----------------------------------------------------------------------------- tetzle-2.1.5+dfsg1/src/tile.h0000644000175000017500000000370313522554645016127 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2010, 2011 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #ifndef TILE_H #define TILE_H #include #include #include class Piece; class Tile { public: Tile(int column, int row); QPointF bevel() const; int column() const; int row() const; Piece* parent() const; QPoint pos() const; QPoint gridPos() const; QPoint scenePos() const; void rotate(); void setBevel(int bevel); void setPos(const QPoint& pos); void setParent(Piece* parent); static const int size = 64; void save(QXmlStreamWriter& xml) const; private: Piece* m_parent; int m_column; int m_row; QPoint m_pos; int m_bevel; QPointF m_bevel_coords; }; inline QPointF Tile::bevel() const { return m_bevel_coords; } inline int Tile::column() const { return m_column; } inline int Tile::row() const { return m_row; } inline Piece* Tile::parent() const { return m_parent; } inline QPoint Tile::pos() const { return m_pos; } inline QPoint Tile::gridPos() const { return QPoint(m_column * size, m_row * size); } inline void Tile::setPos(const QPoint& pos) { m_pos = pos; } inline void Tile::setParent(Piece* parent) { m_parent = parent; } #endif tetzle-2.1.5+dfsg1/src/image_properties_dialog.cpp0000644000175000017500000000713713522554645022407 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2010, 2011, 2014 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #include "image_properties_dialog.h" #include "tag_manager.h" #include #include #include #include #include #include #include //----------------------------------------------------------------------------- ImagePropertiesDialog::ImagePropertiesDialog(const QIcon& icon, const QString& name, TagManager* manager, const QString& image, QWidget* parent) : QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint), m_image(image), m_manager(manager) { setWindowTitle(tr("Image Properties")); QLabel* preview = new QLabel(this); preview->setAlignment(Qt::AlignCenter); preview->setPixmap(icon.pixmap(74,74)); preview->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); // Add name m_name = new QLineEdit(name, this); // Add tags m_tags = new QListWidget(this); m_tags->setSortingEnabled(true); QStringList tags = m_manager->tags(); for (const QString& tag : tags) { QListWidgetItem* item = new QListWidgetItem(tag, m_tags); item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsUserCheckable | Qt::ItemIsSelectable); item->setCheckState(m_manager->images(tag).contains(image) ? Qt::Checked : Qt::Unchecked); } if (m_tags->count() > 0) { QListWidgetItem* item = m_tags->item(0); item->setSelected(true); m_tags->setCurrentItem(item); } // Add dialog buttons QDialogButtonBox* buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this); connect(buttons, &QDialogButtonBox::accepted, this, &ImagePropertiesDialog::accept); connect(buttons, &QDialogButtonBox::rejected, this, &ImagePropertiesDialog::reject); // Layout dialog QFormLayout* layout = new QFormLayout(this); layout->addRow(preview); layout->addRow(tr("Name:"), m_name); layout->addRow(tr("Tags:"), m_tags); layout->addRow(buttons); // Resize dialog resize(QSettings().value("ImageProperties/Size", sizeHint()).toSize()); } //----------------------------------------------------------------------------- QString ImagePropertiesDialog::name() const { return m_name->text(); } //----------------------------------------------------------------------------- void ImagePropertiesDialog::accept() { QStringList tags; int count = m_tags->count(); for (int i = 0; i < count; ++i) { if (m_tags->item(i)->checkState() == Qt::Checked) { tags.append(m_tags->item(i)->text()); } } m_manager->setImageTags(m_image, tags); QDialog::accept(); } //----------------------------------------------------------------------------- void ImagePropertiesDialog::hideEvent(QHideEvent* event) { QSettings().setValue("ImageProperties/Size", size()); QDialog::hideEvent(event); } //----------------------------------------------------------------------------- tetzle-2.1.5+dfsg1/src/piece.h0000644000175000017500000000577713522554645016274 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2010, 2011, 2016 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #ifndef PIECE_H #define PIECE_H #include "graphics_layer.h" class Board; class Tile; #include #include #include #include #include #include #include class Piece { public: Piece(const QPoint& pos, int rotation, const QList& tiles, Board* board); ~Piece(); bool collidesWith(const Piece* other) const; bool contains(const QPoint& pos) const; QRect boundingRect() const; bool isSelected() const; QPoint randomPoint() const; int rotation() const; QPoint scenePos() const; void attachNeighbors(); void findNeighbors(const QList& pieces); void moveBy(const QPoint& delta); void pushNeighbors(const QPointF& inertia = QPointF()); void rotate(int rotations); void rotate(const QPoint& origin = QPoint()); void setDepth(int depth); void setPosition(const QPoint& pos); void setSelected(bool selected); void drawTiles() const; void drawShadow() const; void save(QXmlStreamWriter& xml) const; private: void attach(Piece* piece); bool containsTile(int column, int row); void updateCollisionRegions(); void updateShadow(); void updateTiles(); void updateVerts(); private: Board* m_board; QPoint m_pos; QRect m_rect; QList m_tiles; QList m_shadow; QSet m_neighbors; int m_rotation; int m_depth; bool m_selected; VertexArray m_tile_array; VertexArray m_shadow_array; bool m_changed; QRegion m_collision_region; QRegion m_collision_region_expanded; }; inline QRect Piece::boundingRect() const { return m_rect.translated(m_pos); } inline bool Piece::contains(const QPoint& pos) const { return m_collision_region.contains(pos); } inline bool Piece::isSelected() const { return m_selected; } inline int Piece::rotation() const { return m_rotation; } inline QPoint Piece::scenePos() const { return m_pos; } inline void Piece::moveBy(const QPoint& delta) { m_pos += delta; updateVerts(); } inline void Piece::setPosition(const QPoint& pos) { m_pos = pos; updateVerts(); } inline void Piece::drawTiles() const { graphics_layer->draw(m_tile_array); } inline void Piece::drawShadow() const { graphics_layer->draw(m_shadow_array); } #endif tetzle-2.1.5+dfsg1/src/choose_game_dialog.h0000644000175000017500000000267313522554645020767 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2011 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #ifndef CHOOSE_GAME_DIALOG_H #define CHOOSE_GAME_DIALOG_H class NewGameTab; #include class QTabWidget; class ChooseGameDialog : public QDialog { Q_OBJECT public: ChooseGameDialog(const QStringList& files, int current_id, QWidget* parent = 0); static QStringList currentGames(); signals: void newGame(const QString& image, int difficulty); void openGame(int id); protected: virtual void dragEnterEvent(QDragEnterEvent* event); virtual void dropEvent(QDropEvent* event); virtual void hideEvent(QHideEvent* event); private: QTabWidget* m_tabs; NewGameTab* m_new_game_tab; }; #endif tetzle-2.1.5+dfsg1/src/main.cpp0000644000175000017500000001525013522554645016451 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2018, 2019 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #include #include #include #include #include #include #include "board.h" #include "locale_dialog.h" #include "path.h" #include "window.h" //----------------------------------------------------------------------------- class Application : public QApplication { public: Application(int& argc, char** argv); void createWindow(); protected: virtual bool event(QEvent* e); private: QStringList m_files; Window* m_window; }; //----------------------------------------------------------------------------- Application::Application(int& argc, char** argv) : QApplication(argc, argv), m_window(0) { setApplicationName("Tetzle"); setApplicationVersion(VERSIONSTR); setApplicationDisplayName(Window::tr("Tetzle")); setOrganizationDomain("gottcode.org"); setOrganizationName("GottCode"); #if !defined(Q_OS_WIN) && !defined(Q_OS_MAC) setWindowIcon(QIcon::fromTheme("tetzle", QIcon(":/tetzle.png"))); setDesktopFileName("tetzle"); #endif setAttribute(Qt::AA_UseHighDpiPixmaps, true); m_files = arguments().mid(1); processEvents(); } //----------------------------------------------------------------------------- void Application::createWindow() { // Remove command-line parameters from file list for (int i = 0; i < m_files.size(); ++i) { if (m_files.at(i).startsWith("--")) { m_files.removeAt(i); --i; } } m_window = new Window(m_files); } //----------------------------------------------------------------------------- bool Application::event(QEvent* e) { if (e->type() != QEvent::FileOpen) { return QApplication::event(e); } else { QString file = static_cast(e)->file(); if (m_window) { m_window->addImages(QStringList(file)); } else { m_files.append(file); } e->accept(); return true; } } //----------------------------------------------------------------------------- int main(int argc, char** argv) { #if !defined(Q_OS_MAC) if (!qEnvironmentVariableIsSet("QT_DEVICE_PIXEL_RATIO") && !qEnvironmentVariableIsSet("QT_AUTO_SCREEN_SCALE_FACTOR") && !qEnvironmentVariableIsSet("QT_SCALE_FACTOR") && !qEnvironmentVariableIsSet("QT_SCREEN_SCALE_FACTORS")) { QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); } #endif Application app(argc, argv); // Load application language LocaleDialog::loadTranslator("tetzle_"); // Load command-line settings QSettings settings; QCommandLineParser parser; parser.setApplicationDescription(QCoreApplication::translate("Window", "A jigsaw puzzle with tetrominoes for pieces")); parser.addHelpOption(); parser.addVersionOption(); parser.addOption(QCommandLineOption(QStringList() << "G" << "graphics-layer", QCoreApplication::translate("main", "Select OpenGL version."), QCoreApplication::translate("main", "version"))); parser.process(app); // Set OpenGL version QString requested = settings.value("GraphicsLayer").toString(); if (parser.isSet("graphics-layer")) { requested = parser.value("graphics-layer"); } requested = requested.remove('.'); requested = requested.split(' ').first(); GraphicsLayer::setVersion(requested.toInt()); // Create data location QString path = Path::datapath(); if (!QFile::exists(path)) { QDir dir(path); dir.mkpath(dir.absolutePath()); // Migrate data from old location QString oldpath = Path::oldDataPath(); if (QFile::exists(oldpath)) { QStringList old_dirs = QStringList() << ""; QDir olddir(oldpath); for (int i = 0; i < old_dirs.count(); ++i) { QString subpath = old_dirs.at(i); dir.mkpath(path + "/" + subpath); olddir.setPath(oldpath + "/" + subpath); QStringList subdirs = olddir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); for (const QString& subdir : subdirs) { old_dirs.append(subpath + "/" + subdir); } QStringList files = olddir.entryList(QDir::Files); for (const QString& file : files) { QFile::rename(olddir.absoluteFilePath(file), path + "/" + subpath + "/" + file); } } olddir.setPath(oldpath); for (int i = old_dirs.count() - 1; i >= 0; --i) { olddir.rmdir(oldpath + "/" + old_dirs.at(i)); } } } QDir dir(path); dir.mkpath(path + "/saves/"); // Update thumbnails if (dir.exists("previews")) { QLabel label(Board::tr("Please Wait"), 0, Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint | Qt::CustomizeWindowHint | Qt::WindowTitleHint); label.setWindowTitle(Window::tr("Tetzle")); label.setAlignment(Qt::AlignCenter); label.setContentsMargins(10, 10, 10, 10); label.setFixedSize(label.sizeHint()); label.show(); app.processEvents(); QStringList old_dirs; old_dirs += (path + "/previews/"); old_dirs += (path + "/images/thumbnails/"); old_dirs += (path + "/images/thumbnails/large/"); old_dirs += (path + "/images/thumbnails/small/"); for (int i = 0; i < old_dirs.count(); ++i) { dir.setPath(old_dirs.at(i)); QStringList entries = dir.entryList(QDir::Files); for (const QString& info : entries) { dir.remove(info); } } dir.setPath(path); while (!old_dirs.isEmpty()) { dir.rmpath(old_dirs.takeLast()); } } dir.mkpath(path + "/images/"); dir.mkpath(path + "/images/thumbnails/"); // Update settings layout if (settings.value("Version", 0).toInt() < 2) { settings.setValue("NewGame/Image", settings.value("Image")); settings.remove("Image"); settings.setValue("NewGame/Pieces", settings.value("Pieces")); settings.remove("Pieces"); settings.setValue("AddImage/Path", settings.value("AddImagePath")); settings.remove("AddImagePath"); settings.remove("MaximumPreviews"); settings.remove("AddImage/MaximumPreviews"); settings.setValue("Version", 2); } // Reset tracking of the game currently open settings.remove("OpenGame"); app.createWindow(); return app.exec(); } //----------------------------------------------------------------------------- tetzle-2.1.5+dfsg1/src/window.h0000644000175000017500000000326113522554645016500 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2010, 2011 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #ifndef WINDOW_H #define WINDOW_H #include class QAction; class QProgressBar; class Board; class ZoomSlider; class Window : public QMainWindow { Q_OBJECT public: Window(const QStringList& files = QStringList()); void addImages(const QStringList& files); protected: virtual void changeEvent(QEvent* event); virtual void closeEvent(QCloseEvent* event); virtual void dragEnterEvent(QDragEnterEvent* event); virtual void dropEvent(QDropEvent* event); private slots: void chooseGame(const QStringList& files = QStringList()); void gameFinished(); void setFullScreen(bool enable); void setLocale(); void showAppearance(); void showControls(); void showAbout(); private: QAction* m_zoom_fit_action; QAction* m_toggle_overview_action; ZoomSlider* m_slider; QProgressBar* m_completed; Board* m_board; }; #endif tetzle-2.1.5+dfsg1/src/color_button.cpp0000644000175000017500000000404713522554645020240 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2009, 2010, 2014 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #include "color_button.h" #include #include #include //----------------------------------------------------------------------------- ColorButton::ColorButton(QWidget* parent) : QPushButton(parent) { setAutoDefault(false); connect(this, &QPushButton::clicked, this, &ColorButton::chooseColor); } //----------------------------------------------------------------------------- void ColorButton::setColor(const QColor& color) { if (m_color == color) { return; } m_color = color; QPixmap swatch(75, fontMetrics().height()); swatch.fill(m_color); { QPainter painter(&swatch); painter.setPen(m_color.darker()); painter.drawRect(0, 0, swatch.width() - 1, swatch.height() - 1); painter.setPen(m_color.lighter()); painter.drawRect(1, 1, swatch.width() - 3, swatch.height() - 3); } setIconSize(swatch.size()); setIcon(swatch); emit changed(m_color); } //----------------------------------------------------------------------------- void ColorButton::chooseColor() { QColor color = QColorDialog::getColor(m_color, this); if (color.isValid()) { setColor(color); } } //----------------------------------------------------------------------------- tetzle-2.1.5+dfsg1/src/path.h0000644000175000017500000000242213522554645016123 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2010, 2013, 2016 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #ifndef PATH_H #define PATH_H #include class QString; class Path { public: static QString datapath(); static QString oldDataPath(); static QString image(const QString& file); static QString thumbnail(const QString& image, qreal pixelratio); static QString save(const QString& file); static QString save(int game); static QString images(); static QString thumbnails(); static QString saves(); }; #endif tetzle-2.1.5+dfsg1/src/dancing_links.cpp0000644000175000017500000001071013522554645020324 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2009, 2013 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #include "dancing_links.h" //----------------------------------------------------------------------------- DLX::Matrix::Matrix(unsigned int max_columns) : m_max_columns(max_columns), m_columns(max_columns), m_output(max_columns), m_solutions(0), m_tries(0) { m_header = new HeaderNode; m_header->column = m_header; Node* node = m_header; HeaderNode* column = 0; for (unsigned int i = 0; i < m_max_columns; ++i) { column = &m_columns[i]; column->id = i; column->up = column->down = column->column = column; column->left = node; node->right = column; node = column; } node->right = m_header; } //----------------------------------------------------------------------------- DLX::Matrix::~Matrix() { delete m_header; } //----------------------------------------------------------------------------- void DLX::Matrix::addRow() { m_rows.append(HeaderNode()); HeaderNode* row = &m_rows.last(); row->left = row->right = row->up = row->down = row->column = row; } //----------------------------------------------------------------------------- void DLX::Matrix::addElement(unsigned int c) { Q_ASSERT(c < m_max_columns); HeaderNode* column = &m_columns[c]; HeaderNode* row = &m_rows.last(); m_nodes.append(Node()); Node* node = &m_nodes.last(); node->left = row->left; node->right = row; row->left->right = node; row->left = node; node->up = column->up; node->down = column; column->up->down = node; column->up = node; node->column = column; column->size++; } //----------------------------------------------------------------------------- unsigned int DLX::Matrix::search(Callback* solution, unsigned int max_solutions, unsigned int max_tries) { m_solution = solution; m_solutions = 0; m_max_solutions = max_solutions; m_tries = 0; m_max_tries = (max_tries != 0) ? max_tries : m_max_columns; solve(0); return m_solutions; } //----------------------------------------------------------------------------- void DLX::Matrix::solve(unsigned int k) { // If matrix is empty a solution has been found. if (m_header->right == m_header) { ++m_solutions; (*m_solution)(m_output, k); return; } if ((m_solutions >= m_max_solutions) || (++m_tries >= m_max_tries)) { return; } // Choose column with lowest amount of 1s. HeaderNode* column = 0; unsigned int s = 0xFFFFFFFF; for(HeaderNode* i = m_header->right->column; i != m_header; i = i->right->column) { if (i->size < s) { column = i; s = i->size; } } cover(column); unsigned int next_k = k + 1; for(Node* row = column->down; row != column; row = row->down) { m_output[k] = row; for(Node* j = row->right; j != row; j = j->right) { cover(j->column); } solve(next_k); row = m_output[k]; column = row->column; for(Node* j = row->left; j != row; j = j->left) { uncover(j->column); } } uncover(column); } //----------------------------------------------------------------------------- void DLX::Matrix::cover(HeaderNode* node) { node->right->left = node->left; node->left->right = node->right; for (Node* i = node->down; i != node; i = i->down) { for (Node* j = i->right; j != i; j = j->right) { j->down->up = j->up; j->up->down = j->down; j->column->size--; } } } //----------------------------------------------------------------------------- void DLX::Matrix::uncover(HeaderNode* node) { for (Node* i = node->up; i != node; i = i->up) { for (Node* j = i->left; j != i; j = j->left) { j->column->size++; j->down->up = j; j->up->down = j; } } node->right->left = node; node->left->right = node; } //----------------------------------------------------------------------------- tetzle-2.1.5+dfsg1/src/add_image.h0000644000175000017500000000241013522554645017056 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2010 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #ifndef ADD_IMAGE_H #define ADD_IMAGE_H #include class QDragEnterEvent; class QDropEvent; class QString; class QStringList; class QWidget; class AddImage { Q_DECLARE_TR_FUNCTIONS(AddImage) public: static void dragEnterEvent(QDragEnterEvent* event); static QStringList dropEvent(QDropEvent* event); static QStringList getOpenFileNames(QWidget* parent = 0); static QString supportedFormats(); }; #endif tetzle-2.1.5+dfsg1/src/add_image.cpp0000644000175000017500000000554513522554645017425 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2010, 2012, 2014 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #include "add_image.h" #include #include #include #include #include #include #include #include #include //----------------------------------------------------------------------------- void AddImage::dragEnterEvent(QDragEnterEvent* event) { bool accept = false; QList urls = event->mimeData()->urls(); for (const QUrl& url : urls) { if (QDir::match(supportedFormats(), url.toLocalFile())) { accept = true; break; } } if (accept) { event->acceptProposedAction(); } } //----------------------------------------------------------------------------- QStringList AddImage::dropEvent(QDropEvent* event) { event->setDropAction(Qt::CopyAction); QStringList files; QList urls = event->mimeData()->urls(); for (const QUrl& url : urls) { QString file = url.toLocalFile(); if (QDir::match(supportedFormats(), file)) { files.append(file); } } if (!files.isEmpty()) { event->acceptProposedAction(); } return files; } //----------------------------------------------------------------------------- QStringList AddImage::getOpenFileNames(QWidget* parent) { QString dir = QStandardPaths::writableLocation(QStandardPaths::PicturesLocation); dir = QSettings().value("AddImage/Path", dir).toString(); QStringList images = QFileDialog::getOpenFileNames(parent, tr("Open Image"), dir, supportedFormats()); if (!images.isEmpty()) { QSettings().setValue("AddImage/Path", QFileInfo(images.last()).absolutePath()); } return images; } //----------------------------------------------------------------------------- QString AddImage::supportedFormats() { static QString string; if (string.isEmpty()) { QStringList formats; for (const QByteArray& type : QImageReader::supportedImageFormats()) { formats.append("*." + type); } string = "Images(" + formats.join(" ") + ")"; } return string; } //----------------------------------------------------------------------------- tetzle-2.1.5+dfsg1/src/board.cpp0000644000175000017500000010175213522554645016617 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2010, 2011, 2012, 2014, 2015, 2016 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #include "board.h" #include "appearance_dialog.h" #include "generator.h" #include "message.h" #include "overview.h" #include "path.h" #include "piece.h" #include "tile.h" #include "zoom_slider.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //----------------------------------------------------------------------------- int powerOfTwo(int value) { value--; value |= value >> 1; value |= value >> 2; value |= value >> 4; value |= value >> 8; value |= value >> 16; value++; return value; } namespace { struct PieceDetails { QPoint pos; int rotation; QList tiles; PieceDetails(const QPoint& pos_, int rotation_, const QList& tiles_) : pos(pos_), rotation(rotation_), tiles(tiles_) { } }; } //----------------------------------------------------------------------------- Board::Board(QWidget* parent) : QOpenGLWidget(parent), m_id(0), m_load_bevels(true), m_has_bevels(true), m_has_shadows(true), m_image(nullptr), m_image_ts(0), m_columns(0), m_rows(0), m_total_pieces(0), m_completed(0), m_pos(0, 0), m_scale_level(9), m_scale(0), m_scrolling(false), m_selecting(false), m_finished(false), m_action_key(0), m_action_button(Qt::NoButton) { setFocusPolicy(Qt::StrongFocus); setFocus(); setMouseTracking(true); m_message = new Message(this); // Create overview dialog m_overview = new Overview(parent); connect(m_overview, &Overview::toggled, this, &Board::overviewToggled); } //----------------------------------------------------------------------------- Board::~Board() { cleanup(); delete m_bumpmap_image; delete m_shadow_image; delete m_message; delete graphics_layer; graphics_layer = 0; } //----------------------------------------------------------------------------- Piece* Board::findCollidingPiece(Piece* piece) const { for (int i = m_pieces.count() - 1; i >= 0; --i) { Piece* other = m_pieces.at(i); if (other != piece && piece->collidesWith(other)) { return other; } } return 0; } //----------------------------------------------------------------------------- void Board::removePiece(Piece* piece) { m_pieces.removeAll(piece); delete piece; piece = 0; } //----------------------------------------------------------------------------- void Board::setAppearance(const AppearanceDialog& dialog) { makeCurrent(); m_has_bevels = dialog.hasBevels(); m_has_shadows = dialog.hasShadows(); QPalette palette = dialog.colors(); graphics_layer->setClearColor(palette.color(QPalette::Base).darker(150)); setPalette(palette); for (Piece* piece : m_pieces) { piece->setSelected(piece->isSelected()); } } //----------------------------------------------------------------------------- void Board::updateSceneRectangle(Piece* piece) { int size = Tile::size / 2; m_scene = m_scene.united(piece->boundingRect().adjusted(-size, -size, size, size)); updateArray(m_scene_array, m_scene, 0); } //----------------------------------------------------------------------------- void Board::newGame(const QString& image, int difficulty) { // Remove any previous textures and tiles cleanup(); zoom(0); // Prevent starting a game with a missing image if (!QFileInfo(Path::image(image)).exists()) { QMessageBox::warning(this, tr("Error"), tr("Missing image.")); return; } // Update player about status emit completionChanged(0); QApplication::setOverrideCursor(Qt::WaitCursor); m_message->setText(tr("Please Wait")); m_message->setVisible(true); // Generate ID m_id = 0; for (const QString& file : QDir(Path::saves()).entryList(QDir::Files)) { m_id = std::max(m_id, file.section(".", 0, 0).toInt()); } m_id++; // Find puzzle dimensions QSizeF size = QImageReader(Path::image(image)).size(); if (size.width() > size.height()) { m_columns = 4 * difficulty; m_rows = std::max(std::lround(m_columns * size.height() / size.width()), 1L); } else { m_rows = 4 * difficulty; m_columns = std::max(std::lround(m_rows * size.width() / size.height()), 1L); } m_total_pieces = (m_columns * m_rows) / 4; // Create textures updateStatusMessage(tr("Loading image...")); m_image_path = image; m_load_bevels = true; loadImage(); // Generate puzzle updateStatusMessage(tr("Generating puzzle...")); #ifndef Q_OS_WIN std::random_device rd; m_random.seed(rd()); #else m_random.seed(time(0)); #endif Generator generator(m_columns, m_rows, m_random); QList< QList > pieces = generator.pieces(); std::shuffle(pieces.begin(), pieces.end(), m_random); updateStatusMessage(tr("Creating pieces...")); int count = pieces.count(); int step = (count > 25) ? (count / 25) : 1; for (int i = 0; i < count; ++i) { // Create piece Piece* piece = new Piece(QPoint(0, 0), randomInt(4), pieces.at(i), this); m_pieces.append(piece); piece->setPosition(m_pos - QRect(QPoint(0,0), piece->boundingRect().size()).center()); piece->pushNeighbors(); // Show pieces if ((i % step) == 0) { m_pos = m_scene.center(); update(); updateStatusMessage(tr("Creating pieces...")); } } for (int i = 0; i < count; ++i) { m_pieces.at(i)->findNeighbors(m_pieces); } emit clearMessage(); // Draw tiles m_message->setVisible(false); zoomFit(); QApplication::restoreOverrideCursor(); updateCompleted(); emit retrievePiecesAvailable(true); } //----------------------------------------------------------------------------- void Board::openGame(int id) { // Remove any previous textures and tiles cleanup(); // Update player about status emit completionChanged(0); QApplication::setOverrideCursor(Qt::WaitCursor); m_message->setText(tr("Please Wait")); m_message->setVisible(true); // Open saved game file QFile file(Path::save(id)); if (!file.open(QIODevice::ReadOnly)) { return; } m_id = id; QXmlStreamReader xml(&file); // Load puzzle details updateStatusMessage(tr("Loading puzzle...")); while (!xml.isStartElement()) { xml.readNext(); } QXmlStreamAttributes attributes = xml.attributes(); int board_zoom = 0; QRect rect; unsigned int version = attributes.value("version").toString().toUInt(); if (xml.name() == QLatin1String("tetzle") && version <= 5) { m_image_path = attributes.value("image").toString(); if (!QFileInfo(Path::image(m_image_path)).exists()) { QApplication::restoreOverrideCursor(); QMessageBox::warning(this, tr("Error"), tr("Missing image.")); cleanup(); return; } board_zoom = attributes.value("zoom").toString().toInt(); m_pos.setX(attributes.value("x").toString().toInt()); m_pos.setY(attributes.value("y").toString().toInt()); QStringList values = attributes.value("rect").toString().split(","); rect.setRect(values.value(0).toInt(), values.value(1). toInt(), values.value(2).toInt(), values.value(3).toInt()); } else { xml.raiseError(tr("Unknown data format")); } // Load piece details QList pieces; QPoint pos; int rotation = -1; QList tiles; bool piece = (version > 3); m_load_bevels = false; while (!xml.atEnd()) { xml.readNext(); if (xml.isEndElement() && (xml.name() == QLatin1String("piece") || xml.name() == QLatin1String("group"))) { pieces.append(PieceDetails(pos, rotation, tiles)); } if (!xml.isStartElement()) { continue; } if (xml.name() == QLatin1String("tile")) { attributes = xml.attributes(); if (!piece) { piece = true; pos = QPoint(attributes.value("x").toString().toInt(), attributes.value("y").toString().toInt()); rotation = (rotation != -1) ? rotation : attributes.value("rotation").toString().toInt(); } int column = attributes.value("column").toString().toInt(); m_columns = std::max(m_columns, column); int row = attributes.value("row").toString().toInt(); m_rows = std::max(m_rows, row); int bevel = attributes.value("bevel").toString().toInt(); if (bevel) { m_load_bevels = true; } Tile* tile = new Tile(column, row); tile->setBevel(bevel); tiles.append(tile); } else if (xml.name() == QLatin1String("piece")) { attributes = xml.attributes(); pos = QPoint(attributes.value("x").toString().toInt(), attributes.value("y").toString().toInt()); rotation = attributes.value("rotation").toString().toInt(); tiles.clear(); } else if (xml.name() == QLatin1String("group")) { piece = false; QStringRef r = xml.attributes().value("rotation"); rotation = !r.isEmpty() ? r.toString().toInt() : -1; tiles.clear(); } else if (xml.name() != QLatin1String("overview")) { xml.raiseError(tr("Unknown element '%1'").arg(xml.name().toString())); } } if (xml.hasError()) { QApplication::restoreOverrideCursor(); QMessageBox::warning(this, tr("Error"), tr("Error parsing XML file.\n\n%1").arg(xml.errorString())); cleanup(); return; } m_total_pieces = (++m_columns * ++m_rows) / 4; // Load image updateStatusMessage(tr("Loading image...")); loadImage(); // Load pieces updateStatusMessage(tr("Loading pieces...")); int count = pieces.count(); for (int i = 0; i < count; ++i) { const PieceDetails& details = pieces.at(i); m_pieces.append( new Piece(details.pos, details.rotation, details.tiles, this) ); } for (int i = 0; i < count; ++i) { m_pieces.at(i)->findNeighbors(m_pieces); } emit clearMessage(); // Load scene rectangle updateSceneRectangle(); if (rect.contains(m_scene)) { m_scene = rect; updateArray(m_scene_array, m_scene, 0); } // Draw tiles m_message->setVisible(false); if (version > 3) { zoom(board_zoom); } else { zoom(0); retrievePieces(); } QApplication::restoreOverrideCursor(); updateCompleted(); emit retrievePiecesAvailable(true); } //----------------------------------------------------------------------------- void Board::saveGame() { if (pieceCount() <= 1) { return; } QFile file(Path::save(m_id)); if (!file.open(QIODevice::WriteOnly)) { return; } QXmlStreamWriter xml(&file); xml.setAutoFormatting(true); xml.writeStartDocument(); xml.writeStartElement("tetzle"); xml.writeAttribute("version", "5"); xml.writeAttribute("image", m_image_path); xml.writeAttribute("pieces", QString::number(m_total_pieces)); xml.writeAttribute("complete", QString::number(m_completed)); xml.writeAttribute("zoom", QString::number(m_scale_level)); xml.writeAttribute("x", QString::number(m_pos.x())); xml.writeAttribute("y", QString::number(m_pos.y())); xml.writeAttribute("rect", QString("%1,%2,%3,%4"). arg(m_scene.x()) .arg(m_scene.y()) .arg(m_scene.width()) .arg(m_scene.height())); for (Piece* piece : m_pieces) { piece->save(xml); } for (Piece* piece : m_selected_pieces) { piece->save(xml); } for (Piece* piece : m_active_pieces) { piece->save(xml); } xml.writeEndElement(); xml.writeEndDocument(); } //----------------------------------------------------------------------------- void Board::retrievePieces() { // Inform user this will take awhile updateStatusMessage(tr("Retrieving pieces...")); QApplication::setOverrideCursor(Qt::WaitCursor); // Make sure all pieces are free QList pieces = m_pieces + m_active_pieces + m_selected_pieces; m_pieces.clear(); m_active_pieces.clear(); m_selected_pieces.clear(); // Clear view while retrieving pieces m_pos = QPoint(0,0); m_scene = QRect(0,0,0,0); // Move all pieces to center of view std::shuffle(pieces.begin(), pieces.end(), m_random); for (Piece* piece : pieces) { m_pieces.append(piece); piece->setPosition(m_pos - QRect(QPoint(0,0), piece->boundingRect().size()).center()); piece->setSelected(false); piece->pushNeighbors(); } // Update view zoomFit(); // Clear message and cursor emit clearMessage(); QApplication::restoreOverrideCursor(); } //----------------------------------------------------------------------------- void Board::zoomIn() { zoom(m_scale_level + 1); } //----------------------------------------------------------------------------- void Board::zoomOut() { zoom(m_scale_level - 1); } //----------------------------------------------------------------------------- void Board::zoomFit() { // Find new scale level float sx = static_cast(width()) / static_cast(m_scene.width()); float sy = static_cast(height()) / static_cast(m_scene.height()); float factor = qBound(0.0f, std::min(sx, sy), 1.0f); int level = 0; for (int i = 9; i >= 0; --i) { if (ZoomSlider::scaleFactor(i) <= factor) { level = i; break; } } m_pos = m_scene.center(); if (m_scale_level == level) { update(); return; } // Animate zoom int delta = (level > m_scale_level) ? 1 : -1; int count = abs(level - m_scale_level); for (int i = 0; i < count; ++i) { zoom(m_scale_level + delta); } } //----------------------------------------------------------------------------- void Board::zoom(int level) { QPoint old_pos = mapCursorPosition(); // Calculate new scale value m_scale_level = qBound(0, level, 9); m_scale = ZoomSlider::scaleFactor(m_scale_level); // Update mouse cursor position QPoint new_pos = mapCursorPosition(); int count = m_active_pieces.count(); for (int i = 0; i < count; ++i) { m_active_pieces.at(i)->moveBy(new_pos - old_pos); } updateCursor(); // Update scene update(); emit zoomChanged(m_scale_level, m_scale); emit zoomOutAvailable(m_scale_level > 0); emit zoomInAvailable(m_scale_level < 9); } //----------------------------------------------------------------------------- void Board::toggleOverview() { bool visible = !m_overview->isVisible(); m_overview->setVisible(visible); if (visible) { activateWindow(); } QSettings().setValue("Overview/Visible", visible); } //----------------------------------------------------------------------------- void Board::initializeGL() { // Configure OpenGL GraphicsLayer::init(); // Load static images m_bumpmap_image = new QOpenGLTexture(QImage(":/bumpmap.png")); m_bumpmap_image->setMinificationFilter(QOpenGLTexture::LinearMipMapLinear); m_bumpmap_image->setMagnificationFilter(QOpenGLTexture::Linear); m_shadow_image = new QOpenGLTexture(QImage(":/shadow.png")); m_shadow_image->setMinificationFilter(QOpenGLTexture::LinearMipMapLinear); m_shadow_image->setMagnificationFilter(QOpenGLTexture::Linear); // Load colors AppearanceDialog dialog; dialog.accept(); setAppearance(dialog); } //----------------------------------------------------------------------------- void Board::resizeGL(int w, int h) { const qreal pixelratio = devicePixelRatioF(); graphics_layer->setViewport(0, 0, w * pixelratio, h * pixelratio); QMatrix4x4 matrix; matrix.ortho(0, w * pixelratio, h * pixelratio, 0, -4000, 3); graphics_layer->setProjection(matrix); m_message->setViewport(size()); } //----------------------------------------------------------------------------- void Board::paintGL() { graphics_layer->clear(); graphics_layer->uploadData(); // Transform viewport const qreal pixelratio = devicePixelRatioF(); QRect viewport = rect(); viewport.setSize(viewport.size() * pixelratio); QMatrix4x4 matrix; matrix.scale(m_scale * pixelratio, m_scale * pixelratio); matrix.translate((width() / (2 * m_scale)) - m_pos.x(), (height() / (2 * m_scale)) - m_pos.y()); graphics_layer->setModelview(matrix); // Draw scene rectangle QColor fill = palette().color(QPalette::Base); QColor border = fill.lighter(125); if (m_scene.isValid()) { drawArray(m_scene_array, fill, border); } // Draw pieces if (m_image) { graphics_layer->bindTexture(0, m_image->textureId()); if (m_has_bevels && m_load_bevels) { graphics_layer->setTextureUnits(2); graphics_layer->bindTexture(1, m_bumpmap_image->textureId()); } int count = m_pieces.count(); for (int i = 0; i < count; ++i) { QRect r = matrix.mapRect(m_pieces.at(i)->boundingRect()); if (viewport.intersects(r)) { m_pieces.at(i)->drawTiles(); } } count = m_selected_pieces.count(); for (int i = 0; i < count; ++i) { m_selected_pieces.at(i)->drawTiles(); } count = m_active_pieces.count(); for (int i = 0; i < count; ++i) { m_active_pieces.at(i)->drawTiles(); } if (m_has_bevels) { graphics_layer->setTextureUnits(1); } } // Draw shadows graphics_layer->setBlended(true); if (m_image && m_has_shadows) { graphics_layer->bindTexture(0, m_shadow_image->textureId()); graphics_layer->setColor(palette().color(QPalette::Text)); int count = m_pieces.count(); for (int i = 0; i < count; ++i) { QRect r = matrix.mapRect(m_pieces.at(i)->boundingRect()); if (viewport.intersects(r)) { m_pieces.at(i)->drawShadow(); } } graphics_layer->setColor(palette().color(QPalette::Highlight)); count = m_selected_pieces.count(); for (int i = 0; i < count; ++i) { m_selected_pieces.at(i)->drawShadow(); } count = m_active_pieces.count(); for (int i = 0; i < count; ++i) { m_active_pieces.at(i)->drawShadow(); } graphics_layer->setColor(Qt::white); } // Untransform viewport if (qFuzzyCompare(pixelratio, 1.0)) { graphics_layer->setModelview(QMatrix4x4()); } else { QMatrix4x4 matrix; matrix.scale(pixelratio, pixelratio); graphics_layer->setModelview(matrix); } // Draw selection rectangle if (m_selecting) { fill = border = palette().color(QPalette::Highlight); fill.setAlpha(48); drawArray(m_selection_array, fill, border); } // Draw message m_message->draw(); graphics_layer->setBlended(false); } //----------------------------------------------------------------------------- void Board::keyPressEvent(QKeyEvent* event) { int offset = (event->modifiers() & Qt::ControlModifier) ? 1 : 10; switch (event->key()) { // Scroll left case Qt::Key_Left: scroll(QPoint(2 * offset, 0)); update(); updateCursor(); break; // Scroll up case Qt::Key_Up: scroll(QPoint(0, 2 * offset)); update(); updateCursor(); break; // Scroll right case Qt::Key_Right: scroll(QPoint(-2 * offset, 0)); update(); updateCursor(); break; // Scroll down case Qt::Key_Down: scroll(QPoint(0, -2 * offset)); update(); updateCursor(); break; // Grab or release piece case Qt::Key_Space: togglePiecesUnderCursor(); break; // Rotate piece case Qt::Key_R: rotatePiece(); break; // Move cursor up case Qt::Key_W: moveCursor(QPoint(0, -offset)); break; // Move cursor left case Qt::Key_A: moveCursor(QPoint(-offset, 0)); break; // Move cursor down case Qt::Key_S: moveCursor(QPoint(0, offset)); break; // Move cursor right case Qt::Key_D: moveCursor(QPoint(offset, 0)); break; default: if (!event->isAutoRepeat()) { m_action_key = event->key(); } } QOpenGLWidget::keyPressEvent(event); } //----------------------------------------------------------------------------- void Board::keyReleaseEvent(QKeyEvent* event) { if (!event->isAutoRepeat()) { m_action_key = 0; } QOpenGLWidget::keyReleaseEvent(event); } //----------------------------------------------------------------------------- void Board::mousePressEvent(QMouseEvent* event) { if (m_finished || m_action_button != Qt::NoButton) { return; } m_action_button = event->button(); if (m_action_button == Qt::MidButton || (m_action_button == Qt::LeftButton && m_action_key == Qt::Key_Shift)) { startScrolling(); } else if (m_action_button == Qt::LeftButton) { m_select_pos = event->pos(); } QOpenGLWidget::mousePressEvent(event); } //----------------------------------------------------------------------------- void Board::mouseReleaseEvent(QMouseEvent* event) { if (m_finished || event->button() != m_action_button) { return; } switch (m_action_button) { case Qt::LeftButton: togglePiecesUnderCursor(); break; case Qt::RightButton: rotatePiece(); break; case Qt::MidButton: stopScrolling(); break; default: break; } m_action_button = Qt::NoButton; QOpenGLWidget::mouseReleaseEvent(event); } //----------------------------------------------------------------------------- void Board::mouseMoveEvent(QMouseEvent* event) { QPoint delta = (event->pos() / m_scale) - (m_cursor_pos / m_scale); if (m_scrolling) { scroll(delta); } if (!m_active_pieces.isEmpty()) { int count = m_active_pieces.count(); for (int i = 0; i < count; ++i) { m_active_pieces.at(i)->moveBy(delta); } // Attach neighbors if only one piece is active if (m_active_pieces.count() == 1) { m_active_pieces.first()->attachNeighbors(); updateCompleted(); } // Handle finishing game if (pieceCount() == 1) { finishGame(); } } if (!m_selecting && m_action_button == Qt::LeftButton && m_action_key == 0) { m_selecting = QVector2D(event->pos() - m_select_pos).length() >= QApplication::startDragDistance(); } if (m_selecting) { QRect rect = QRect(mapPosition(event->pos()), mapPosition(m_select_pos)).normalized(); // Check for pieces that are now selected for (int i = 0; i < m_pieces.count(); ++i) { Piece* piece = m_pieces.at(i); if (rect.intersects(piece->boundingRect())) { piece->setSelected(true); m_selected_pieces += m_pieces.takeAt(i); i--; } } // Check for pieces that are no longer selected for (int i = 0; i < m_selected_pieces.count(); ++i) { Piece* piece = m_selected_pieces.at(i); if (!rect.intersects(piece->boundingRect())) { piece->setSelected(false); m_pieces += m_selected_pieces.takeAt(i); i--; } } updateArray(m_selection_array, QRect(event->pos(), m_select_pos).normalized(), 3000); } update(); m_cursor_pos = event->pos(); if (!m_scrolling) { updateCursor(); } } //----------------------------------------------------------------------------- void Board::wheelEvent(QWheelEvent* event) { if (event->delta() > 0) { zoomIn(); } else { zoomOut(); } QOpenGLWidget::wheelEvent(event); } //----------------------------------------------------------------------------- void Board::startScrolling() { m_scrolling = true; setCursor(Qt::SizeAllCursor); } //----------------------------------------------------------------------------- void Board::stopScrolling() { m_scrolling = false; updateCursor(); } //----------------------------------------------------------------------------- void Board::scroll(const QPoint& delta) { m_pos -= delta; int count = m_active_pieces.count(); for (int i = 0; i < count; ++i) { m_active_pieces.at(i)->moveBy(-delta); } } //----------------------------------------------------------------------------- void Board::togglePiecesUnderCursor() { switch (m_action_key) { case 0: if (!m_selecting) { if (pieceUnderCursor()) { grabPiece(); } else { releasePieces(); } } else { selectPieces(); } break; case Qt::Key_Shift: stopScrolling(); break; #if !defined(Q_OS_MAC) case Qt::Key_Control: #else case Qt::Key_Meta: #endif rotatePiece(); break; default: break; } } //----------------------------------------------------------------------------- void Board::moveCursor(const QPoint& delta) { QCursor::setPos(cursor().pos() + delta); updateCursor(); } //----------------------------------------------------------------------------- void Board::grabPiece() { if (m_scrolling || m_finished) { return; } Piece* piece = pieceUnderCursor(); if (piece == 0) { return; } m_active_pieces.append(piece); m_pieces.removeAll(piece); piece->setDepth(m_active_pieces.count() + 1); piece->setSelected(true); updateCursor(); update(); } //----------------------------------------------------------------------------- void Board::releasePieces() { if (m_scrolling || m_finished) { return; } // Inform user this may take awhile updateStatusMessage(tr("Placing pieces...")); QApplication::setOverrideCursor(Qt::WaitCursor); // Attach to closest piece int count = m_active_pieces.count(); if (count == 1) { m_active_pieces.first()->attachNeighbors(); updateCompleted(); } // Place pieces Piece* piece; for (int i = 0; i < count; ++i) { piece = m_active_pieces.at(i); m_pieces.append(piece); piece->setDepth(0); piece->setSelected(false); piece->pushNeighbors(); } m_active_pieces.clear(); updateCursor(); updateCompleted(); // Clear message and cursor emit clearMessage(); QApplication::restoreOverrideCursor(); // Check if game is over if (pieceCount() == 1) { finishGame(); } else { update(); } } //----------------------------------------------------------------------------- void Board::rotatePiece() { if (m_scrolling || m_finished) { return; } if (m_active_pieces.isEmpty()) { Piece* piece = pieceUnderCursor(); if (piece == 0) { return; } piece->rotate(mapCursorPosition()); piece->attachNeighbors(); piece->pushNeighbors(); } else { int count = m_active_pieces.count(); for (int i = 0; i < count; ++i) { m_active_pieces.at(i)->rotate(mapCursorPosition()); } } updateCompleted(); if (pieceCount() == 1) { finishGame(); } update(); } //----------------------------------------------------------------------------- void Board::selectPieces() { m_selecting = false; QPoint cursor = mapCursorPosition(); int depth = m_active_pieces.count() + 1; int count = m_selected_pieces.count(); for (int i = 0; i < count; ++i) { Piece* piece = m_selected_pieces.at(i); piece->setDepth(depth + i); if (!piece->contains(cursor)) { piece->moveBy(cursor - piece->randomPoint()); } } m_active_pieces += m_selected_pieces; m_selected_pieces.clear(); update(); updateCursor(); } //----------------------------------------------------------------------------- void Board::drawArray(const Region& region, const QColor& fill, const QColor& border) { graphics_layer->setTextureUnits(0); graphics_layer->setColor(fill); graphics_layer->draw(region.fill); graphics_layer->setColor(border); graphics_layer->draw(region.border, GL_LINE_LOOP); graphics_layer->setColor(Qt::white); graphics_layer->setTextureUnits(1); } //----------------------------------------------------------------------------- void Board::loadImage() { // Record currently open image QSettings settings; settings.setValue("OpenGame/Image", m_image_path); // Load puzzle image if (!m_overview->isVisible() && settings.value("Overview/Visible", true).toBool()) { m_overview->show(); m_overview->repaint(); activateWindow(); } QImageReader source(Path::image(m_image_path)); // Find image size QSize size = source.size(); const GLint max_size = graphics_layer->getMaxTextureSize() / 2; if (max_size < std::max(size.width(), size.height())) { size.scale(max_size, max_size, Qt::KeepAspectRatio); } // Create puzzle texture int tile_size = Tile::size; if (m_columns > m_rows) { tile_size = std::min(tile_size, size.width() / m_columns); } else { tile_size = std::min(tile_size, size.height() / m_rows); } QSize scaled_size = size; size = QSize(m_columns * tile_size, m_rows * tile_size); scaled_size.scale(size, Qt::KeepAspectRatioByExpanding); source.setScaledSize(scaled_size); source.setScaledClipRect(QRect((scaled_size.width() - size.width()) / 2, (scaled_size.height() - size.height()) / 2, size.width(), size.height())); QImage image = source.read(); int image_texture_size = powerOfTwo(std::max(size.width(), size.height())); m_image_ts = static_cast(tile_size) / static_cast(image_texture_size); QImage texture(image_texture_size, image_texture_size, QImage::Format_ARGB32); texture.fill(QColor(Qt::darkGray).rgba()); { QPainter painter(&texture); painter.drawImage(0, 0, image, 0, 0, image.width(), image.height(), Qt::AutoColor | Qt::AvoidDither); } m_image = new QOpenGLTexture(texture); m_image->setMinificationFilter(QOpenGLTexture::LinearMipMapLinear); m_image->setMagnificationFilter(QOpenGLTexture::Linear); m_image->setWrapMode(QOpenGLTexture::ClampToEdge); // Create corners m_corners[0][0] = QPointF(0,0); m_corners[0][1] = QPointF(0,m_image_ts); m_corners[0][2] = QPointF(m_image_ts,m_image_ts); m_corners[0][3] = QPointF(m_image_ts,0); m_corners[1][0] = m_corners[0][1]; m_corners[1][1] = m_corners[0][2]; m_corners[1][2] = m_corners[0][3]; m_corners[1][3] = m_corners[0][0]; m_corners[2][0] = m_corners[0][2]; m_corners[2][1] = m_corners[0][3]; m_corners[2][2] = m_corners[0][0]; m_corners[2][3] = m_corners[0][1]; m_corners[3][0] = m_corners[0][3]; m_corners[3][1] = m_corners[0][0]; m_corners[3][2] = m_corners[0][1]; m_corners[3][3] = m_corners[0][2]; // Create overview m_overview->load(image, devicePixelRatioF()); } //----------------------------------------------------------------------------- void Board::updateCursor() { int state = 0; if (!m_finished) { state = (pieceUnderCursor() != 0 || m_selecting) | (!m_active_pieces.isEmpty() * 2); } switch (state) { case 1: setCursor(Qt::OpenHandCursor); break; case 2: setCursor(Qt::ClosedHandCursor); break; case 3: setCursor(Qt::PointingHandCursor); break; default: unsetCursor(); break; } } //----------------------------------------------------------------------------- QPoint Board::mapCursorPosition() const { return mapPosition(m_cursor_pos); } //----------------------------------------------------------------------------- QPoint Board::mapPosition(const QPoint& position) const { return (position / m_scale) - (QPoint(width() >> 1, height() >> 1) / m_scale) + m_pos; } //----------------------------------------------------------------------------- void Board::updateCompleted() { int t = 100 * (pieceCount() - 1); int T = m_total_pieces - 1; m_completed = 100 - (t / T); emit completionChanged(m_completed); } //----------------------------------------------------------------------------- void Board::updateArray(Region& region, const QRect& rect, int z) { int x1 = rect.x(); int y1 = rect.y(); int x2 = x1 + rect.width(); int y2 = y1 + rect.height(); graphics_layer->updateArray(region.fill, { Vertex::init(x1,y1,z), Vertex::init(x1,y2,z), Vertex::init(x2,y1,z), Vertex::init(x2,y1,z), Vertex::init(x1,y2,z), Vertex::init(x2,y2,z) }); graphics_layer->updateArray(region.border, { Vertex::init(x1,y1,z), Vertex::init(x1,y2,z), Vertex::init(x2,y2,z), Vertex::init(x2,y1,z) }); } //----------------------------------------------------------------------------- void Board::updateSceneRectangle() { m_scene = QRect(0,0,0,0); for (Piece* piece : m_pieces) { updateSceneRectangle(piece); } } //----------------------------------------------------------------------------- void Board::updateStatusMessage(const QString& message) { emit showMessage(message); } //----------------------------------------------------------------------------- Piece* Board::pieceUnderCursor() { QPoint pos = mapCursorPosition(); Piece* piece; for (int i = m_pieces.count() - 1; i >= 0; --i) { piece = m_pieces.at(i); if (piece->contains(pos)) { return piece; } } return 0; } //----------------------------------------------------------------------------- int Board::pieceCount() { return m_pieces.count() + m_active_pieces.count() + m_selected_pieces.count(); } //----------------------------------------------------------------------------- void Board::finishGame() { m_finished = true; // Drop remaining piece if (!m_active_pieces.isEmpty()) { m_pieces.append(m_active_pieces.first()); } m_active_pieces.clear(); // Rotate completed board to face up Piece* piece = m_pieces.first(); if (piece->rotation() > 0) { for (int i = piece->rotation(); i < 4; ++i) { piece->rotate(); } } piece->setSelected(false); // Hide scene rectangle m_scene = piece->boundingRect().adjusted(1,1,-2,-2); updateArray(m_scene_array, m_scene, 0); m_overview->hide(); unsetCursor(); zoomFit(); emit retrievePiecesAvailable(false); QFile::remove(Path::save(m_id)); QSettings().remove("OpenGame"); m_id = 0; emit finished(); m_message->setText(tr("Success")); m_message->setVisible(true, false); } //----------------------------------------------------------------------------- void Board::cleanup() { delete m_image; m_image = nullptr; emit clearMessage(); m_overview->reset(); m_message->setVisible(false); m_active_pieces.clear(); m_selected_pieces.clear(); qDeleteAll(m_pieces); m_pieces.clear(); m_completed = 0; m_id = 0; m_columns = 0; m_rows = 0; m_scene = QRect(0,0,0,0); updateArray(m_scene_array, m_scene, 0); m_scrolling = false; m_pos = QPoint(0, 0); m_finished = false; QSettings().remove("OpenGame"); } //----------------------------------------------------------------------------- tetzle-2.1.5+dfsg1/src/path.cpp0000644000175000017500000000672113522554645016464 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #include "path.h" #include #include #include #include #include #include //----------------------------------------------------------------------------- QString Path::datapath() { static QString path = QStandardPaths::writableLocation(QStandardPaths::DataLocation) + "/"; return path; } //----------------------------------------------------------------------------- QString Path::oldDataPath() { QStringList oldpaths; QString oldpath; #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) // Data path from Qt 4 version of 2.0 oldpaths.append(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + "/data/GottCode/Tetzle"); #endif // Data path from 1.0 #if defined(Q_OS_MAC) oldpath = QDir::homePath() + "/Library/Application Support/GottCode/Tetzle/"; #elif defined(Q_OS_UNIX) oldpath = getenv("$XDG_DATA_HOME"); if (oldpath.isEmpty()) { oldpath = QDir::homePath() + "/.local/share/"; } oldpath += "/games/tetzle/"; #elif defined(Q_OS_WIN32) oldpath = QDir::homePath() + "/Application Data/GottCode/Tetzle/"; #endif if (!oldpaths.contains(oldpath)) { oldpaths.append(oldpath); } // Check if an old data location exists oldpath.clear(); for (const QString& testpath : oldpaths) { if (QFile::exists(testpath)) { oldpath = testpath; break; } } return oldpath; } //----------------------------------------------------------------------------- QString Path::image(const QString& file) { return images() + file; } //----------------------------------------------------------------------------- QString Path::thumbnail(const QString& image, qreal pixelratio) { QString pixel; if (pixelratio > 1.0) { pixel = QString("@%1x").arg(pixelratio); } return thumbnails() + image + pixel + ".png"; } //----------------------------------------------------------------------------- QString Path::save(const QString& file) { return saves() + file; } //----------------------------------------------------------------------------- QString Path::save(int game) { return save(QString::number(game) + ".xml"); } //----------------------------------------------------------------------------- QString Path::images() { return datapath() + "images/"; } //----------------------------------------------------------------------------- QString Path::thumbnails() { return datapath() + "images/thumbnails/"; } //----------------------------------------------------------------------------- QString Path::saves() { return datapath() + "saves/"; } //----------------------------------------------------------------------------- tetzle-2.1.5+dfsg1/src/toolbar_list.h0000644000175000017500000000226613522554645017672 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2011, 2016 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #ifndef TOOLBAR_LIST_H #define TOOLBAR_LIST_H #include class QToolBar; class ToolBarList : public QListWidget { public: ToolBarList(QWidget* parent = 0); void addToolBarAction(QAction* action); QIcon fetchIcon(const QString& name); protected: virtual void updateGeometries(); private: QToolBar* m_toolbar; }; #endif tetzle-2.1.5+dfsg1/src/new_game_tab.cpp0000644000175000017500000003617213522554645020143 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2010, 2011, 2014, 2016, 2018, 2019 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #include "new_game_tab.h" #include "add_image.h" #include "image_properties_dialog.h" #include "path.h" #include "tag_manager.h" #include "thumbnail_delegate.h" #include "thumbnail_loader.h" #include "toolbar_list.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //----------------------------------------------------------------------------- namespace { QString hash(const QString& path) { QFile file(path); if (!file.open(QIODevice::ReadOnly)) { return QString(); } return QCryptographicHash::hash(file.readAll(), QCryptographicHash::Sha1).toHex(); } enum ItemRoles { TagsRole = Qt::UserRole, ImageRole, NameRole }; void updateToolTip(QListWidgetItem* item) { QString tip = item->text(); QString tags = item->data(TagsRole).toString(); if (!tags.isEmpty()) { tip += "
" + item->data(TagsRole).toString() + ""; } item->setToolTip(tip); } } //----------------------------------------------------------------------------- NewGameTab::NewGameTab(const QStringList& files, QDialog* parent) : QWidget(parent) { // Add image filter m_image_tags = new TagManager(this); connect(m_image_tags, &TagManager::filterChanged, this, &NewGameTab::filterImages); connect(m_image_tags, &TagManager::tagsChanged, this, &NewGameTab::updateTagsStrings); // Add image selector m_images = new ToolBarList(this); m_images->setViewMode(QListView::IconMode); m_images->setIconSize(QSize(74, 74)); m_images->setMinimumSize(460 + m_images->verticalScrollBar()->sizeHint().width(), 230); m_images->setItemDelegate(new ThumbnailDelegate(m_images)); connect(m_images, &ToolBarList::currentItemChanged, this, &NewGameTab::imageSelected); connect(m_images, &ToolBarList::itemActivated, this, &NewGameTab::editImageProperties); // Add image actions QAction* add_action = new QAction(m_images->fetchIcon("list-add"), tr("Add Image"), this); m_images->addToolBarAction(add_action); connect(add_action, &QAction::triggered, this, &NewGameTab::addImageClicked); m_remove_action = new QAction(m_images->fetchIcon("list-remove"), tr("Remove Image"), this); m_images->addToolBarAction(m_remove_action); connect(m_remove_action, &QAction::triggered, this, &NewGameTab::removeImage); m_tag_action = new QAction(m_images->fetchIcon("image-x-generic"), tr("Image Properties"), this); m_images->addToolBarAction(m_tag_action); connect(m_tag_action, &QAction::triggered, this, &NewGameTab::editImageProperties); // Add image splitter m_image_contents = new QSplitter(this); m_image_contents->addWidget(m_image_tags); m_image_contents->addWidget(m_images); m_image_contents->setStretchFactor(0, 0); m_image_contents->setStretchFactor(1, 1); m_image_contents->setSizes(QList() << 130 << m_images->minimumWidth()); // Add pieces slider m_slider = new QSlider(Qt::Horizontal, this); m_slider->setRange(1, 1); connect(m_slider, &QSlider::valueChanged, this, &NewGameTab::pieceCountChanged); m_count = new QLabel(this); m_count->setAlignment(Qt::AlignRight | Qt::AlignVCenter); m_count->setMinimumWidth(m_count->fontMetrics().boundingRect(tr("%L1 pieces").arg(9999)).width()); // Add buttons QDialogButtonBox* buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this); connect(buttons, &QDialogButtonBox::accepted, this, &NewGameTab::accept); connect(buttons, &QDialogButtonBox::rejected, parent, &QDialog::reject); m_accept_button = buttons->button(QDialogButtonBox::Ok); m_accept_button->setEnabled(false); // Arrange widgets QGridLayout* layout = new QGridLayout(this); layout->setColumnStretch(1, 1); layout->setRowStretch(0, 1); layout->addWidget(m_image_contents, 0, 0, 1, 2); layout->setRowMinimumHeight(1, 12); layout->addWidget(m_count, 2, 0); layout->addWidget(m_slider, 2, 1); layout->setRowMinimumHeight(3, 12); layout->addWidget(buttons, 4, 0, 1, 2); // Load images QSettings details(Path::image("details"), QSettings::IniFormat); QListWidgetItem* item = 0; for (const QString& image : QDir(Path::images(), "*.*").entryList(QDir::Files, QDir::Time | QDir::Reversed)) { item = createItem(image, details); } m_images->sortItems(); // Load values QSettings settings; item = m_images->item(0); QString image = settings.value("NewGame/Image").toString(); if (!image.isEmpty()) { for (int i = m_images->count() - 1; i >= 0; --i) { item = m_images->item(i); if (item->data(ImageRole) == image) { break; } } } m_images->setCurrentItem(item); m_slider->setValue(settings.value("NewGame/Pieces", 2).toInt()); pieceCountChanged(m_slider->value()); // Add new images addImages(files); // Resize contents m_image_contents->restoreState(settings.value("NewGame/SplitterSizes").toByteArray()); } //----------------------------------------------------------------------------- void NewGameTab::addImages(const QStringList& images) { int count = images.count(); if (count == 0) { return; } QProgressDialog progress(tr("Copying images..."), tr("Cancel"), 0, count, this); progress.setMinimumDuration(500); progress.setWindowModality(Qt::WindowModal); QApplication::setOverrideCursor(Qt::WaitCursor); m_image_tags->clearFilter(); for (int i = 0; i < count; i++) { progress.setValue(i); if (progress.wasCanceled()) { break; } addImage(images.at(i)); QApplication::processEvents(); } progress.setValue(count); QApplication::restoreOverrideCursor(); } //----------------------------------------------------------------------------- void NewGameTab::hideEvent(QHideEvent* event) { QSettings().setValue("NewGame/SplitterSizes", m_image_contents->saveState()); QWidget::hideEvent(event); } //----------------------------------------------------------------------------- void NewGameTab::accept() { QListWidgetItem* item = m_images->currentItem(); if (!item) { return; } QString image = item->data(ImageRole).toString(); QSettings settings; settings.setValue("NewGame/Pieces", m_slider->value()); settings.setValue("NewGame/Image", image); emit newGame(image, m_slider->value()); } //----------------------------------------------------------------------------- void NewGameTab::addImageClicked() { addImages(AddImage::getOpenFileNames(this)); } //----------------------------------------------------------------------------- void NewGameTab::removeImage() { QListWidgetItem* item = m_images->currentItem(); if (!item) { return; } QString current_image = item->data(ImageRole).toString(); QList games; QXmlStreamReader xml; QXmlStreamAttributes attributes; for (const QString& game : QDir(Path::saves(), "*.xml").entryList(QDir::Files)) { QFile file(Path::save(game)); if (!file.open(QIODevice::ReadOnly)) { continue; } xml.setDevice(&file); // Load details while (!xml.isStartElement()) { xml.readNext(); } attributes = xml.attributes(); if (xml.name() == QLatin1String("tetzle") && attributes.value("version").toString().toUInt() <= 5) { if (attributes.value("image").toString() == current_image) { games.append(game); } } } QString message; if (games.isEmpty()) { message = tr("Remove selected image?"); } else { message = tr("Remove selected image?\n\nThere are saved games using this image that will also be removed."); } if (QMessageBox::question(this, tr("Remove Image"), message, QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::Yes) { QString image_id = current_image.section(".", 0, 0); QFile::remove(Path::image(current_image)); QDir dir(Path::thumbnails(), image_id + "*"); const QStringList thumbs = dir.entryList(); for (const QString& thumb : thumbs) { dir.remove(thumb); } for (const QString& game : games) { QFile::remove(Path::save(game)); } delete item; m_image_tags->removeImage(current_image); m_accept_button->setEnabled(m_images->count() > 0); if (!m_accept_button->isEnabled()) { m_slider->setMaximum(-1); m_count->clear(); QSettings settings; settings.remove("NewGame/Image"); settings.remove("NewGame/Pieces"); } } } //----------------------------------------------------------------------------- void NewGameTab::editImageProperties() { QListWidgetItem* item = m_images->currentItem(); if (!item || item->isHidden()) { return; } QString filename = item->data(ImageRole).toString(); ImagePropertiesDialog dialog(item->icon(), item->text(), m_image_tags, filename, window()); if (dialog.exec() == QDialog::Accepted) { // Update name item->setText(dialog.name()); if (item->text() != item->data(NameRole).toString()) { item->setData(NameRole, item->text()); QSettings details(Path::image("details"), QSettings::IniFormat); details.setValue(filename + "/Name", item->text()); emit imageRenamed(filename, item->text()); m_images->sortItems(); m_images->scrollToItem(item); } // Update tags item->setData(TagsRole, m_image_tags->tags(item->data(ImageRole).toString())); updateToolTip(item); } } //----------------------------------------------------------------------------- void NewGameTab::imageSelected(QListWidgetItem* item) { bool enabled = item != 0; m_accept_button->setEnabled(enabled); m_tag_action->setEnabled(enabled); m_remove_action->setEnabled(enabled); if (!enabled) { return; } // Prevent removing the image of the game currently open QString image = item->data(ImageRole).toString(); m_remove_action->setEnabled(QSettings().value("OpenGame/Image").toString() != image); m_image_size = QImageReader(Path::image(image)).size(); if (m_image_size.width() > m_image_size.height()) { m_ratio = static_cast(m_image_size.height()) / static_cast(m_image_size.width()); } else { m_ratio = static_cast(m_image_size.width()) / static_cast(m_image_size.height()); } int max = std::lround(std::sqrt(250.0f / m_ratio)); int min = std::lround(std::sqrt(2.5f / m_ratio)); int value = min; if (m_images->count() > 1) { value = std::lround(static_cast(max * m_slider->value()) / static_cast(m_slider->maximum())); } m_slider->setRange(min, max); m_slider->setValue(value); pieceCountChanged(m_slider->value()); } //----------------------------------------------------------------------------- void NewGameTab::pieceCountChanged(int value) { if (m_image_size.isValid()) { int side1 = 4 * value; int side2 = std::max(std::lround(side1 * m_ratio), 1L); m_count->setText(tr("%L1 pieces").arg(side1 * side2 / 4)); } } //----------------------------------------------------------------------------- void NewGameTab::filterImages(const QStringList& filter) { // Filter items QListWidgetItem* item; int count = m_images->count(); for (int i = 0; i < count; ++i) { item = m_images->item(i); item->setHidden(!filter.contains(item->data(ImageRole).toString())); } // Select next item if current item was hidden item = m_images->currentItem(); if (!item || item->isHidden()) { int count = m_images->count(); for (int i = 0; i < count; ++i) { item = m_images->item(i); if (!item->isHidden()) { item->setSelected(true); m_images->setCurrentItem(item); break; } } } // Disable tag button if no images are visible item = m_images->currentItem(); m_tag_action->setEnabled(item && !item->isHidden()); } //----------------------------------------------------------------------------- void NewGameTab::updateTagsStrings() { QListWidgetItem* item; int count = m_images->count(); for (int i = 0; i < count; ++i) { item = m_images->item(i); item->setData(TagsRole, m_image_tags->tags(item->data(ImageRole).toString())); updateToolTip(item); } } //----------------------------------------------------------------------------- void NewGameTab::addImage(const QString& image) { QImageReader reader(image); if (!reader.canRead()) { return; } // Find image ID QString filename; int image_id = 0; QString image_hash = hash(image); QSettings details(Path::image("details"), QSettings::IniFormat); QStringList images = QDir(Path::images(), "*.*").entryList(QDir::Files); for (const QString& file : images) { image_id = std::max(image_id, file.section(".", 0, 0).toInt()); QString key = file + "/SHA1"; if (!details.contains(key)) { details.setValue(key, hash(Path::image(file))); } if (details.value(key) == image_hash) { filename = file; break; } } image_id++; QListWidgetItem* item = 0; if (filename.isEmpty()) { // Find filename QFileInfo info(image); filename = QString("%1.%2").arg(image_id).arg(info.suffix().toLower()); details.setValue(filename + "/SHA1", image_hash); details.setValue(filename + "/Name", info.completeBaseName()); m_image_tags->addImage(filename); // Copy and rotate image reader.setAutoTransform(true); if (reader.transformation() == QImageIOHandler::TransformationNone) { QFile::copy(image, Path::image(filename)); } else { QImage image = reader.read(); image.save(Path::image(filename), "", 100); } } else { // Find in list of images for (int i = 0; i < m_images->count(); ++i) { if (m_images->item(i)->data(ImageRole).toString() == filename) { item = m_images->item(i); break; } } } // Select item if (!item) { m_images->blockSignals(true); item = createItem(filename, details); m_images->blockSignals(false); m_images->setCurrentItem(item); } m_images->setCurrentItem(item); m_images->scrollToItem(item, QAbstractItemView::PositionAtTop); } //----------------------------------------------------------------------------- QListWidgetItem* NewGameTab::createItem(const QString& image, const QSettings& details) { const qreal pixelratio = devicePixelRatioF(); QListWidgetItem* item = ThumbnailLoader::createItem(Path::image(image), details.value(image + "/Name", tr("Untitled")).toString(), m_images, pixelratio); item->setData(ImageRole, image); item->setData(NameRole, item->text()); item->setData(TagsRole, m_image_tags->tags(image)); updateToolTip(item); return item; } //----------------------------------------------------------------------------- tetzle-2.1.5+dfsg1/src/choose_game_dialog.cpp0000644000175000017500000000743113522554645021317 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2011, 2014 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #include "choose_game_dialog.h" #include "add_image.h" #include "new_game_tab.h" #include "open_game_tab.h" #include "path.h" #include #include #include #include #include //----------------------------------------------------------------------------- ChooseGameDialog::ChooseGameDialog(const QStringList& files, int current_id, QWidget* parent) : QDialog(parent, Qt::Dialog | Qt::WindowTitleHint | Qt::WindowSystemMenuHint) { setWindowTitle(tr("Choose Game")); setAcceptDrops(true); m_tabs = new QTabWidget(this); // Layout dialog QVBoxLayout* layout = new QVBoxLayout(this); layout->addWidget(m_tabs); resize(QSettings().value("ChooseGame/Size", QSize(800, 600)).toSize()); // Create tabs OpenGameTab* open_game_tab = new OpenGameTab(current_id, this); connect(open_game_tab, &OpenGameTab::openGame, this, &ChooseGameDialog::accept); connect(open_game_tab, &OpenGameTab::openGame, this, &ChooseGameDialog::openGame); m_tabs->addTab(open_game_tab, tr("Current Games")); m_new_game_tab = new NewGameTab(files, this); connect(m_new_game_tab, &NewGameTab::newGame, this, &ChooseGameDialog::accept); connect(m_new_game_tab, &NewGameTab::newGame, this, &ChooseGameDialog::newGame); m_tabs->addTab(m_new_game_tab, tr("New Game")); connect(m_new_game_tab, &NewGameTab::imageRenamed, open_game_tab, &OpenGameTab::imageRenamed); if (!files.isEmpty() || currentGames().count() <= (current_id != 0)) { m_tabs->setCurrentIndex(1); } } //----------------------------------------------------------------------------- QStringList ChooseGameDialog::currentGames() { QStringList result; QStringList files = QDir(Path::saves(), "*.xml").entryList(QDir::Files, QDir::Time); for (const QString& game : files) { // Load XML file QFile file(Path::save(game)); if (!file.open(QIODevice::ReadOnly)) { continue; } QXmlStreamReader xml(&file); // Load version while (!xml.isStartElement()) { xml.readNext(); } QXmlStreamAttributes attributes = xml.attributes(); if (xml.name() == QLatin1String("tetzle") && attributes.value("version").toString().toUInt() <= 5) { if (QFile::exists(Path::image(attributes.value("image").toString()))) { result.append(game); } } } return result; } //----------------------------------------------------------------------------- void ChooseGameDialog::dragEnterEvent(QDragEnterEvent* event) { AddImage::dragEnterEvent(event); } //----------------------------------------------------------------------------- void ChooseGameDialog::dropEvent(QDropEvent* event) { m_tabs->setCurrentIndex(1); m_new_game_tab->addImages(AddImage::dropEvent(event)); } //----------------------------------------------------------------------------- void ChooseGameDialog::hideEvent(QHideEvent* event) { QSettings().setValue("ChooseGame/Size", size()); QDialog::hideEvent(event); } //----------------------------------------------------------------------------- tetzle-2.1.5+dfsg1/src/open_game_tab.h0000644000175000017500000000250013522554645017744 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2010, 2011 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #ifndef OPEN_GAME_TAB_H #define OPEN_GAME_TAB_H #include class QListWidget; class QPushButton; class OpenGameTab : public QWidget { Q_OBJECT public: OpenGameTab(int current_id, QDialog* parent = 0); public slots: void imageRenamed(const QString& image, const QString& name); signals: void openGame(int id); private slots: void accept(); void deleteGame(); private: QDialog* m_parent; QListWidget* m_games; QPushButton* m_accept_button; }; #endif tetzle-2.1.5+dfsg1/src/thumbnail_delegate.h0000644000175000017500000000273413522554645021012 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2011 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #ifndef THUMBNAIL_DELEGATE_H #define THUMBNAIL_DELEGATE_H #include #include class QListWidget; class ThumbnailDelegate : public QStyledItemDelegate { public: ThumbnailDelegate(QListWidget* list = 0); void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const; QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const; protected: virtual bool eventFilter(QObject* object, QEvent* event); private: void setFont(const QFont& font); private: QListWidget* m_list; QFont m_small_font; QFontMetrics m_small_font_metrics; }; #endif tetzle-2.1.5+dfsg1/src/color_button.h0000644000175000017500000000261013522554645017677 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2009, 2010 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #ifndef COLOR_BUTTON_H #define COLOR_BUTTON_H #include #include class ColorButton : public QPushButton { Q_OBJECT public: ColorButton(QWidget* parent = 0); QColor color() const; QString toString() const; public slots: void setColor(const QColor& color); signals: void changed(const QColor& color); private slots: void chooseColor(); private: QColor m_color; }; inline QColor ColorButton::color() const { return m_color; } inline QString ColorButton::toString() const { return m_color.name(); } #endif tetzle-2.1.5+dfsg1/src/tag_manager.h0000644000175000017500000000362313522554645017440 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2010, 2011 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #ifndef TAG_MANAGER_H #define TAG_MANAGER_H class ToolBarList; #include #include #include class QAction; class QListWidgetItem; class TagManager : public QWidget { Q_OBJECT public: TagManager(QWidget* parent = 0); QStringList images(const QString& tag) const; QStringList tags() const; QString tags(const QString& image) const; void clearFilter(); void addImage(const QString& image); void removeImage(const QString& image); void setImageTags(const QString& image, const QStringList& tags); signals: void filterChanged(const QStringList& images); void tagsChanged(); protected: virtual void changeEvent(QEvent* event); private slots: void addTag(); void removeTag(); void currentTagChanged(QListWidgetItem* item); void tagChanged(QListWidgetItem* item); void updateFilter(); private: void storeTags(); private: QHash m_tags; QStringList m_untagged; ToolBarList* m_filter; QListWidgetItem* m_all_images_item; QListWidgetItem* m_untagged_item; QAction* m_remove_action; }; #endif tetzle-2.1.5+dfsg1/src/overview.h0000644000175000017500000000307413522554645017041 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2010, 2011, 2016 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #ifndef OVERVIEW_H #define OVERVIEW_H #include class Overview : public QGraphicsView { Q_OBJECT public: Overview(QWidget* parent = 0); void load(const QImage& image, qreal pixelratio); void reset(); signals: void toggled(bool visible); protected: virtual void hideEvent(QHideEvent* event); virtual void moveEvent(QMoveEvent* event); virtual void resizeEvent(QResizeEvent* event); virtual void showEvent(QShowEvent* event); virtual void wheelEvent(QWheelEvent* event); private: void setPixmap(const QPixmap& pixmap); void zoomIn(); void zoomOut(); void zoom(int level); private: QGraphicsPixmapItem* m_pixmap; int m_min_scale_level; int m_scale_level; bool m_default; }; #endif tetzle-2.1.5+dfsg1/src/zoom_slider.h0000644000175000017500000000233213522554645017515 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2010, 2011 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #ifndef ZOOM_SLIDER_H #define ZOOM_SLIDER_H #include class QLabel; class QSlider; class ZoomSlider : public QWidget { Q_OBJECT public: ZoomSlider(QWidget* parent = 0); static float scaleFactor(int level); signals: void valueChanged(int); public slots: void setValue(int level, float factor); private: QLabel* m_label; QSlider* m_slider; }; #endif tetzle-2.1.5+dfsg1/src/image_properties_dialog.h0000644000175000017500000000265413522554645022053 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2010, 2011 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #ifndef IMAGE_PROPERTIES_DIALOG_H #define IMAGE_PROPERTIES_DIALOG_H class TagManager; #include class QLineEdit; class QListWidget; class QPushButton; class ImagePropertiesDialog : public QDialog { Q_OBJECT public: ImagePropertiesDialog(const QIcon& icon, const QString& name, TagManager* manager, const QString& image, QWidget* parent = 0); QString name() const; public slots: virtual void accept(); protected: virtual void hideEvent(QHideEvent* event); private: QString m_image; TagManager* m_manager; QLineEdit* m_name; QListWidget* m_tags; }; #endif tetzle-2.1.5+dfsg1/src/locale_dialog.h0000644000175000017500000000474413522554645017756 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2010, 2011, 2012, 2013 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #ifndef TETZLE_LOCALE_DIALOG_H #define TETZLE_LOCALE_DIALOG_H #include class QComboBox; /** * Dialog to set application language. * * This class handles setting the application language when the application is * launched, as well as allowing the user to choose a different language for * future launches. */ class LocaleDialog : public QDialog { Q_OBJECT public: /** * Construct a dialog to choose application language. * * @param parent the parent widget of the dialog */ LocaleDialog(QWidget* parent = 0); /** * Load the stored language into the application; defaults to system language. * * @param appname application name to prepend to translation filenames * @param datadirs locations to search for directory containing translations */ static void loadTranslator(const QString& appname, const QStringList& datadirs = QStringList()); /** * Fetch native language name for QLocale name. * * @param language QLocale name to look up * @return translated language name */ static QString languageName(const QString& language); public slots: /** Override parent function to store application language. */ void accept(); private: /** * Fetch list of application translations. * * @return list of QLocale names */ static QStringList findTranslations(); private: QComboBox* m_translations; /**< list of found translations */ static QString m_current; /**< stored application language */ static QString m_path; /**< location of translations; found in loadTranslator() */ static QString m_appname; /**< application name passed to loadTranslator() */ }; #endif // TETZLE_LOCALE_DIALOG_H tetzle-2.1.5+dfsg1/src/thumbnail_delegate.cpp0000644000175000017500000001424013522554645021340 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2011, 2014, 2015 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #include "thumbnail_delegate.h" #include #include #include #include #include //----------------------------------------------------------------------------- namespace { enum ItemsRole { SmallDisplayRole = Qt::UserRole }; } //----------------------------------------------------------------------------- ThumbnailDelegate::ThumbnailDelegate(QListWidget* list) : QStyledItemDelegate(list), m_list(list), m_small_font_metrics(m_small_font) { setFont(list->font()); list->installEventFilter(this); } //----------------------------------------------------------------------------- void ThumbnailDelegate::paint(QPainter* painter, const QStyleOptionViewItem& opt, const QModelIndex& index) const { QStyleOptionViewItem option = opt; initStyleOption(&option, index); painter->save(); // Find colors QIcon::Mode mode = QIcon::Normal; #ifndef Q_OS_MAC QPalette::ColorGroup cg = option.widget->hasFocus() ? QPalette::Normal : QPalette::Inactive; #else QPalette::ColorGroup cg = QApplication::focusWidget() ? QPalette::Normal : QPalette::Inactive; #endif QColor color = option.palette.color(cg, QPalette::Text); QColor background_color; if (option.state & QStyle::State_Selected) { mode = QIcon::Selected; color = option.palette.color(cg, QPalette::HighlightedText); background_color = option.palette.color(cg, QPalette::Highlight); } // Calculate element locations Qt::Alignment alignment = Qt::AlignVCenter; int line_height = option.fontMetrics.lineSpacing(); int small_line_height = m_small_font_metrics.lineSpacing(); QRect thumbnail_rect, text_rect, small_text_rect; if (option.decorationPosition == QStyleOptionViewItem::Top) { // Centered text with icon on top alignment |= Qt::AlignHCenter; thumbnail_rect.setRect(option.rect.left() + 2 + (option.rect.width() - 74) / 2, option.rect.top() + 2, 74, 74); int text_width = option.rect.width() - 4; text_rect.setRect(option.rect.left() + 2, thumbnail_rect.bottom() + 1, text_width, line_height); small_text_rect.setRect(text_rect.left(), text_rect.bottom() + 1, text_width, small_line_height); } else if (option.direction == Qt::LeftToRight) { // Left aligned alignment |= Qt::AlignLeft; thumbnail_rect.setRect(option.rect.left() + 5, option.rect.top() + 2 + (option.rect.height() - 74) / 2, 74, 74); int text_height = line_height + small_line_height; int text_width = option.rect.width() - 4 - thumbnail_rect.width(); text_rect.setRect(thumbnail_rect.right() + 7, option.rect.top() + 2 + (option.rect.height() - text_height) / 2, text_width, line_height); small_text_rect.setRect(text_rect.left(), text_rect.bottom() + 1, text_width, small_line_height); } else { // Right aligned alignment |= Qt::AlignRight; thumbnail_rect.setRect(option.rect.right() - 80, option.rect.top() + 2 + (option.rect.height() - 74) / 2, 74, 74); int text_height = line_height + small_line_height; int text_width = thumbnail_rect.left() - 6; text_rect.setRect(2, option.rect.top() + 2 + (option.rect.height() - text_height) / 2, text_width, line_height); small_text_rect.setRect(2, text_rect.bottom() + 1, text_width, small_line_height); } // Draw background QStyle* style = option.widget ? option.widget->style() : QApplication::style(); if (background_color.isValid()) { option.backgroundBrush = background_color; } style->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter, option.widget); // Draw decoration const QPixmap thumbnail = option.icon.pixmap(74, 74, mode); painter->drawPixmap(thumbnail_rect, thumbnail); // Draw text painter->setFont(option.font); QString text = painter->fontMetrics().elidedText(index.data(Qt::DisplayRole).toString(), option.textElideMode, text_rect.width(), option.displayAlignment); painter->setPen(color); painter->drawText(text_rect, alignment, text); // Draw small text painter->setFont(m_small_font); text = painter->fontMetrics().elidedText(index.data(SmallDisplayRole).toString(), option.textElideMode, small_text_rect.width(), option.displayAlignment); color.setAlphaF(0.6); painter->setPen(color); painter->drawText(small_text_rect, alignment, text); painter->restore(); } //----------------------------------------------------------------------------- QSize ThumbnailDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const { Q_UNUSED(index); int text_height = option.fontMetrics.lineSpacing() + m_small_font_metrics.lineSpacing(); if (option.decorationPosition == QStyleOptionViewItem::Top) { return QSize(150, 78 + text_height); } else { return QSize(option.rect.width(), std::max(78, text_height + 4)); } } //----------------------------------------------------------------------------- bool ThumbnailDelegate::eventFilter(QObject* object, QEvent* event) { if (object == m_list) { if (event->type() == QEvent::FontChange) { setFont(m_list->font()); } return false; } else { return QStyledItemDelegate::eventFilter(object, event); } } //----------------------------------------------------------------------------- void ThumbnailDelegate::setFont(const QFont& font) { QFontInfo info(font); m_small_font = QFont(info.family(), info.pointSize() - 2); m_small_font.setItalic(true); m_small_font_metrics = QFontMetrics(m_small_font); } //----------------------------------------------------------------------------- tetzle-2.1.5+dfsg1/src/tile.cpp0000644000175000017500000000451713522554645016466 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2010, 2011 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #include "tile.h" #include "board.h" #include "piece.h" //----------------------------------------------------------------------------- Tile::Tile(int column, int row) : m_parent(0), m_column(column), m_row(row), m_pos(column * size, row * size), m_bevel(0), m_bevel_coords(-1,-1) { } //----------------------------------------------------------------------------- QPoint Tile::scenePos() const { return m_pos + m_parent->scenePos(); } //----------------------------------------------------------------------------- void Tile::rotate() { qSwap(m_pos.rx(), m_pos.ry()); m_pos.setX(-m_pos.x() + m_parent->boundingRect().width() - Tile::size); m_bevel_coords.setX( (m_bevel_coords.x() > 0.1) ? (m_bevel_coords.x() - 0.25) : 0.8125 ); } //----------------------------------------------------------------------------- void Tile::setBevel(int bevel) { m_bevel = qBound(0, bevel, 15); int col = m_bevel % 4; int row = m_bevel / 4; m_bevel_coords = QPointF(col * 0.25 + 0.0625, row * 0.25 + 0.0625); } //----------------------------------------------------------------------------- void Tile::save(QXmlStreamWriter& xml) const { QXmlStreamAttributes attributes; attributes.append("column", QString::number(m_column)); attributes.append("row", QString::number(m_row)); if (m_bevel) { attributes.append("bevel", QString::number(m_bevel)); } xml.writeEmptyElement("tile"); xml.writeAttributes(attributes); } //----------------------------------------------------------------------------- tetzle-2.1.5+dfsg1/src/appearance_dialog.cpp0000644000175000017500000001773013522554645021150 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2010, 2011, 2012, 2014, 2016 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #include "appearance_dialog.h" #include "color_button.h" #include #include #include #include #include #include #include #include #include //----------------------------------------------------------------------------- namespace { QPixmap coloredShadow(const QColor& color) { QPixmap source(":/shadow.png"); QImage shadow(source.size(), QImage::Format_ARGB32_Premultiplied); QPainter painter(&shadow); painter.setCompositionMode(QPainter::CompositionMode_Source); painter.drawPixmap(0, 0, source); painter.setCompositionMode(QPainter::CompositionMode_SourceIn); painter.fillRect(shadow.rect(), color); painter.end(); return QPixmap::fromImage(shadow, Qt::AvoidDither | Qt::AutoColor | Qt::NoOpaqueDetection); } } bool AppearanceDialog::m_bevels_enabled = true; //----------------------------------------------------------------------------- AppearanceDialog::AppearanceDialog(QWidget* parent) : QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint) { setWindowTitle(tr("Appearance")); // Create preview widget m_preview = new QLabel(this); m_preview->setAlignment(Qt::AlignCenter); m_preview->setAutoFillBackground(true); m_preview->setFrameStyle(QFrame::Panel | QFrame::Sunken); // Create options widgets QGroupBox* options_group = new QGroupBox(tr("Options"), this); m_has_bevels = new QCheckBox(tr("Beveled borders"), options_group); connect(m_has_bevels, &QCheckBox::stateChanged, this, &AppearanceDialog::updatePreview); m_has_shadows = new QCheckBox(tr("Drop shadows"), options_group); connect(m_has_shadows, &QCheckBox::stateChanged, this, &AppearanceDialog::updatePreview); // Create colors widgets QGroupBox* colors_group = new QGroupBox(tr("Colors"), this); m_background = new ColorButton(colors_group); connect(m_background, &ColorButton::changed, this, &AppearanceDialog::updatePreview); m_shadow = new ColorButton(colors_group); connect(m_shadow, &ColorButton::changed, this, &AppearanceDialog::updatePreview); m_highlight = new ColorButton(colors_group); connect(m_highlight, &ColorButton::changed, this, &AppearanceDialog::updatePreview); // Create buttons QDialogButtonBox* buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::RestoreDefaults, Qt::Horizontal, this); connect(buttons, &QDialogButtonBox::accepted, this, &AppearanceDialog::accept); connect(buttons, &QDialogButtonBox::rejected, this, &AppearanceDialog::reject); connect(buttons->button(QDialogButtonBox::RestoreDefaults), &QPushButton::clicked, this, &AppearanceDialog::restoreDefaults); // Lay out dialog QFormLayout* colors_layout = new QFormLayout(colors_group); colors_layout->addRow(tr("Background:"), m_background); colors_layout->addRow(tr("Shadow:"), m_shadow); colors_layout->addRow(tr("Highlight:"), m_highlight); QVBoxLayout* options_layout = new QVBoxLayout(options_group); options_layout->addWidget(m_has_bevels); options_layout->addWidget(m_has_shadows); QGridLayout* layout = new QGridLayout(this); layout->setSpacing(12); layout->setColumnStretch(1, 1); layout->setRowStretch(2, 1); layout->addWidget(options_group, 0, 0); layout->addWidget(colors_group, 1, 0); layout->addWidget(m_preview, 0, 1, 3, 1); layout->addWidget(buttons, 4, 0, 1, 2); // Load settings QSettings settings; m_background->setColor(settings.value("Colors/Background", "#9d8975").value()); m_shadow->setColor(settings.value("Colors/Shadow", QColor(Qt::black)).value()); m_highlight->setColor(settings.value("Colors/Highlight", QColor(Qt::white)).value()); m_has_bevels->setChecked(settings.value("Appearance/Bevels", true).toBool()); m_has_shadows->setChecked(settings.value("Appearance/Shadows", true).toBool()); if (!m_bevels_enabled) { m_has_bevels->setChecked(false); m_has_bevels->setEnabled(false); } updatePreview(); } //----------------------------------------------------------------------------- bool AppearanceDialog::hasBevels() const { return m_has_bevels->isChecked(); } //----------------------------------------------------------------------------- bool AppearanceDialog::hasShadows() const { return m_has_shadows->isChecked(); } //----------------------------------------------------------------------------- QPalette AppearanceDialog::colors() const { QPalette palette; palette.setColor(QPalette::Base, m_background->color()); palette.setColor(QPalette::Text, m_shadow->color()); palette.setColor(QPalette::Highlight, m_highlight->color()); return palette; } //----------------------------------------------------------------------------- void AppearanceDialog::setBevelsEnabled(bool enabled) { m_bevels_enabled = enabled; } //----------------------------------------------------------------------------- void AppearanceDialog::accept() { QSettings settings; settings.setValue("Colors/Background", m_background->color().name()); settings.setValue("Colors/Shadow", m_shadow->color().name()); settings.setValue("Colors/Highlight", m_highlight->color().name()); settings.setValue("Appearance/Bevels", m_has_bevels->isChecked()); settings.setValue("Appearance/Shadows", m_has_shadows->isChecked()); QDialog::accept(); } //----------------------------------------------------------------------------- void AppearanceDialog::restoreDefaults() { m_background->setColor("#9d8975"); m_shadow->setColor(Qt::black); m_highlight->setColor(Qt::white); m_has_bevels->setChecked(true); m_has_shadows->setChecked(true); updatePreview(); } //----------------------------------------------------------------------------- void AppearanceDialog::updatePreview() { QPixmap bumpmap; if (m_has_bevels->isChecked()) { bumpmap.load(":/bumpmap.png"); } else { bumpmap = QPixmap(512, 512); bumpmap.fill(QColor(128, 128, 128)); } QPixmap pixmap(352, 256); pixmap.fill(m_background->color()); { QPainter painter(&pixmap); // Draw example piece if (m_has_shadows->isChecked()) { QPixmap shadow = coloredShadow(m_shadow->color()); for (int i = 0; i < 3; ++i) { painter.drawPixmap(0, i * 64, shadow); } painter.drawPixmap(64, 64, shadow); } painter.drawPixmap(32, 32, bumpmap, 288, 416, 64, 64); painter.drawPixmap(32, 96, bumpmap, 32, 32, 64, 64); painter.drawPixmap(96, 96, bumpmap, 160, 416, 64, 64); painter.drawPixmap(32, 160, bumpmap, 32, 416, 64, 64); // Draw example highlighted piece painter.translate(160, 0); if (m_has_shadows->isChecked()) { QPixmap highlight = coloredShadow(m_highlight->color()); for (int i = 0; i < 3; ++i) { painter.drawPixmap(0, i * 64, highlight); } painter.drawPixmap(64, 64, highlight); } painter.drawPixmap(32, 32, bumpmap, 288, 416, 64, 64); painter.drawPixmap(32, 96, bumpmap, 32, 32, 64, 64); painter.drawPixmap(96, 96, bumpmap, 160, 416, 64, 64); painter.drawPixmap(32, 160, bumpmap, 32, 416, 64, 64); } QPalette palette = m_preview->palette(); palette.setColor(m_preview->backgroundRole(), m_background->color()); m_preview->setPalette(palette); m_preview->setPixmap(pixmap); } //----------------------------------------------------------------------------- tetzle-2.1.5+dfsg1/src/locale_dialog.cpp0000644000175000017500000001330513522554645020302 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2010, 2011, 2012, 2014, 2015, 2016, 2018, 2019 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #include "locale_dialog.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include //----------------------------------------------------------------------------- QString LocaleDialog::m_current; QString LocaleDialog::m_path; QString LocaleDialog::m_appname; //----------------------------------------------------------------------------- LocaleDialog::LocaleDialog(QWidget* parent) : QDialog(parent, Qt::WindowTitleHint | Qt::MSWindowsFixedSizeDialogHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint) { QString title = parent ? parent->window()->windowTitle() : QString(); setWindowTitle(!title.isEmpty() ? title : QCoreApplication::applicationName()); QLabel* text = new QLabel(tr("Select application language:"), this); m_translations = new QComboBox(this); m_translations->addItem(tr("")); QStringList translations = findTranslations(); for (QString translation : translations) { if (translation.startsWith("qt")) { continue; } translation.remove(m_appname); m_translations->addItem(languageName(translation), translation); } int index = std::max(0, m_translations->findData(m_current)); m_translations->setCurrentIndex(index); QDialogButtonBox* buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this); connect(buttons, &QDialogButtonBox::accepted, this, &LocaleDialog::accept); connect(buttons, &QDialogButtonBox::rejected, this, &LocaleDialog::reject); QVBoxLayout* layout = new QVBoxLayout(this); layout->setSizeConstraint(QLayout::SetFixedSize); layout->addWidget(text); layout->addWidget(m_translations); layout->addWidget(buttons); } //----------------------------------------------------------------------------- void LocaleDialog::loadTranslator(const QString& name, const QStringList& datadirs) { m_appname = name; // Find translator path QStringList paths = datadirs; if (paths.isEmpty()) { QString appdir = QCoreApplication::applicationDirPath(); paths.append(appdir); paths.append(appdir + "/../share/" + QCoreApplication::applicationName().toLower()); paths.append(appdir + "/../Resources"); } for (const QString& path : paths) { if (QFile::exists(path + "/translations/")) { m_path = path + "/translations/"; break; } } // Find current locale m_current = QSettings().value("Locale/Language").toString(); if (!m_current.isEmpty()) { QLocale::setDefault(m_current); } const QLocale locale; // Load translators static QTranslator translator; if (translator.load(locale, m_appname, "", m_path)) { QCoreApplication::installTranslator(&translator); const QString path = QLibraryInfo::location(QLibraryInfo::TranslationsPath); static QTranslator qtbase_translator; if (qtbase_translator.load(locale, "qtbase", "_", m_path) || qtbase_translator.load(locale, "qtbase", "_", path)) { QCoreApplication::installTranslator(&qtbase_translator); } static QTranslator qt_translator; if (qt_translator.load(locale, "qt", "_", m_path) || qt_translator.load(locale, "qt", "_", path)) { QCoreApplication::installTranslator(&qt_translator); } } } //----------------------------------------------------------------------------- QString LocaleDialog::languageName(const QString& language) { QString name; const QLocale locale(language); if (language.contains('_')) { if (locale.name() == language) { name = locale.nativeLanguageName() + " (" + locale.nativeCountryName() + ")"; } else { name = locale.nativeLanguageName() + " (" + language + ")"; } } else { name = locale.nativeLanguageName(); } if (name.isEmpty() || name == "C") { if (language == "eo") { name = "Esperanto"; } else { name = language; } } if (locale.textDirection() == Qt::RightToLeft) { name.prepend(QChar(0x202b)); } return name; } //----------------------------------------------------------------------------- QStringList LocaleDialog::findTranslations() { QStringList result = QDir(m_path, "*.qm").entryList(QDir::Files); result.replaceInStrings(".qm", ""); return result; } //----------------------------------------------------------------------------- void LocaleDialog::accept() { int current = m_translations->findData(m_current); if (current == m_translations->currentIndex()) { return reject(); } QDialog::accept(); m_current = m_translations->itemData(m_translations->currentIndex()).toString(); QSettings().setValue("Locale/Language", m_current); QMessageBox::information(this, tr("Note"), tr("Please restart this application for the change in language to take effect."), QMessageBox::Ok); } //----------------------------------------------------------------------------- tetzle-2.1.5+dfsg1/src/board.h0000644000175000017500000001075213522554645016263 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2010, 2011, 2014, 2016 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #ifndef BOARD_H #define BOARD_H #include "graphics_layer.h" class AppearanceDialog; class Message; class Overview; class Piece; class Tile; #include #include class QOpenGLTexture; #include class Board : public QOpenGLWidget { Q_OBJECT struct Region { VertexArray fill; VertexArray border; }; public: Board(QWidget* parent = 0); ~Board(); Piece* findCollidingPiece(Piece* piece) const; void removePiece(Piece* piece); int id() const; int margin() const; QRect marginRect(const QRect& rect) const; int randomInt(int max); float tileTextureSize() const; const QPointF* corners(int rotation) const; void setAppearance(const AppearanceDialog& dialog); void updateSceneRectangle(Piece* piece); public slots: void newGame(const QString& image, int difficulty); void openGame(int id); void saveGame(); void retrievePieces(); void zoomIn(); void zoomOut(); void zoomFit(); void zoom(int level); void toggleOverview(); signals: void completionChanged(int value); void overviewToggled(bool visible); void retrievePiecesAvailable(bool available); void showMessage(const QString& message, int timeout = 0); void clearMessage(); void zoomInAvailable(bool available); void zoomOutAvailable(bool available); void zoomChanged(int level, float factor); void finished(); protected: virtual void initializeGL(); virtual void resizeGL(int w, int h); virtual void paintGL(); virtual void keyPressEvent(QKeyEvent* event); virtual void keyReleaseEvent(QKeyEvent* event); virtual void mousePressEvent(QMouseEvent* event); virtual void mouseReleaseEvent(QMouseEvent* event); virtual void mouseMoveEvent(QMouseEvent* event); virtual void wheelEvent(QWheelEvent* event); private: void startScrolling(); void stopScrolling(); void scroll(const QPoint& delta); void togglePiecesUnderCursor(); void moveCursor(const QPoint& delta); void grabPiece(); void releasePieces(); void rotatePiece(); void selectPieces(); void drawArray(const Region& region, const QColor& fill, const QColor& border); void loadImage(); void updateCursor(); QPoint mapCursorPosition() const; QPoint mapPosition(const QPoint& position) const; void updateCompleted(); void updateArray(Region& region, const QRect& rect, int z); void updateSceneRectangle(); void updateStatusMessage(const QString& message); Piece* pieceUnderCursor(); int pieceCount(); void finishGame(); void cleanup(); private: int m_id; bool m_load_bevels; QString m_image_path; Overview* m_overview; Message* m_message; bool m_has_bevels; bool m_has_shadows; QOpenGLTexture* m_image; QOpenGLTexture* m_bumpmap_image; QOpenGLTexture* m_shadow_image; float m_image_ts; QPointF m_corners[4][4]; Region m_scene_array; Region m_selection_array; int m_columns; int m_rows; QList m_pieces; QList m_active_pieces; QList m_selected_pieces; QRect m_scene; int m_total_pieces; int m_completed; QPoint m_pos; QPoint m_cursor_pos; QPoint m_select_pos; int m_scale_level; float m_scale; bool m_scrolling; bool m_selecting; bool m_finished; int m_action_key; Qt::MouseButton m_action_button; std::mt19937 m_random; }; inline int Board::id() const { return m_id; } inline int Board::margin() const { return 16; } inline QRect Board::marginRect(const QRect& rect) const { return rect.adjusted(-margin(), -margin(), margin(), margin()); } inline int Board::randomInt(int max) { std::uniform_int_distribution dis(0, max - 1); return dis(m_random); } inline float Board::tileTextureSize() const { return m_image_ts; } inline const QPointF* Board::corners(int rotation) const { return m_corners[rotation]; } #endif tetzle-2.1.5+dfsg1/src/piece.cpp0000644000175000017500000003111213522554645016605 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2010, 2011, 2012, 2014, 2016 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #include "piece.h" #include "board.h" #include "tile.h" #include #include //----------------------------------------------------------------------------- Piece::Piece(const QPoint& pos, int rotation, const QList& tiles, Board* board) : m_board(board), m_pos(pos), m_tiles(tiles), m_shadow(tiles), m_rotation(0), m_depth(2), m_selected(true), m_changed(false) { updateTiles(); updateShadow(); // Add bevels to tiles if (m_tiles.first()->bevel().y() == -1) { int count = m_tiles.count(); for (int i = 0; i < count; ++i) { Tile* tile = m_tiles.at(i); int sides = 0; sides |= containsTile(tile->column() - 1, tile->row()); sides |= containsTile(tile->column() + 1, tile->row()) << 1; sides |= containsTile(tile->column(), tile->row() - 1) << 2; sides |= containsTile(tile->column(), tile->row() + 1) << 3; static const int bevels[14] = {13, 15, 11, 12, 5, 4, 1, 14, 6, 7, 3, 8, 2, 0}; tile->setBevel(bevels[sides - 1]); } } // Rotate rotate(rotation); setSelected(false); } //----------------------------------------------------------------------------- Piece::~Piece() { graphics_layer->removeArray(m_tile_array); graphics_layer->removeArray(m_shadow_array); qDeleteAll(m_tiles); } //----------------------------------------------------------------------------- bool Piece::collidesWith(const Piece* other) const { if (m_board->marginRect(boundingRect()).intersects(other->boundingRect())) { return m_collision_region_expanded.intersects(other->m_collision_region); } else { return false; } } //----------------------------------------------------------------------------- QPoint Piece::randomPoint() const { Tile* tile = m_tiles.at(m_board->randomInt(m_tiles.count())); return tile->scenePos() + QPoint(m_board->randomInt(Tile::size), m_board->randomInt(Tile::size)); } //----------------------------------------------------------------------------- void Piece::attachNeighbors() { auto neighbors = m_neighbors; for (Piece* piece : neighbors) { if (piece->m_rotation != m_rotation) { continue; } Tile* tile = m_tiles.first(); Tile* piece_tile = piece->m_tiles.first(); QPoint grid_delta = piece_tile->gridPos() - tile->gridPos(); for (int i = 0; i < m_rotation; ++i) { QPoint pos = grid_delta; grid_delta.setX( -pos.y() ); grid_delta.setY( pos.x() ); } QPoint top_left = tile->scenePos() + grid_delta; QPoint delta = top_left - piece_tile->scenePos(); if (delta.manhattanLength() <= m_board->margin()) { piece->moveBy(delta); attach(piece); } } } //----------------------------------------------------------------------------- void Piece::findNeighbors(const QList& pieces) { // Find neighbor tiles static QList deltas = QList() << QPoint(-1,0) << QPoint(1,0) << QPoint(0,-1) << QPoint(0,1); QList tiles; for (Tile* tile : m_shadow) { QPoint pos(tile->column(), tile->row()); for (const QPoint& delta : deltas) { QPoint neighbor = pos + delta; if (!containsTile(neighbor.x(), neighbor.y()) && !tiles.contains(neighbor)) { tiles.append(neighbor); } } } // Find neighbor pieces for (Piece* piece : pieces) { for (const QPoint& tile : tiles) { if (piece->containsTile(tile.x(), tile.y())) { m_neighbors.insert(piece); break; } } } } //----------------------------------------------------------------------------- void Piece::pushNeighbors(const QPointF& inertia) { while (Piece* neighbor = m_board->findCollidingPiece(this)) { // Determine which piece to move Piece *source, *target; if (m_tiles.count() >= neighbor->m_tiles.count()) { source = this; target = neighbor; } else { source = neighbor; target = this; } QRect source_rect = m_board->marginRect(source->boundingRect()); // Calculate valid movement vector for target; preserve some motion from last move QPointF vector = target->boundingRect().center() - source_rect.center() + inertia; while (vector.manhattanLength() < 1.0) { vector.setX( (m_board->randomInt(Tile::size)) - (Tile::size / 2) ); vector.setY( (m_board->randomInt(Tile::size)) - (Tile::size / 2) ); } // Scale movement vector so that the largest dimension is 1 QPointF direction = vector / std::max(fabs(vector.x()), fabs(vector.y())); // Push target until it is clear from current source // We use a binary-search, pushing away if collision, retracting otherwise QPoint orig = target->m_pos; QRect united = source_rect.united(target->boundingRect()); float min = 0.0f; float max = united.width() * united.height(); while (true) { float test = (min + max) / 2.0f; target->m_pos = orig + (test * direction).toPoint(); if (source->collidesWith(target)) { min = test; } else { max = test; if (max - min < 1.0f) { break; } Q_ASSERT(max - min > 0.01f); } } target->updateVerts(); Q_ASSERT(min < max); Q_ASSERT(!source->collidesWith(target)); // Recurse, and keep inertia for stability. target->pushNeighbors(vector); } } //----------------------------------------------------------------------------- void Piece::rotate(int rotations) { if (rotations) { for (int i = 0; i < rotations; ++i) { rotate(); } } else { updateVerts(); } } //----------------------------------------------------------------------------- void Piece::rotate(const QPoint& origin) { // Rotate 90 degrees counter-clockwise around origin if (!origin.isNull()) { QPoint pos = m_pos; pos.ry() += m_rect.height(); m_pos.setX( origin.y() + origin.x() - pos.y() ); m_pos.setY( origin.y() - origin.x() + pos.x() ); } m_rect.setRect(0, 0, m_rect.height(), m_rect.width()); // Rotate tiles 90 degrees counter-clockwise int count = m_tiles.count(); for (int i = 0; i < count; ++i) { m_tiles.at(i)->rotate(); } // Track how many rotations have occured m_rotation += 1; if (m_rotation > 3) { m_rotation = 0; } updateVerts(); } //----------------------------------------------------------------------------- void Piece::setDepth(int depth) { m_depth = (depth + 1) * 2; updateVerts(); } //----------------------------------------------------------------------------- void Piece::setSelected(bool selected) { m_selected = selected; if (!m_selected && m_changed) { updateCollisionRegions(); } } //----------------------------------------------------------------------------- void Piece::save(QXmlStreamWriter& xml) const { xml.writeStartElement("piece"); xml.writeAttribute("x", QString::number(m_pos.x())); xml.writeAttribute("y", QString::number(m_pos.y())); xml.writeAttribute("rotation", QString::number(m_rotation)); for (int i = 0; i < m_tiles.count(); ++i) { m_tiles.at(i)->save(xml); } xml.writeEndElement(); } //----------------------------------------------------------------------------- void Piece::attach(Piece* piece) { Q_ASSERT(piece != this); // Update position m_pos.setX(std::min(m_pos.x(), piece->m_pos.x())); m_pos.setY(std::min(m_pos.y(), piece->m_pos.y())); // Update shadow m_shadow += piece->m_shadow; updateShadow(); // Update position of attached tiles int rotation = m_rotation; for (int i = rotation; i < 4; ++i) { rotate(); piece->rotate(); } m_tiles += piece->m_tiles; piece->m_tiles.clear(); updateTiles(); rotate(rotation); // Update neighbors m_neighbors += piece->m_neighbors; m_neighbors.remove(piece); m_neighbors.remove(this); for (Piece* neighbor : m_neighbors) { neighbor->m_neighbors.remove(piece); neighbor->m_neighbors.insert(this); } // Remove attached piece m_board->removePiece(piece); } //----------------------------------------------------------------------------- bool Piece::containsTile(int column, int row) { bool result = false; for (int i = 0; i < m_tiles.count(); ++i) { const Tile* tile = m_tiles.at(i); if (tile->column() == column && tile->row() == row) { result = true; break; } } return result; } //----------------------------------------------------------------------------- void Piece::updateCollisionRegions() { m_changed = false; m_collision_region = QRegion(); m_collision_region_expanded = QRegion(); QRect rect(0,0, Tile::size, Tile::size); for (int i = 0; i < m_tiles.count(); ++i) { rect.moveTo(m_tiles.at(i)->scenePos()); m_collision_region += rect; m_collision_region_expanded += m_board->marginRect(rect); } } //----------------------------------------------------------------------------- void Piece::updateShadow() { QMutableListIterator i(m_shadow); while (i.hasNext()) { Tile* tile = i.next(); if ( containsTile(tile->column() - 1, tile->row()) && containsTile(tile->column() + 1, tile->row()) && containsTile(tile->column(), tile->row() - 1) && containsTile(tile->column(), tile->row() + 1) ) { i.remove(); } } } //----------------------------------------------------------------------------- void Piece::updateTiles() { int count = m_tiles.count(); // Find bounding rectangle QPoint top_left = m_tiles.first()->gridPos(); QPoint bottom_right = top_left + QPoint(Tile::size, Tile::size); QPoint pos; for (int i = 0; i < count; ++i) { pos = m_tiles.at(i)->gridPos(); top_left.setX( std::min(pos.x(), top_left.x()) ); top_left.setY( std::min(pos.y(), top_left.y()) ); bottom_right.setX( std::max(pos.x() + Tile::size, bottom_right.x()) ); bottom_right.setY( std::max(pos.y() + Tile::size, bottom_right.y()) ); } m_rect.setRect(0, 0, bottom_right.x() - top_left.x(), bottom_right.y() - top_left.y()); // Shift tiles to be inside rectangle Tile* tile; for (int i = 0; i < count; ++i) { tile = m_tiles.at(i); tile->setParent(this); tile->setPos(tile->gridPos() - top_left); } } //----------------------------------------------------------------------------- void Piece::updateVerts() { m_changed = true; if (!m_selected) { updateCollisionRegions(); } QVector verts; int z = m_depth; // Update tile verts verts.reserve(m_tiles.count() * 6); for (int i = 0; i < m_tiles.count(); ++i) { Tile* tile = m_tiles.at(i); QPoint pos = tile->scenePos(); int x1 = pos.x(); int y1 = pos.y(); int x2 = x1 + Tile::size; int y2 = y1 + Tile::size; const QPointF* corners = m_board->corners(rotation()); float tx = tile->column() * m_board->tileTextureSize(); float ty = tile->row() * m_board->tileTextureSize(); float bx1 = tile->bevel().x(); float by1 = tile->bevel().y(); float bx2 = bx1 + 0.125; float by2 = by1 + 0.125; verts.append( Vertex::init(x1,y1,z, tx + corners[0].x(),ty + corners[0].y(), bx1,by1) ); verts.append( Vertex::init(x1,y2,z, tx + corners[1].x(),ty + corners[1].y(), bx1,by2) ); verts.append( Vertex::init(x2,y1,z, tx + corners[3].x(),ty + corners[3].y(), bx2,by1) ); verts.append( Vertex::init(x2,y1,z, tx + corners[3].x(),ty + corners[3].y(), bx2,by1) ); verts.append( Vertex::init(x1,y2,z, tx + corners[1].x(),ty + corners[1].y(), bx1,by2) ); verts.append( Vertex::init(x2,y2,z, tx + corners[2].x(),ty + corners[2].y(), bx2,by2) ); } graphics_layer->updateArray(m_tile_array, verts); // Update shadow verts z--; static const int offset = Tile::size / 2; static const int size = Tile::size * 2; verts.clear(); verts.reserve(m_shadow.count() * 6); for (int i = 0; i < m_shadow.count(); ++i) { QPoint pos = m_shadow.at(i)->scenePos(); int x1 = pos.x() - offset; int y1 = pos.y() - offset; int x2 = x1 + size; int y2 = y1 + size; verts.append( Vertex::init(x1,y1,z, 0,0) ); verts.append( Vertex::init(x1,y2,z, 0,1) ); verts.append( Vertex::init(x2,y1,z, 1,0) ); verts.append( Vertex::init(x2,y1,z, 1,0) ); verts.append( Vertex::init(x1,y2,z, 0,1) ); verts.append( Vertex::init(x2,y2,z, 1,1) ); } graphics_layer->updateArray(m_shadow_array, verts); // Update scene rectangle m_board->updateSceneRectangle(this); } //----------------------------------------------------------------------------- tetzle-2.1.5+dfsg1/src/graphics_layer.cpp0000644000175000017500000005554513522554645020534 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2011, 2012, 2014, 2016, 2017, 2018 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #include "graphics_layer.h" #include "appearance_dialog.h" #include #include #include #include #include //----------------------------------------------------------------------------- GraphicsLayer* graphics_layer = 0; //----------------------------------------------------------------------------- template static inline void convertMatrix(const T* in, GLfloat* out) { std::copy(in, in + 16, out); } //----------------------------------------------------------------------------- void GraphicsLayer::init() { const auto requested = QSurfaceFormat::defaultFormat(); const auto context = QOpenGLContext::currentContext()->format(); if (!QOpenGLContext::currentContext()->isOpenGLES()) { const auto version = std::min((context.profile() == QSurfaceFormat::CoreProfile) ? qMakePair(4,6) : requested.version(), context.version()); if (version >= qMakePair(3,0)) { const QString shader = "gl3"; QByteArray glsl = "130"; if (version >= qMakePair(3,3)) { glsl = QByteArray::number((version.first * 100) + (version.second * 10)); } else if (version == qMakePair(3,2)) { glsl = "150"; } else if (version == qMakePair(3,1)) { glsl = "140"; } auto vertex_array = new QOpenGLVertexArrayObject; vertex_array->create(); vertex_array->bind(); graphics_layer = new GraphicsLayer21(vertex_array, glsl, shader); } else if (version >= qMakePair(2,1)) { const QString shader = "gl2"; const QByteArray glsl = "120"; graphics_layer = new GraphicsLayer21(nullptr, glsl, shader); #ifndef QT_OPENGL_ES_2 } else if (version >= qMakePair(1,5)) { graphics_layer = new GraphicsLayer15; } else if (version >= qMakePair(1,3)) { graphics_layer = new GraphicsLayer13; } else { graphics_layer = new GraphicsLayer11; #endif } } else { const auto version = std::min(requested.version(), context.version()); if (version >= qMakePair(3,0)) { const QString shader = "gl3"; const QByteArray glsl = "300 es"; auto vertex_array = new QOpenGLVertexArrayObject; vertex_array->create(); vertex_array->bind(); graphics_layer = new GraphicsLayer21(vertex_array, glsl, shader); } else { const QString shader = "gl2"; graphics_layer = new GraphicsLayer21(nullptr, QByteArray(), shader); } } graphics_layer->setTextureUnits(1); } //----------------------------------------------------------------------------- void GraphicsLayer::setVersion(int version) { QSurfaceFormat f; if (QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGL) { switch (version) { #ifndef QT_OPENGL_ES_2 case 11: case 12: f.setVersion(1,1); break; case 13: case 14: f.setVersion(1,3); break; case 15: case 20: f.setVersion(1,5); break; #endif case 21: f.setVersion(2,1); break; case 30: case 31: case 32: case 33: case 40: case 41: case 42: case 43: case 44: case 45: case 46: default: f.setVersion(4,6); f.setProfile(QSurfaceFormat::CoreProfile); break; } } else { switch (version) { case 30: case 31: case 32: f.setVersion(3,0); break; case 20: default: f.setVersion(2,0); break; } } QSurfaceFormat::setDefaultFormat(f); } //----------------------------------------------------------------------------- GraphicsLayer::GraphicsLayer() : m_changed(true) { // Start with a 1MB vertex buffer m_data.resize(0x100000 / sizeof(Vertex)); VertexArray free_region; free_region.end = m_data.count(); m_free_regions.append(free_region); } //----------------------------------------------------------------------------- GraphicsLayer::~GraphicsLayer() { } //----------------------------------------------------------------------------- void GraphicsLayer::updateArray(VertexArray& array, const QVector& data) { int length = data.count(); if (array.length() != length) { removeArray(array); array.start = -1; for (int i = 0; i < m_free_regions.count(); ++i) { VertexArray& free_region = m_free_regions[i]; if (free_region.length() == length) { array.start = free_region.start; array.end = array.start + length; m_free_regions.removeAt(i); break; } else if (free_region.length() > length) { array.start = free_region.start; array.end = array.start + length; free_region.start += length; break; } } } if (array.start != -1) { std::copy(data.begin(), data.end(), m_data.begin() + array.start); if (!m_changed) { m_changed_regions.append(array); } } else { array.start = m_data.count(); array.end = array.start + length; m_data += data; m_changed = true; m_changed_regions.clear(); } } //----------------------------------------------------------------------------- void GraphicsLayer::removeArray(VertexArray& array) { if (array.end == 0) { return; } bool merged = false; int count = m_free_regions.count(); int pos = count; for (int i = 0; i < count; ++i) { VertexArray& free_region = m_free_regions[i]; if (free_region.end == array.start) { merged = true; free_region.end = array.end; if ((i+1) < count && free_region.end == m_free_regions[i+1].start) { free_region.end = m_free_regions[i+1].end; m_free_regions.removeAt(i+1); } break; } else if (free_region.start == array.end) { merged = true; free_region.start = array.start; if (i > 0 && free_region.start == m_free_regions[i-1].end) { free_region.start = m_free_regions[i-1].start; m_free_regions.removeAt(i-1); } break; } else if (free_region.start > array.start) { pos = i; break; } } if (!merged) { m_free_regions.insert(pos, array); } array.start = array.end = 0; } //----------------------------------------------------------------------------- void GraphicsLayer::clearChanged() { m_changed_regions.clear(); m_changed = false; } //----------------------------------------------------------------------------- void GraphicsLayer::uploadChanged(QOpenGLBuffer* vertex_buffer) { const int vertex_size = sizeof(Vertex); if (!m_changed_regions.isEmpty()) { for (const VertexArray& region : m_changed_regions) { vertex_buffer->write(region.start * vertex_size, m_data.constBegin() + region.start, region.length() * vertex_size); } m_changed_regions.clear(); } else if (m_changed) { const int size = m_data.count() * vertex_size; vertex_buffer->allocate(size); vertex_buffer->write(0, m_data.constData(), size); m_changed = false; } } //----------------------------------------------------------------------------- GraphicsLayer21::GraphicsLayer21(QOpenGLVertexArrayObject* vertex_array, const QByteArray& glsl, const QString& shader) : m_program(nullptr), m_vertex_array(vertex_array) { initializeOpenGLFunctions(); AppearanceDialog::setBevelsEnabled(true); glDisable(GL_BLEND); // Enable OpenGL features glEnable(GL_CULL_FACE); glEnable(GL_DEPTH_TEST); // Set OpenGL parameters glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDepthFunc(GL_LEQUAL); glFrontFace(GL_CCW); // Create vertex buffer object m_vertex_buffer = new QOpenGLBuffer(QOpenGLBuffer::VertexBuffer); m_vertex_buffer->setUsagePattern(QOpenGLBuffer::DynamicDraw); m_vertex_buffer->create(); m_vertex_buffer->bind(); // Load shaders QOpenGLShaderProgram* program = loadProgram(0, glsl, shader); program->setAttributeBuffer(Position, GL_FLOAT, offsetof(Vertex, x), 3, sizeof(Vertex)); program->enableAttributeArray(Position); program = loadProgram(1, glsl, shader); program->setAttributeBuffer(TexCoord0, GL_FLOAT, offsetof(Vertex, s), 2, sizeof(Vertex)); program->setAttributeBuffer(Position, GL_FLOAT, offsetof(Vertex, x), 3, sizeof(Vertex)); program->enableAttributeArray(Position); program->setUniformValue("texture0", GLuint(0)); program = loadProgram(2, glsl, shader); program->setAttributeBuffer(TexCoord1, GL_FLOAT, offsetof(Vertex, s2), 2, sizeof(Vertex)); program->setAttributeBuffer(TexCoord0, GL_FLOAT, offsetof(Vertex, s), 2, sizeof(Vertex)); program->setAttributeBuffer(Position, GL_FLOAT, offsetof(Vertex, x), 3, sizeof(Vertex)); program->enableAttributeArray(Position); program->setUniformValue("texture0", GLuint(0)); program->setUniformValue("texture1", GLuint(1)); } //----------------------------------------------------------------------------- GraphicsLayer21::~GraphicsLayer21() { // Unload shaders for (int i = 0; i < 3; ++i) { delete m_programs[i]; } // Delete vertex buffer object delete m_vertex_buffer; // Delete vertex array object delete m_vertex_array; } //----------------------------------------------------------------------------- void GraphicsLayer21::bindTexture(unsigned int unit, GLuint texture) { glActiveTexture(GL_TEXTURE0 + unit); glBindTexture(GL_TEXTURE_2D, texture); glActiveTexture(GL_TEXTURE0); } //----------------------------------------------------------------------------- void GraphicsLayer21::clear() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } //----------------------------------------------------------------------------- void GraphicsLayer21::draw(const VertexArray& array, GLenum mode) { glDrawArrays(mode, array.start, array.length()); } //----------------------------------------------------------------------------- GLint GraphicsLayer21::getMaxTextureSize() { GLint max_size; glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max_size); return max_size; } //----------------------------------------------------------------------------- void GraphicsLayer21::setBlended(bool enabled) { if (enabled) { glEnable(GL_BLEND); } else { glDisable(GL_BLEND); } } //----------------------------------------------------------------------------- void GraphicsLayer21::setClearColor(const QColor& color) { glClearColor(color.redF(), color.greenF(), color.blueF(), color.alphaF()); } //----------------------------------------------------------------------------- void GraphicsLayer21::setColor(const QColor& color) { m_program->setUniformValue(m_color_location, color); } //----------------------------------------------------------------------------- void GraphicsLayer21::setModelview(const QMatrix4x4& matrix) { m_modelview = matrix; convertMatrix((m_projection * m_modelview).constData(), m_matrix[0]); m_program->setUniformValue(m_matrix_location, m_matrix); } //----------------------------------------------------------------------------- void GraphicsLayer21::setProjection(const QMatrix4x4& matrix) { m_projection = matrix; convertMatrix((m_projection * m_modelview).constData(), m_matrix[0]); m_program->setUniformValue(m_matrix_location, m_matrix); } //----------------------------------------------------------------------------- void GraphicsLayer21::setTextureUnits(unsigned int units) { Q_ASSERT(units < 3); QOpenGLShaderProgram* program = m_programs[units]; if (m_program == program) { return; } m_program = program; m_program->bind(); m_color_location = m_program->uniformLocation("color"); m_matrix_location = m_program->uniformLocation("matrix"); m_program->setUniformValue(m_color_location, Qt::white); m_program->setUniformValue(m_matrix_location, m_matrix); if (units > 1) { m_program->enableAttributeArray(TexCoord1); m_program->enableAttributeArray(TexCoord0); } else if (units > 0) { m_program->disableAttributeArray(TexCoord1); m_program->enableAttributeArray(TexCoord0); } else { m_program->disableAttributeArray(TexCoord1); m_program->disableAttributeArray(TexCoord0); } } //----------------------------------------------------------------------------- void GraphicsLayer21::setViewport(GLint x, GLint y, GLsizei width, GLsizei height) { glViewport(x, y, width, height); } //----------------------------------------------------------------------------- void GraphicsLayer21::uploadData() { uploadChanged(m_vertex_buffer); } //----------------------------------------------------------------------------- QOpenGLShaderProgram* GraphicsLayer21::loadProgram(unsigned int index, const QByteArray& glsl, const QString& shader) { // Load vertex shader code QByteArray vertex; QFile file(QString(":/shaders/%1/textures%2.vert").arg(shader).arg(index)); if (file.open(QFile::ReadOnly)) { vertex = file.readAll(); file.close(); } // Load fragment shader code QByteArray frag; file.setFileName(QString(":/shaders/%1/textures%2.frag").arg(shader).arg(index)); if (file.open(QFile::ReadOnly)) { frag = file.readAll(); file.close(); } // Add GLSL version if (!glsl.isEmpty()) { vertex.prepend("#version " + glsl + "\n"); frag.prepend("#version " + glsl + "\n"); } // Create program m_programs[index] = new QOpenGLShaderProgram; m_programs[index]->addShaderFromSourceCode(QOpenGLShader::Vertex, vertex); m_programs[index]->addShaderFromSourceCode(QOpenGLShader::Fragment, frag); // Set attribute locations m_programs[index]->bindAttributeLocation("position", Position); if (index > 0) { m_programs[index]->bindAttributeLocation("texcoord0", TexCoord0); } if (index > 1) { m_programs[index]->bindAttributeLocation("texcoord1", TexCoord1); } // Link and bind program m_programs[index]->link(); m_programs[index]->bind(); return m_programs[index]; } //----------------------------------------------------------------------------- #ifndef QT_OPENGL_ES_2 GraphicsLayer11::GraphicsLayer11() { initializeOpenGLFunctions(); AppearanceDialog::setBevelsEnabled(false); // Disable unused OpenGL features glDisable(GL_LIGHTING); glDisable(GL_BLEND); // Enable OpenGL features glEnable(GL_CULL_FACE); glEnable(GL_DEPTH_TEST); glEnableClientState(GL_VERTEX_ARRAY); // Set OpenGL parameters glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDepthFunc(GL_LEQUAL); glFrontFace(GL_CCW); setColor(Qt::white); } //----------------------------------------------------------------------------- void GraphicsLayer11::bindTexture(unsigned int unit, GLuint texture) { Q_UNUSED(unit); glBindTexture(GL_TEXTURE_2D, texture); } //----------------------------------------------------------------------------- void GraphicsLayer11::clear() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } //----------------------------------------------------------------------------- void GraphicsLayer11::draw(const VertexArray& array, GLenum mode) { glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &at(array.start).s); glVertexPointer(3, GL_FLOAT, sizeof(Vertex), &at(array.start).x); glDrawArrays(mode, 0, array.length()); } //----------------------------------------------------------------------------- GLint GraphicsLayer11::getMaxTextureSize() { GLint max_size; glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max_size); return max_size; } //----------------------------------------------------------------------------- void GraphicsLayer11::setBlended(bool enabled) { if (enabled) { glEnable(GL_BLEND); } else { glDisable(GL_BLEND); } } //----------------------------------------------------------------------------- void GraphicsLayer11::setClearColor(const QColor& color) { glClearColor(color.redF(), color.greenF(), color.blueF(), color.alphaF()); } //----------------------------------------------------------------------------- void GraphicsLayer11::setColor(const QColor& color) { glColor4f(color.redF(), color.greenF(), color.blueF(), color.alphaF()); } //----------------------------------------------------------------------------- void GraphicsLayer11::setModelview(const QMatrix4x4& matrix) { GLfloat modelview[16]; convertMatrix(matrix.constData(), modelview); glLoadMatrixf(modelview); } //----------------------------------------------------------------------------- void GraphicsLayer11::setProjection(const QMatrix4x4& matrix) { GLfloat projection[16]; convertMatrix(matrix.constData(), projection); glMatrixMode(GL_PROJECTION); glLoadMatrixf(projection); glMatrixMode(GL_MODELVIEW); } //----------------------------------------------------------------------------- void GraphicsLayer11::setTextureUnits(unsigned int units) { if (units) { glEnable(GL_TEXTURE_2D); glEnableClientState(GL_TEXTURE_COORD_ARRAY); } else { glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisable(GL_TEXTURE_2D); } } //----------------------------------------------------------------------------- void GraphicsLayer11::setViewport(GLint x, GLint y, GLsizei width, GLsizei height) { glViewport(x, y, width, height); } //----------------------------------------------------------------------------- void GraphicsLayer11::uploadData() { clearChanged(); } //----------------------------------------------------------------------------- GraphicsLayer13::GraphicsLayer13() { initializeOpenGLFunctions(); AppearanceDialog::setBevelsEnabled(true); // Disable unused OpenGL features glDisable(GL_LIGHTING); glDisable(GL_BLEND); // Enable OpenGL features glEnable(GL_CULL_FACE); glEnable(GL_DEPTH_TEST); glEnableClientState(GL_VERTEX_ARRAY); // Set OpenGL parameters glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDepthFunc(GL_LEQUAL); glFrontFace(GL_CCW); setColor(Qt::white); glActiveTexture(GL_TEXTURE1); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_ADD_SIGNED); glActiveTexture(GL_TEXTURE0); } //----------------------------------------------------------------------------- void GraphicsLayer13::bindTexture(unsigned int unit, GLuint texture) { glActiveTexture(GL_TEXTURE0 + unit); glBindTexture(GL_TEXTURE_2D, texture); glActiveTexture(GL_TEXTURE0); } //----------------------------------------------------------------------------- void GraphicsLayer13::clear() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } //----------------------------------------------------------------------------- void GraphicsLayer13::draw(const VertexArray& array, GLenum mode) { glClientActiveTexture(GL_TEXTURE1); glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &at(array.start).s2); glClientActiveTexture(GL_TEXTURE0); glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &at(array.start).s); glVertexPointer(3, GL_FLOAT, sizeof(Vertex), &at(array.start).x); glDrawArrays(mode, 0, array.length()); } //----------------------------------------------------------------------------- GLint GraphicsLayer13::getMaxTextureSize() { GLint max_size; glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max_size); return max_size; } //----------------------------------------------------------------------------- void GraphicsLayer13::setBlended(bool enabled) { if (enabled) { glEnable(GL_BLEND); } else { glDisable(GL_BLEND); } } //----------------------------------------------------------------------------- void GraphicsLayer13::setClearColor(const QColor& color) { glClearColor(color.redF(), color.greenF(), color.blueF(), color.alphaF()); } //----------------------------------------------------------------------------- void GraphicsLayer13::setColor(const QColor& color) { glColor4f(color.redF(), color.greenF(), color.blueF(), color.alphaF()); } //----------------------------------------------------------------------------- void GraphicsLayer13::setModelview(const QMatrix4x4& matrix) { GLfloat modelview[16]; convertMatrix(matrix.constData(), modelview); glLoadMatrixf(modelview); } //----------------------------------------------------------------------------- void GraphicsLayer13::setProjection(const QMatrix4x4& matrix) { GLfloat projection[16]; convertMatrix(matrix.constData(), projection); glMatrixMode(GL_PROJECTION); glLoadMatrixf(projection); glMatrixMode(GL_MODELVIEW); } //----------------------------------------------------------------------------- void GraphicsLayer13::setTextureUnits(unsigned int units) { glActiveTexture(GL_TEXTURE1); glClientActiveTexture(GL_TEXTURE1); if (units > 1) { glEnable(GL_TEXTURE_2D); glEnableClientState(GL_TEXTURE_COORD_ARRAY); } else { glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisable(GL_TEXTURE_2D); } glActiveTexture(GL_TEXTURE0); glClientActiveTexture(GL_TEXTURE0); if (units > 0) { glEnable(GL_TEXTURE_2D); glEnableClientState(GL_TEXTURE_COORD_ARRAY); } else { glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisable(GL_TEXTURE_2D); } } //----------------------------------------------------------------------------- void GraphicsLayer13::setViewport(GLint x, GLint y, GLsizei width, GLsizei height) { glViewport(x, y, width, height); } //----------------------------------------------------------------------------- void GraphicsLayer13::uploadData() { clearChanged(); } //----------------------------------------------------------------------------- GraphicsLayer15::GraphicsLayer15() { m_vertex_buffer = new QOpenGLBuffer(QOpenGLBuffer::VertexBuffer); m_vertex_buffer->setUsagePattern(QOpenGLBuffer::DynamicDraw); m_vertex_buffer->create(); m_vertex_buffer->bind(); } //----------------------------------------------------------------------------- GraphicsLayer15::~GraphicsLayer15() { // Delete vertex buffer object delete m_vertex_buffer; } //----------------------------------------------------------------------------- void GraphicsLayer15::draw(const VertexArray& array, GLenum mode) { glDrawArrays(mode, array.start, array.length()); } //----------------------------------------------------------------------------- void GraphicsLayer15::setTextureUnits(unsigned int units) { glActiveTexture(GL_TEXTURE1); glClientActiveTexture(GL_TEXTURE1); if (units > 1) { glEnable(GL_TEXTURE_2D); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), reinterpret_cast(offsetof(Vertex, s2))); } else { glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisable(GL_TEXTURE_2D); } glActiveTexture(GL_TEXTURE0); glClientActiveTexture(GL_TEXTURE0); if (units > 0) { glEnable(GL_TEXTURE_2D); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), reinterpret_cast(offsetof(Vertex, s))); } else { glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisable(GL_TEXTURE_2D); } glVertexPointer(3, GL_FLOAT, sizeof(Vertex), reinterpret_cast(offsetof(Vertex, x))); } //----------------------------------------------------------------------------- void GraphicsLayer15::uploadData() { uploadChanged(m_vertex_buffer); } #endif //----------------------------------------------------------------------------- tetzle-2.1.5+dfsg1/src/appearance_dialog.h0000644000175000017500000000277513522554645020620 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2010 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #ifndef APPEARANCE_DIALOG_H #define APPEARANCE_DIALOG_H #include class QAbstractButton; class QCheckBox; class QLabel; class ColorButton; class AppearanceDialog : public QDialog { Q_OBJECT public: AppearanceDialog(QWidget* parent = 0); bool hasBevels() const; bool hasShadows() const; QPalette colors() const; static void setBevelsEnabled(bool enabled); public slots: void accept(); private slots: void restoreDefaults(); void updatePreview(); private: QCheckBox* m_has_bevels; QCheckBox* m_has_shadows; ColorButton* m_background; ColorButton* m_shadow; ColorButton* m_highlight; QLabel* m_preview; static bool m_bevels_enabled; }; #endif tetzle-2.1.5+dfsg1/src/generator.cpp0000644000175000017500000001142613522554645017514 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2010, 2011, 2013, 2014 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #include "generator.h" #include "dancing_links.h" #include "tile.h" #include //----------------------------------------------------------------------------- namespace { struct Shape { Shape(const QPoint& p1, const QPoint& p2, const QPoint& p3, const QPoint& p4); QPoint cells[4]; int width; int height; }; Shape::Shape(const QPoint& p1, const QPoint& p2, const QPoint& p3, const QPoint& p4) : width(0), height(0) { cells[0] = p1; cells[1] = p2; cells[2] = p3; cells[3] = p4; for (int i = 0; i < 4; ++i) { width = std::max(width, cells[i].x()); height = std::max(height, cells[i].y()); } } } //----------------------------------------------------------------------------- Generator::Generator(int columns, int rows, std::mt19937& random) : m_columns(columns), m_rows(rows), m_random(random) { do { m_pieces.clear(); solve(); } while (m_pieces.isEmpty()); } //----------------------------------------------------------------------------- void Generator::solve() { QList shapes; // Add S shapes.append(Shape(QPoint(1,0), QPoint(2,0), QPoint(0,1), QPoint(1,1))); shapes.append(Shape(QPoint(0,0), QPoint(0,1), QPoint(1,1), QPoint(1,2))); // Add Z shapes.append(Shape(QPoint(0,0), QPoint(1,0), QPoint(1,1), QPoint(2,1))); shapes.append(Shape(QPoint(1,0), QPoint(0,1), QPoint(1,1), QPoint(0,2))); // Add O shapes.append(Shape(QPoint(0,0), QPoint(1,0), QPoint(0,1), QPoint(1,1))); // Add T shapes.append(Shape(QPoint(0,0), QPoint(1,0), QPoint(1,1), QPoint(2,0))); shapes.append(Shape(QPoint(1,0), QPoint(0,1), QPoint(1,1), QPoint(1,2))); shapes.append(Shape(QPoint(0,1), QPoint(1,1), QPoint(1,0), QPoint(2,1))); shapes.append(Shape(QPoint(0,0), QPoint(0,1), QPoint(1,1), QPoint(0,2))); // Add J shapes.append(Shape(QPoint(1,0), QPoint(1,1), QPoint(0,2), QPoint(1,2))); shapes.append(Shape(QPoint(0,0), QPoint(0,1), QPoint(1,1), QPoint(2,1))); shapes.append(Shape(QPoint(0,0), QPoint(1,0), QPoint(0,1), QPoint(0,2))); shapes.append(Shape(QPoint(0,0), QPoint(1,0), QPoint(2,0), QPoint(2,1))); // Add L shapes.append(Shape(QPoint(0,0), QPoint(0,1), QPoint(0,2), QPoint(1,2))); shapes.append(Shape(QPoint(0,0), QPoint(1,0), QPoint(2,0), QPoint(0,1))); shapes.append(Shape(QPoint(0,0), QPoint(1,0), QPoint(1,1), QPoint(1,2))); shapes.append(Shape(QPoint(0,1), QPoint(1,1), QPoint(2,0), QPoint(2,1))); // Add I shapes.append(Shape(QPoint(0,0), QPoint(1,0), QPoint(2,0), QPoint(3,0))); shapes.append(Shape(QPoint(0,0), QPoint(0,1), QPoint(0,2), QPoint(0,3))); // Create matrix DLX::Matrix matrix(m_columns * m_rows); int size = shapes.size(); QList ids; for (int i = 0; i < size; ++i) { ids.append(i); } QList cells; for (int i = 0; i < m_columns * m_rows; ++i) { cells.append(i); } std::shuffle(cells.begin(), cells.end(), m_random); int cell, col, row; for (int i = 0; i < m_columns * m_rows; ++i) { cell = cells.at(i); row = cell / m_columns; col = cell - (row * m_columns); std::shuffle(ids.begin(), ids.end(), m_random); for (int i = 0; i < size; ++i) { const Shape& shape = shapes.at(ids.at(i)); if (shape.width + col < m_columns && shape.height + row < m_rows) { matrix.addRow(); for (int i = 0; i < 4; ++i) { matrix.addElement((shape.cells[i].y() + row) * m_columns + shape.cells[i].x() + col); } } } } // Generate solution matrix.search(this, &Generator::solution, 1, m_columns * m_rows); } //----------------------------------------------------------------------------- void Generator::solution(const QVector& rows) { QList piece; for (int i = 0; i < rows.count(); ++i) { piece.clear(); DLX::Node* j = rows[i]; do { unsigned int r = j->column->id / m_columns; unsigned int c = j->column->id - (r * m_columns); piece.append(new Tile(c, r)); j = j->right; } while (j != rows[i]); m_pieces.append(piece); } } //----------------------------------------------------------------------------- tetzle-2.1.5+dfsg1/src/window.cpp0000644000175000017500000002453113522554645017036 0ustar jonathanjonathan/*********************************************************************** * * Copyright (C) 2008, 2010, 2011, 2014, 2015, 2016, 2017, 2018, 2019 Graeme Gott * * 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 3 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ***********************************************************************/ #include "window.h" #include "add_image.h" #include "appearance_dialog.h" #include "board.h" #include "choose_game_dialog.h" #include "locale_dialog.h" #include "zoom_slider.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //----------------------------------------------------------------------------- Window::Window(const QStringList& files) : m_board(0) { setAcceptDrops(true); resize(640, 480); // Add statusbar m_slider = new ZoomSlider(this); statusBar()->addPermanentWidget(m_slider); m_completed = new QProgressBar(this); m_completed->setRange(0, 100); m_completed->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum); statusBar()->addPermanentWidget(m_completed); statusBar()->setMinimumHeight(statusBar()->sizeHint().height()); m_slider->hide(); m_completed->hide(); // Add contents m_board = new Board(this); connect(m_board, &Board::completionChanged, m_completed, &QProgressBar::setValue); connect(m_board, &Board::finished, this, &Window::gameFinished); connect(m_board, &Board::clearMessage, statusBar(), &QStatusBar::clearMessage); connect(m_board, &Board::showMessage, statusBar(), &QStatusBar::showMessage); connect(m_board, &Board::zoomChanged, m_slider, &ZoomSlider::setValue); connect(m_slider, &ZoomSlider::valueChanged, m_board, &Board::zoom); setCentralWidget(m_board); // Add menus QMenu* menu; menu = menuBar()->addMenu(tr("&Game")); QAction* choose_action = menu->addAction(tr("&Choose..."), this, SLOT(chooseGame())); choose_action->setShortcuts(QList() << QKeySequence::New << QKeySequence::Open); menu->addSeparator(); QAction* retrieve_pieces_action = menu->addAction(tr("&Retrieve Pieces"), m_board, SLOT(retrievePieces()), tr("Ctrl+R")); retrieve_pieces_action->setEnabled(false); connect(m_board, &Board::retrievePiecesAvailable, retrieve_pieces_action, &QAction::setEnabled); menu->addSeparator(); QAction* quit_action = menu->addAction(tr("&Quit"), this, SLOT(close()), QKeySequence::Quit); quit_action->setMenuRole(QAction::QuitRole); menu = menuBar()->addMenu(tr("&View")); QAction* zoom_in_action = menu->addAction(tr("Zoom &In"), m_board, SLOT(zoomIn()), tr("+")); zoom_in_action->setEnabled(false); connect(m_board, &Board::zoomInAvailable, zoom_in_action, &QAction::setEnabled); QAction* zoom_out_action = menu->addAction(tr("Zoom &Out"), m_board, SLOT(zoomOut()), tr("-")); zoom_out_action->setEnabled(false); connect(m_board, &Board::zoomOutAvailable, zoom_out_action, &QAction::setEnabled); m_zoom_fit_action = menu->addAction(tr("Best &Fit"), m_board, SLOT(zoomFit())); m_zoom_fit_action->setEnabled(false); menu->addSeparator(); m_toggle_overview_action = menu->addAction(tr("Show O&verview"), m_board, SLOT(toggleOverview()), tr("Tab")); m_toggle_overview_action->setCheckable(true); m_toggle_overview_action->setEnabled(false); connect(m_board, &Board::overviewToggled, m_toggle_overview_action, &QAction::setChecked); menu->addSeparator(); QAction* fullscreen_action = menu->addAction(tr("F&ullscreen")); connect(fullscreen_action, &QAction::toggled, this, &Window::setFullScreen); fullscreen_action->setCheckable(true); #if !defined(Q_OS_MAC) fullscreen_action->setShortcut(tr("F11")); #else fullscreen_action->setShortcut(tr("Ctrl+F")); #endif menu = menuBar()->addMenu(tr("&Settings")); menu->addAction(tr("&Appearance..."), this, SLOT(showAppearance())); menu->addAction(tr("&Language..."), this, SLOT(setLocale())); menu = menuBar()->addMenu(tr("&Help")); menu->addAction(tr("&Controls"), this, SLOT(showControls()), QKeySequence::HelpContents); menu->addSeparator(); QAction* about_action = menu->addAction(tr("&About"), this, SLOT(showAbout())); about_action->setMenuRole(QAction::AboutRole); QAction* about_qt_action = menu->addAction(tr("About &Qt"), qApp, SLOT(aboutQt())); about_qt_action->setMenuRole(QAction::AboutQtRole); // Restore geometry QSettings settings; if (settings.contains("Geometry")) { restoreGeometry(settings.value("Geometry").toByteArray()); } else { resize(settings.value("Size", QSize(1024, 768)).toSize()); settings.remove("Size"); } // Start or load a game show(); chooseGame(files); // Create auto-save timer QTimer* timer = new QTimer(this); connect(timer, &QTimer::timeout, m_board, &Board::saveGame); timer->start(300000); } //----------------------------------------------------------------------------- void Window::addImages(const QStringList& files) { chooseGame(files); } //----------------------------------------------------------------------------- void Window::changeEvent(QEvent* event) { if (event->type() == QEvent::WindowStateChange) { m_board->update(); } return QMainWindow::changeEvent(event); } //----------------------------------------------------------------------------- void Window::closeEvent(QCloseEvent* event) { QSettings().setValue("Geometry", saveGeometry()); m_board->saveGame(); QMainWindow::closeEvent(event); } //----------------------------------------------------------------------------- void Window::dragEnterEvent(QDragEnterEvent* event) { AddImage::dragEnterEvent(event); } //----------------------------------------------------------------------------- void Window::dropEvent(QDropEvent* event) { QStringList files = AddImage::dropEvent(event); if (!files.isEmpty()) { chooseGame(files); } } //----------------------------------------------------------------------------- void Window::chooseGame(const QStringList& files) { m_board->saveGame(); ChooseGameDialog dialog(files, m_board->id(), this); connect(&dialog, &ChooseGameDialog::newGame, m_board, &Board::newGame); connect(&dialog, &ChooseGameDialog::openGame, m_board, &Board::openGame); if (dialog.exec() == QDialog::Accepted) { m_toggle_overview_action->setEnabled(true); m_zoom_fit_action->setEnabled(true); m_slider->show(); m_completed->show(); } } //----------------------------------------------------------------------------- void Window::gameFinished() { m_toggle_overview_action->setEnabled(false); } //----------------------------------------------------------------------------- void Window::setFullScreen(bool enable) { if (enable) { showFullScreen(); } else { showNormal(); } } //----------------------------------------------------------------------------- void Window::setLocale() { LocaleDialog dialog(this); dialog.exec(); } //----------------------------------------------------------------------------- void Window::showAppearance() { AppearanceDialog dialog(this); if (dialog.exec() == QDialog::Accepted) { m_board->setAppearance(dialog); } } //----------------------------------------------------------------------------- void Window::showControls() { QDialog dialog(this); dialog.setWindowTitle(tr("Controls")); QGridLayout* layout = new QGridLayout(&dialog); layout->setContentsMargins(12, 12, 12, 12); layout->setSpacing(0); layout->setColumnMinimumWidth(1, 6); layout->setRowMinimumHeight(7, 12); layout->addWidget(new QLabel(tr("Pick Up Pieces:"), &dialog), 0, 0, Qt::AlignRight | Qt::AlignVCenter); layout->addWidget(new QLabel(tr("Left Click or Space"), &dialog), 0, 2, Qt::AlignLeft | Qt::AlignVCenter); layout->addWidget(new QLabel(tr("Drop Pieces:"), &dialog), 1, 0, Qt::AlignRight | Qt::AlignVCenter); layout->addWidget(new QLabel(tr("Left Click or Space"), &dialog), 1, 2, Qt::AlignLeft | Qt::AlignVCenter); layout->addWidget(new QLabel(tr("Select Pieces:"), &dialog), 2, 0, Qt::AlignRight | Qt::AlignVCenter); layout->addWidget(new QLabel(tr("Left Drag"), &dialog), 2, 2, Qt::AlignLeft | Qt::AlignVCenter); layout->addWidget(new QLabel(tr("Rotate Pieces:"), &dialog), 3, 0, Qt::AlignRight | Qt::AlignVCenter); layout->addWidget(new QLabel(tr("Right Click, Control + Left Click, or R"), &dialog), 3, 2, Qt::AlignLeft | Qt::AlignVCenter); layout->addWidget(new QLabel(tr("Drag Puzzle:"), &dialog), 4, 0, Qt::AlignRight | Qt::AlignVCenter); layout->addWidget(new QLabel(tr("Middle Click, Shift + Left Click, or Arrows"), &dialog), 4, 2, Qt::AlignLeft | Qt::AlignVCenter); layout->addWidget(new QLabel(tr("Zoom Puzzle:"), &dialog), 5, 0, Qt::AlignRight | Qt::AlignVCenter); layout->addWidget(new QLabel(tr("Scrollwheel or +/-"), &dialog), 5, 2, Qt::AlignLeft | Qt::AlignVCenter); layout->addWidget(new QLabel(tr("Move Cursor:"), &dialog), 6, 0, Qt::AlignRight | Qt::AlignVCenter); layout->addWidget(new QLabel(tr("Move mouse or W,A,D,S"), &dialog), 6, 2, Qt::AlignLeft | Qt::AlignVCenter); QDialogButtonBox* buttons = new QDialogButtonBox(QDialogButtonBox::Close, Qt::Horizontal, &dialog); connect(buttons, SIGNAL(rejected()), &dialog, SLOT(reject())); layout->addWidget(buttons, 8, 0, 1, 3); dialog.exec(); } //----------------------------------------------------------------------------- void Window::showAbout() { QMessageBox::about(this, tr("About Tetzle"), QString("

%1 %2
%3
%4
%5

") .arg(tr("Tetzle"), QCoreApplication::applicationVersion(), tr("A jigsaw puzzle with tetrominoes for pieces"), tr("Copyright © 2008-%1 Graeme Gott").arg("2019"), tr("Released under the GPL 3 license").arg("\"http://www.gnu.org/licenses/gpl.html\"")) ); } //----------------------------------------------------------------------------- tetzle-2.1.5+dfsg1/tetzle.pro0000644000175000017500000000603413522554645016263 0ustar jonathanjonathanlessThan(QT_MAJOR_VERSION, 5) { error("Tetzle requires Qt 5.9 or greater") } equals(QT_MAJOR_VERSION, 5):lessThan(QT_MINOR_VERSION, 9) { error("Tetzle requires Qt 5.9 or greater") } TEMPLATE = app QT += widgets macx { QMAKE_INFO_PLIST = data/mac/Info.plist } CONFIG += c++11 CONFIG(debug, debug|release) { CONFIG += warn_on DEFINES += QT_DEPRECATED_WARNINGS DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x051300 DEFINES += QT_NO_NARROWING_CONVERSIONS_IN_CONNECT } # Allow in-tree builds !win32 { MOC_DIR = build OBJECTS_DIR = build RCC_DIR = build } # Set program version VERSION = 2.1.5 DEFINES += VERSIONSTR=\\\"$${VERSION}\\\" # Set program name unix: !macx { TARGET = tetzle } else { TARGET = Tetzle } # Specify program sources HEADERS = src/add_image.h \ src/appearance_dialog.h \ src/board.h \ src/choose_game_dialog.h \ src/color_button.h \ src/dancing_links.h \ src/generator.h \ src/graphics_layer.h \ src/image_properties_dialog.h \ src/locale_dialog.h \ src/message.h \ src/new_game_tab.h \ src/open_game_tab.h \ src/overview.h \ src/path.h \ src/piece.h \ src/tile.h \ src/tag_manager.h \ src/thumbnail_delegate.h \ src/thumbnail_loader.h \ src/toolbar_list.h \ src/window.h \ src/zoom_slider.h SOURCES = src/add_image.cpp \ src/appearance_dialog.cpp \ src/board.cpp \ src/choose_game_dialog.cpp \ src/color_button.cpp \ src/dancing_links.cpp \ src/generator.cpp \ src/graphics_layer.cpp \ src/image_properties_dialog.cpp \ src/locale_dialog.cpp \ src/main.cpp \ src/message.cpp \ src/new_game_tab.cpp \ src/open_game_tab.cpp \ src/overview.cpp \ src/path.cpp \ src/piece.cpp \ src/tile.cpp \ src/tag_manager.cpp \ src/thumbnail_delegate.cpp \ src/thumbnail_loader.cpp \ src/toolbar_list.cpp \ src/window.cpp \ src/zoom_slider.cpp # Generate translations TRANSLATIONS = $$files(translations/tetzle_*.ts) qtPrepareTool(LRELEASE, lrelease) updateqm.input = TRANSLATIONS updateqm.output = ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}.qm updateqm.commands = $$LRELEASE -silent ${QMAKE_FILE_IN} -qm ${QMAKE_FILE_OUT} updateqm.CONFIG += no_link target_predeps QMAKE_EXTRA_COMPILERS += updateqm # Install program data RESOURCES = data/data.qrc icons/icon.qrc macx { ICON = icons/tetzle.icns } else:win32 { RC_ICONS = icons/tetzle.ico QMAKE_TARGET_DESCRIPTION = "Jigsaw puzzle game" QMAKE_TARGET_COPYRIGHT = "Copyright (C) 2019 Graeme Gott" } else:unix { isEmpty(PREFIX) { PREFIX = /usr/local } isEmpty(BINDIR) { BINDIR = bin } target.path = $$PREFIX/$$BINDIR/ icon.files = icons/hicolor/* icon.path = $$PREFIX/share/icons/hicolor/ pixmap.files = icons/tetzle.xpm pixmap.path = $$PREFIX/share/pixmaps/ desktop.files = data/unix/tetzle.desktop desktop.path = $$PREFIX/share/applications/ appdata.files = data/unix/tetzle.appdata.xml appdata.path = $$PREFIX/share/metainfo/ qm.files = $$replace(TRANSLATIONS, .ts, .qm) qm.path = $$PREFIX/share/tetzle/translations/ qm.CONFIG += no_check_exist man.files = doc/tetzle.6 man.path = $$PREFIX/share/man/man6 INSTALLS += target icon pixmap desktop appdata qm man } tetzle-2.1.5+dfsg1/translations/0000755000175000017500000000000013522554645016750 5ustar jonathanjonathantetzle-2.1.5+dfsg1/translations/tetzle_de.ts0000644000175000017500000003310613522554645021302 0ustar jonathanjonathan AddImage Open Image Bild auswählen AppearanceDialog Appearance Erscheinungsbild Options Optionen Beveled borders Abgeschrägte Kanten Drop shadows Schlagschatten Colors Farben Background: Hintergrund: Shadow: Schatten: Highlight: Hervorgehoben: Board Error Fehler Missing image. Bild nicht gefunden. Please Wait Bitte warten Loading image... Bild wird geladen ... Generating puzzle... Puzzle wird erzeugt ... Creating pieces... Teile werden erzeugt ... Loading puzzle... Puzzle wird geladen ... Unknown data format Unbekanntes Dateiformat Unknown element '%1' Unbekanntes Element '%1' Error parsing XML file. %1 Fehler beim Parsen der XML-Datei. %1 Loading pieces... Teile werden geladen ... Retrieving pieces... Teile werden geholt ... Placing pieces... Teile werden gelegt ... Success Fertiggestellt ChooseGameDialog Choose Game Spiel auswählen Current Games Aktuelle Spiele New Game Neues Spiel ImagePropertiesDialog Image Properties Bildeigenschaften Name: Name: Tags: Tags: LocaleDialog Select application language: Anwendungssprache auswählen: <System Language> <Systemeinstellung> Note Hinweis Please restart this application for the change in language to take effect. Bitte starten Sie diese Anwendung neu um den Wechsel der Sprache auszuführen. NewGameTab Add Image Bild hinzufügen Remove Image Bild entfernen Image Properties Bildeigenschaften %L1 pieces %L1 Teile Copying images... Bilder werden kopiert ... Cancel Abbrechen Remove selected image? Ausgewähltes Bild entfernen? Remove selected image? There are saved games using this image that will also be removed. Ausgewähltes Bild entfernen? Es existieren gespeicherte Spiele, die dieses Bild benutzen und die ebenfalls gelöscht werden. Untitled Unbenannt OpenGameTab Untitled Unbenannt %L1 pieces %2 %3% complete %L1 Teile %2 %3% fertiggestellt Delete Löschen Delete Game Spiel löschen Delete selected game? Ausgewähltes Spiel löschen? Overview Overview Übersicht TagManager Add Tag Tag hinzufügen Remove Tag Tag löschen Untagged Nicht getaggt All Images Alle Bilder Untitled %1 Unbenannt %1 Question Frage Remove selected tag? Ausgewähltes Tag löschen? Sorry Sorry A tag with that name already exists. Ein Tag mit diesem Namen existiert bereits. Window Tetzle Tetzle &Game &Spiel &Retrieve Pieces &Teile holen Ctrl+R Ctrl+T &Quit &Beenden &Choose... &Auswählen ... &View &Ansicht Zoom &In Ver&größern + + Zoom &Out Ver&kleinern - - Best &Fit In Fenster &einpassen Show O&verview Ü&bersicht zeigen Tab Tab F&ullscreen &Vollbild F11 F11 Ctrl+F Ctrl+F &Settings &Einstellungen &Appearance... &Erscheinungsbild ... &Language... &Sprache ... &Help &Hilfe &Controls &Steuerung &About Ü&ber About &Qt Über &Qt Controls Steuerung <b>Pick Up Pieces:</b> <b>Teile aufnehmen:</b> Left Click or Space Linksklick oder Leertaste <b>Drop Pieces:</b> <b>Teile ablegen:</b> <b>Select Pieces:</b> <b>Teile auswählen:</b> Left Drag Ziehen mit linker Maustaste <b>Rotate Pieces:</b> <b>Teile drehen:</b> Right Click, Control + Left Click, or R Rechtsklick, Strg + Linksklick, oder R <b>Drag Puzzle:</b> <b>Puzzle verschieben:</b> Middle Click, Shift + Left Click, or Arrows Mittelklick, Umschalt + Linksklick, oder Pfeiltasten <b>Zoom Puzzle:</b> <b>Puzzlegröße ändern:</b> Scrollwheel or +/- Mausrad oder +/- <b>Move Cursor:</b> <b>Zeiger bewegen:</b> Move mouse or W,A,D,S Maus bewegen oder W, A, D, S About Tetzle Über Tetzle A jigsaw puzzle with tetrominoes for pieces Ein Puzzlespiel mit Tetrominos als Puzzleteilen Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license Veröffentlicht unter der <a href=%1>GPL-3</a>-Lizenz ZoomSlider ??% ??% %1% %1% main Select OpenGL version. OpenGL-Version auswählen. version Version tetzle-2.1.5+dfsg1/translations/tetzle_cs.ts0000644000175000017500000003313713522554645021323 0ustar jonathanjonathan AddImage Open Image Otevřít obrázek AppearanceDialog Appearance Vzhled Options Možnosti Beveled borders Zkosené okraje Drop shadows Stíny Colors Barvy Background: Pozadí: Shadow: Stín: Highlight: Zvýraznění: Board Error Chyba Missing image. Chybějící obrázek. Please Wait Prosím čekejte Loading image... Nahrávání obrázku… Generating puzzle... Vytváření skládanky… Creating pieces... Vytváření dílů… Loading puzzle... Nahrávání skládanky… Unknown data format Neznámý formát dat Unknown element '%1' Neznámý prvek „%1“ Error parsing XML file. %1 Chyba při parsování XML souboru %1 Loading pieces... Nahrávání dílů… Retrieving pieces... Shromažďování dílů… Placing pieces... Rozmisťování dílů… Success Úspěch ChooseGameDialog Choose Game Vybrat hru Current Games Rozehrané hry New Game Nová hra ImagePropertiesDialog Image Properties Vlastnosti obrázku Name: jméno: Tags: Štítky: LocaleDialog Select application language: Vyberte jazyk aplikace: <System Language> Systémový jazyk Note Poznámka Please restart this application for the change in language to take effect. Pro uplatnění změn v nastavení jazyka prosím ukončete a znovu spusťte aplikaci. NewGameTab Add Image Přidat obrázek Remove Image Odstranit obrázek Image Properties Vlastnosti obrázku %L1 pieces %L1 dílů Copying images... Kopírování obrázků… Cancel Zrušit Remove selected image? Odstranit vybraný obrázek? Remove selected image? There are saved games using this image that will also be removed. Odstranit vybraný obrázek? Některé z rozehraných her používají tento obrázek, odstraníte-li jej, budou taktéž odstraněny. Untitled Nepojmenovaný OpenGameTab Untitled Nepojmenovaný %L1 pieces %2 %3% complete %L1 dílů %2 %3% dokončeno Delete Smazat Delete Game Smazat hru Delete selected game? Smazat vybranou hru? Overview Overview Náhled TagManager Add Tag Přidat štítek Remove Tag Odstranit štítek Untagged Bez štítku All Images Všechny obrázky Untitled %1 Nepojmenovaný %1 Question Otázka Remove selected tag? Odstranit vybrané štítky? Sorry Je nám líto A tag with that name already exists. Štítek s tímto jménem již existuje. Window Tetzle Tetzle &Game &Hra &Retrieve Pieces &Shromáždit díly Ctrl+R Ctrl+R &Quit &Ukončit &Choose... &Vybrat… &View &Zobrazit Zoom &In &Přiblížit + + Zoom &Out &Oddálit - - Best &Fit O&ptimální zobrazení Show O&verview &Zobrazit náhled Tab Tab F&ullscreen &Celá obrazovka F11 F11 Ctrl+F Ctrl+F &Settings &Nastavení &Appearance... &Vzhled… &Language... &Jazyk… &Help &Nápověda &Controls &Ovládání &About &O aplikaci About &Qt &O Qt Controls Ovládání <b>Pick Up Pieces:</b> <b>Sebrání dílů:</b> Left Click or Space Levé tlačítko nebo mezerník <b>Drop Pieces:</b> <b>Položení dílů:</b> <b>Select Pieces:</b> <b>Výběr dílů:</b> Left Drag Tažení levým tlačítkem <b>Rotate Pieces:</b> <b>Pootočení dílů:</b> Right Click, Control + Left Click, or R Pravé tlačítko, Ctrl + Levé tlačítko, nebo R <b>Drag Puzzle:</b> <b>Přetažení skládanky:</b> Middle Click, Shift + Left Click, or Arrows Prostřední tlačítko, Shift + Levé tlačítko, nebo šipky <b>Zoom Puzzle:</b> <b>Úroveň přiblížení skládanky:</b> Scrollwheel or +/- Kolečko myši nebo +/- <b>Move Cursor:</b> <b>Pohyb kurzoru:</b> Move mouse or W,A,D,S Myš nebo W, A, D, S About Tetzle O Tetzle A jigsaw puzzle with tetrominoes for pieces Skládanka s díly ve tvaru tetromina Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license Vydáno pod licencí <a href=%1>GPL 3</a> ZoomSlider ??% ??% %1% %1% main Select OpenGL version. version tetzle-2.1.5+dfsg1/translations/tetzle_lt.ts0000644000175000017500000003330013522554645021325 0ustar jonathanjonathan AddImage Open Image Atverti paveikslą AppearanceDialog Appearance Išvaizda Options Parinktys Beveled borders Nuožulnūs kraštai Drop shadows Mesti šešėlius Colors Spalvos Background: Fonas: Shadow: Šešėlis Highlight: Paryškinimas: Board Error Klaida Missing image. Trūksta paveikslo. Please Wait Prašome palaukti Loading image... Įkeliamas paveikslas... Generating puzzle... Kuriama dėlionė... Creating pieces... Kuriamos dalys... Loading puzzle... Įkeliama dėlionė... Unknown data format Nežinomas duomenų formatas Unknown element '%1' Nežinomas elementas '%1' Error parsing XML file. %1 XML failo analizės klaida. %1 Loading pieces... Įkeliamos dalys... Retrieving pieces... Gaunamos dalys... Placing pieces... Talpinamos dalys... Success Sėkmė ChooseGameDialog Choose Game Pasirinkite žaidimą Current Games Dabartiniai žaidimai New Game Naujas žaidimas ImagePropertiesDialog Image Properties Paveikslo savybės Name: Pavadinimas: Tags: Žymės: LocaleDialog Select application language: Pasirinkite programos kalbą: <System Language> <Sistemos kalba> Note Pastaba Please restart this application for the change in language to take effect. Kad įsigaliotų kalbos pakeitimai, prašome paleisti programą iš naujo. NewGameTab Add Image Pridėti paveikslą Remove Image Pašalinti paveikslą Image Properties Paveikslo savybės %L1 pieces %L1 dalių Copying images... Kopijuojami paveikslai... Cancel Atšaukti Remove selected image? Šalinti pažymėtą paveikslą? Remove selected image? There are saved games using this image that will also be removed. Šalinti pasirinktą paveikslą? Yra išsaugotų žaidimų, kurie naudoja šį paveikslą. Šie žaidimai taip pat bus pašalinti. Untitled Bevardis OpenGameTab Untitled Bevardis %L1 pieces %2 %3% complete %L1 dalių %2 %3% pabaigta Delete Ištrinti Delete Game Ištrinti žaidimą Delete selected game? Ištrinti pasirinktą žaidimą? Overview Overview Apžvalga TagManager Add Tag Pridėti žymę Remove Tag Šalinti žymę Untagged Nesužymėti All Images Visi paveikslai Untitled %1 Bevardis %1 Question Klausimas Remove selected tag? Šalinti pasirinktą žymę? Sorry Atleiskite A tag with that name already exists. Žymė tokiu pavadinimu jau yra. Window Tetzle Tetzle &Game Žai&dimas &Retrieve Pieces &Atstatyti dalis Ctrl+R Ctrl+R &Quit &Baigti &Choose... &Pasirinkti &View &Rodinys Zoom &In &Padidinti + + Zoom &Out &Sumažinti - - Best &Fit &Geriausias pritaikymas Show O&verview Ro&dyti apžvalgą Tab Tab F&ullscreen &Visas ekranas F11 F11 Ctrl+F Ctrl+F &Settings &Nustatymai &Appearance... &Išvaizda &Language... Ka&lba &Help &Pagalba &Controls &Valdymas &About &Apie About &Qt Apie &Qt Controls Valdymas <b>Pick Up Pieces:</b> <b>Pakelti dalis:</b> Left Click or Space Kairiojo mygtuko spustelėjimas arba Tarpas <b>Drop Pieces:</b> <b>Nuleisti dalis:</b> <b>Select Pieces:</b> <b>Pasirinkti dalis:</b> Left Drag Vilkti, nuspaudus kairįjį mygtuką <b>Rotate Pieces:</b> <b>Pasukti dalis:</b> Right Click, Control + Left Click, or R Dešiniojo mygtuko spustelėjimas, Control + Kairiojo mygtuko spustelėjimas, arba R <b>Drag Puzzle:</b> <b>Vilkti dėlionę:</b> Middle Click, Shift + Left Click, or Arrows Vidurinio mygtuko spustelėjimas, Shift + Kairiojo mygtuko spustelėjimas, arba Krypties klavišai <b>Zoom Puzzle:</b> <b>Padidinti dėlionę:</b> Scrollwheel or +/- Pelės ratukas arba +/- <b>Move Cursor:</b> <b>Perkelti žymeklį:</b> Move mouse or W,A,D,S Perkelti pele arba klavišais W,A,D,S About Tetzle Apie Tetzle A jigsaw puzzle with tetrominoes for pieces Dėlionė su tetromino figūromis Copyright &copy; 2008-%1 Graeme Gott Autorių Teisės &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license Išleista pagal <a href=%1>GPL 3</a> licenciją ZoomSlider ??% ??% %1% %1% main Select OpenGL version. Pasirinkite OpenGL versiją. version versija tetzle-2.1.5+dfsg1/translations/tetzle_ms.ts0000644000175000017500000003250613522554645021334 0ustar jonathanjonathan AddImage Open Image Buka Imej AppearanceDialog Appearance Penampilan Options Pilihan Beveled borders Sempadan terserong Drop shadows Bayang letak Colors Warna Background: Latar Belakang: Shadow: Bayang: Highlight: Sorot: Board Error Ralat Missing image. Imej hilang. Please Wait Tunggu Sebentar Loading image... Memuatkan imej... Generating puzzle... Menjana teka-teki... Creating pieces... Mencipta kepingan... Loading puzzle... Memuatkan teka-teki... Unknown data format Format data tidak diketahui Unknown element '%1' Unsur '%1' tidak diketahui Error parsing XML file. %1 Ralat menghurai fail. %1 Loading pieces... Memuatkan kepingan... Retrieving pieces... Mendapatkan kepingan... Placing pieces... Meletak kepingan... Success Berjaya ChooseGameDialog Choose Game Pilih Permainan Current Games Permainan Semasa New Game Permainan Baru ImagePropertiesDialog Image Properties Sifat Imej Name: Nama: Tags: Tag: LocaleDialog Select application language: Pilih bahasa aplikasi: <System Language> <Bahasa Sistem> Note Nota Please restart this application for the change in language to take effect. Sila mulakan semula aplikasi ini supaya perubahan bahasa berkesan. NewGameTab Add Image Tambah Imej Remove Image Buang Imej Image Properties Sifat Imej %L1 pieces %L1 kepingan Copying images... Menyalin imej... Cancel Batal Remove selected image? Buang imej terpilih? Remove selected image? There are saved games using this image that will also be removed. Buang imej terpilih? Terdapat permainan tersimpan menggunakan imej ini yang mana juga dibuang. Untitled Tidak Bertajuk OpenGameTab Untitled Tidak Bertajuk %L1 pieces %2 %3% complete %L1 kepingan %2 %3% selesai Delete Padam Delete Game Padam Permainan Delete selected game? Padam permainan terpilih? Overview Overview Tinjauan TagManager Add Tag Tambah Tag Remove Tag Buang Tag Untagged Dinyahtag All Images Semua Imej Untitled %1 Tidak bertajuk %1 Question Soalan Remove selected tag? Buang tag terpilih? Sorry Maaf A tag with that name already exists. Tag dengan nama tersebut sudah wujud. Window Tetzle Tetzle &Game &Permainan &Retrieve Pieces &Dapatkan Kepingan Ctrl+R Ctrl+R &Quit &Keluar &Choose... P&ilih... &View &Lihat Zoom &In Zum &Masuk + + Zoom &Out Zum &Keluar - - Best &Fit Suai M&uat Show O&verview Tunjuk T&injauan Tab Tab F&ullscreen Sk&rin Penuh F11 F11 Ctrl+F Ctrl+F &Settings &Tetapan &Appearance... P&enampilan... &Language... &Bahasa... &Help Ba&ntuan &Controls &Kawalan &About Perih&al About &Qt Perihal &Qt Controls Kawalan <b>Pick Up Pieces:</b> <b>Ambil Kepingan:</b> Left Click or Space Klik Kiri atau Space <b>Drop Pieces:</b> <b>Lepas Kepingan:</b> <b>Select Pieces:</b> <b>Pilih Kepingan:</b> Left Drag Seret Kiri <b>Rotate Pieces:</b> <b>Putar Kepingan:</b> Right Click, Control + Left Click, or R Klik Kanan, Control + Klik Kiri, atau R <b>Drag Puzzle:</b> <b>Seret Teka-teki:</b> Middle Click, Shift + Left Click, or Arrows Klik Tengah, Shift + Klik Kiri, atau Anak Panah <b>Zoom Puzzle:</b> <b>Zum Teka-teki:</b> Scrollwheel or +/- Roda Tatal atau +/- <b>Move Cursor:</b> <b>Gerak Kursor:</b> Move mouse or W,A,D,S Gerak tetikus atau About Tetzle Perihal Tetzle A jigsaw puzzle with tetrominoes for pieces Teka-teki susun suai gambar dengan tetromino untuk kepingannya Copyright &copy; 2008-%1 Graeme Gott Hakcipta &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license Dikeluarkan dibawah lesen <a href=%1>GPL 3</a> ZoomSlider ??% ??% %1% %1% main Select OpenGL version. Pilih versi OpenGL version versi tetzle-2.1.5+dfsg1/translations/tetzle_pt.ts0000644000175000017500000003311613522554645021336 0ustar jonathanjonathan AddImage Open Image Abrir Imagem AppearanceDialog Appearance Aparência: Options Opções Beveled borders Bordas arredondadas Drop shadows Sombras Colors Cores Background: Fundo: Shadow: Sombra: Highlight: Destaque: Board Error Erro Missing image. Imagem em falta Please Wait Por Favor Aguarde Loading image... A carregar imagem... Generating puzzle... A gerar o quebra-cabeças... Creating pieces... A criar as peças... Loading puzzle... A carregar o quebra-cabeças... Unknown data format Formato de dados desconhecido Unknown element '%1' Elemento desconhecido '%1' Error parsing XML file. %1 Surgiu um erro ao processar o ficheiro XML. %1 Loading pieces... A carregar as peças... Retrieving pieces... A obter as peças... Placing pieces... A colocar as peças... Success Sucesso ChooseGameDialog Choose Game Escolha o Jogo Current Games Jogos Atuais New Game Novo Jogo ImagePropertiesDialog Image Properties Propriedades da Imagem Name: Nome: Tags: Etiquetas: LocaleDialog Select application language: Selecione o idioma da aplicação: <System Language> <Idioma do Sistema> Note Nota Please restart this application for the change in language to take effect. Por favor reinicie esta aplicação para que a alteração do idioma surta efeito. NewGameTab Add Image Adicionar Imagem Remove Image Remover Imagem Image Properties Propriedades da Imagem %L1 pieces %L1 peças Copying images... A copiar as imagens... Cancel Cancelar Remove selected image? Remover a imagem selecionada? Remove selected image? There are saved games using this image that will also be removed. Remover a imagem selecionada? Existem jogos guardados que usam esta imagem, por isso serão também removidos. Untitled Sem título OpenGameTab Untitled Sem título %L1 pieces %2 %3% complete %L1 peças %2 %3% completado Delete Eliminar Delete Game Eliminar Jogo Delete selected game? Eliminar o jogo selecionado? Overview Overview Vista geral TagManager Add Tag Adicionar Etiqueta Remove Tag Remover Etiqueta Untagged Sem Etiquetas All Images Todas as Imagens Untitled %1 Sem título %1 Question Questão Remove selected tag? Remover etiqueta selecionada? Sorry Desculpe A tag with that name already exists. Já existe uma etiqueta com esse nome. Window Tetzle Tetzle &Game &Jogo &Retrieve Pieces &Recuperar Peças Ctrl+R Ctrl+R &Quit &Sair &Choose... &Escolher Jogo... &View &Visualização Zoom &In A&proximar + + Zoom &Out A&fastar - - Best &Fit &Melhor Enquadramento Show O&verview Mostrar &Vista Geral Tab Tab F&ullscreen Ecrã &Inteiro F11 F11 Ctrl+F Ctrl+F &Settings &Configurações &Appearance... &Aparência... &Language... &Idioma... &Help &Ajuda &Controls &Controlos &About S&obre About &Qt Sobre o &Qt Controls Controlos <b>Pick Up Pieces:</b> <b>Pegar nas Peças:</b> Left Click or Space Clique Esquerdo ou Tecla de Espaço <b>Drop Pieces:</b> <b>Largar Peças:</b> <b>Select Pieces:</b> <b>Selecionar Peças:</b> Left Drag Arrastar Esquerdo <b>Rotate Pieces:</b> <b>Rodar Peças:</b> Right Click, Control + Left Click, or R Clique Direito, Ctrl+Clique Esquerdo, ou R <b>Drag Puzzle:</b> <b>Arrastar Quebra-Cabeças:</b> Middle Click, Shift + Left Click, or Arrows Clique do Meio, Shift+Clique Esquerdo, ou teclas de Direção <b>Zoom Puzzle:</b> <b>Magnificação:</b> Scrollwheel or +/- Roda do rato ou +/- <b>Move Cursor:</b> <b>Mover Cursor:</b> Move mouse or W,A,D,S Mover rato ou teclas W,A,D,S About Tetzle Sobre o Tetzle A jigsaw puzzle with tetrominoes for pieces Um quebra-cabeça com peças tetraminós Copyright &copy; 2008-%1 Graeme Gott Direitos de autor &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license Lançado sob a licença <a href=%1>GPL 3</a> ZoomSlider ??% ??% %1% %1% main Select OpenGL version. Selecionar verão OpenGL. version versão tetzle-2.1.5+dfsg1/translations/tetzle_nl.ts0000644000175000017500000003315013522554645021322 0ustar jonathanjonathan AddImage Open Image Afbeelding openen AppearanceDialog Appearance Weergave Options Opties Beveled borders Afgeschuinde randen Drop shadows Slagschaduwen Colors Kleuren Background: Achtergrond: Shadow: Schaduw: Highlight: Markering: Board Error Fout Missing image. Ontbrekende afbeelding. Please Wait Even geduld Loading image... Bezig met laden van afbeelding... Generating puzzle... Bezig met genereren van puzzel... Creating pieces... Bezig met creëren van stukken... Loading puzzle... Bezig met laden van puzzel... Unknown data format Onbekend gegevensformaat Unknown element '%1' Onbekend element '%1' Error parsing XML file. %1 Fout tijdens inlezen van XML-bestand. %1 Loading pieces... Bezig met laden van stukken... Retrieving pieces... Bezig met ophalen van stukken... Placing pieces... Bezig met plaatsen van stukken... Success Voltooid ChooseGameDialog Choose Game Kies spel Current Games Huidige spellen New Game Nieuw spel ImagePropertiesDialog Image Properties Afbeeldingseigenschappen Name: Naam: Tags: Labels: LocaleDialog Select application language: Selecteer de applicatietaal: <System Language> <System Language> Note Opmerking Please restart this application for the change in language to take effect. Herstart de applicatie om de taalwijziging toe te passen. NewGameTab Add Image Afbeelding toevoegen Remove Image Afbeelding verwijderen Image Properties Afbeeldingseigenschappen %L1 pieces %L1 stukken Copying images... Bezig met kopiëren van afbeeldingen... Cancel Annuleren Remove selected image? Geselecteerde afbeelding verwijderen? Remove selected image? There are saved games using this image that will also be removed. Geselecteerde afbeelding verwijderen? De opgeslagen spellen die deze afbeelding gebruiken worden ook verwijderd. Untitled Naamloos OpenGameTab Untitled Naamloos %L1 pieces %2 %3% complete %L1 stukken %2 %3% klaar Delete Verwijderen Delete Game Spel verwijderen Delete selected game? Geselecteerd spel verwijderen? Overview Overview Overzicht TagManager Add Tag Label toevoegen Remove Tag Label verwijderen Untagged Ongelabeld All Images Alle afbeeldingen Untitled %1 Naamloos %1 Question Vraag Remove selected tag? Geselecteerd label verwijderen? Sorry Sorry A tag with that name already exists. Er bestaat al een label met die naam. Window Tetzle Tetzle &Game &Spel &Retrieve Pieces &Stukken ophalen Ctrl+R Ctrl+R &Quit &Afsluiten &Choose... &Kiezen... &View &Beeld Zoom &In &Inzoomen + + Zoom &Out &Uitzoomen - - Best &Fit &Beste inpassing Show O&verview O&verzicht weergeven Tab Tab F&ullscreen &Volledig scherm F11 F11 Ctrl+F Ctrl+F &Settings In&stellingen &Appearance... Weerg&ave... &Language... Taa&l... &Help &Hulp &Controls &Besturing &About &Over About &Qt Over &Qt Controls Besturing <b>Pick Up Pieces:</b> <b>Stukken oppakken:</b> Left Click or Space Linkermuisklik of spatiebalk <b>Drop Pieces:</b> <b>Stukken plaatsen:</b> <b>Select Pieces:</b> <b>Stukken selecteren:</b> Left Drag Links slepen <b>Rotate Pieces:</b> <b>Stukken draaien:</b> Right Click, Control + Left Click, or R Rechtermuisklik, Control + linkermuisklik of R <b>Drag Puzzle:</b> <b>Puzzel verslepen:</b> Middle Click, Shift + Left Click, or Arrows Middelste muisklik, Shift + linkermuisklik of pijltjestoetsen <b>Zoom Puzzle:</b> <b>Puzzel in-/uitzoomen:</b> Scrollwheel or +/- Scrolwiel of +/- <b>Move Cursor:</b> <b>Cursor verplaatsen:</b> Move mouse or W,A,D,S Muis verplaatsen of W,A,D,S About Tetzle Over Tetzle A jigsaw puzzle with tetrominoes for pieces Een legpuzzel met tetrominovormige stukken Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license Uitgegeven onder de <a href=%1>GPL 3</a>-licentie ZoomSlider ??% ??% %1% %1% main Select OpenGL version. Selecteer OpenGL-versie. version versie tetzle-2.1.5+dfsg1/translations/tetzle_uk_UA.ts0000644000175000017500000003502213522554645021715 0ustar jonathanjonathan AddImage Open Image Відкрити зображення AppearanceDialog Appearance Вигляд Options Параметри Beveled borders Скісні краї Drop shadows Різкі тіні Colors Колір Background: Фон: Shadow: Тінь: Highlight: Підсвічування: Board Error Помилка Missing image. Зображення немає. Please Wait Будь ласка, зачекайте Loading image... Завантаження зображення... Generating puzzle... Генерування пазлу... Creating pieces... Створення елементів... Loading puzzle... Завантаження пазлу... Unknown data format Невідомий формат даних Unknown element '%1' Невідомий елемент '%1' Error parsing XML file. %1 Помилка аналізу XML-файла. %1 Loading pieces... Завантаження елементів... Retrieving pieces... Отримання елементів... Placing pieces... Розташування елементів... Success Успішно ChooseGameDialog Choose Game Вибрати гру Current Games Поточні ігри New Game Нова гра ImagePropertiesDialog Image Properties Властивості зображення Name: Назва: Tags: Мітки: LocaleDialog Select application language: Вибрати мову програми: <System Language> <Системна мова> Note Нотатка Please restart this application for the change in language to take effect. Перезапустіть програму, щоб зміна мови набула сили. NewGameTab Add Image Додати зображення Remove Image Вилучити зображення Image Properties Властивості зображення %L1 pieces %L1 елементів Copying images... Копіювання зображень... Cancel Скасувати Remove selected image? Вилучити вибране зображення? Remove selected image? There are saved games using this image that will also be removed. Вилучити вибране зображення? Є збережені ігри з таким зображенням, що також будуть вилучені. Untitled Без назви OpenGameTab Untitled Без назви %L1 pieces %2 %3% complete %L1 елементів %2 %3% завершено Delete Вилучити Delete Game Вилучити гру Delete selected game? Вилучити вибрану гру? Overview Overview Огляд TagManager Add Tag Додати мітку Remove Tag Видалити мітку Untagged Без мітки All Images Всі зображення Untitled %1 Без назви %1 Question Запит Remove selected tag? Вилучити вибрану мітку? Sorry На жаль A tag with that name already exists. Мітка з такою назвою вже є. Window Tetzle Tetzle &Game &Гра &Retrieve Pieces &Отримати елементи Ctrl+R Ctrl+R &Quit &Вийти &Choose... &Вибрати... &View &Вигляд Zoom &In &Збільшити + + Zoom &Out Зм&еншити - - Best &Fit Найкращий &добір Show O&verview Показати о&гляд Tab Tab F&ullscreen На по&вний екран F11 F11 Ctrl+F Ctrl+F &Settings &Налаштування &Appearance... &Вигляд... &Language... &Мова... &Help &Довідка &Controls &Керування &About Пр&о гру About &Qt Про &Qt Controls Керування <b>Pick Up Pieces:</b> <b>Підняти елементи:</b> Left Click or Space Ліва кнопка миші або пробіл <b>Drop Pieces:</b> <b>Опустити елементи:</b> <b>Select Pieces:</b> <b>Вибрати елементи:</b> Left Drag Ліве перетягування <b>Rotate Pieces:</b> <b>Обернути елементи:</b> Right Click, Control + Left Click, or R Права кнопка миші, Ctrl + ліва кнопка або R <b>Drag Puzzle:</b> <b>Перетягти пазл:</b> Middle Click, Shift + Left Click, or Arrows Середня кнопка, Shift + ліва кнопка або стрілки <b>Zoom Puzzle:</b> <b>Масштабувати пазл:</b> Scrollwheel or +/- Колесо миші або +/- <b>Move Cursor:</b> <b>Перемістити курсор:</b> Move mouse or W,A,D,S Перемістити мишу або W, A, D, S About Tetzle A jigsaw puzzle with tetrominoes for pieces Copyright &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license ZoomSlider ??% ??% %1% %1% main Select OpenGL version. version tetzle-2.1.5+dfsg1/translations/tetzle_ro.ts0000644000175000017500000003275513522554645021343 0ustar jonathanjonathan AddImage Open Image Deschide imagine AppearanceDialog Appearance Aspect Options Opţiuni Beveled borders Margini teşite Drop shadows Umbrire Colors Culori Background: Fundal: Shadow: Umbre: Highlight: Evidenţiere: Board Error Eroare Missing image. Lipseşte imagine. Please Wait Vă rugăm aşteptaţi Loading image... Încărcare imagine... Generating puzzle... Generare puzzle... Creating pieces... Creare piese... Loading puzzle... Încărcare puzzle... Unknown data format Format date necunoscut Unknown element '%1' Element necunoscut '%1' Error parsing XML file. %1 Eroare la analizarea fişierului XML. %1 Loading pieces... Încărcare piese... Retrieving pieces... Preluare piese... Placing pieces... Plasare piese... Success Succes ChooseGameDialog Choose Game Alegere joc Current Games Joc curent New Game Joc nou ImagePropertiesDialog Image Properties Proprietăţi imagine Name: Nume: Tags: Etichete: LocaleDialog Select application language: Selectaţi limba aplicaţiei: <System Language> <Limbaj Sistem> Note Notă Please restart this application for the change in language to take effect. Vă rugăm reporniţi această aplicaţie pentru ca schimbarea limbii să aibă efect. NewGameTab Add Image Adăugare imagine Remove Image Eliminare imagine Image Properties Proprietăţi imagine %L1 pieces %L1 piese Copying images... Copiere imagini... Cancel Anulare Remove selected image? Eliminaţi imaginea selectată? Remove selected image? There are saved games using this image that will also be removed. Eliminaţi imaginea selectată? Există jocuri salvate care folosesc această imagine, care vor fi, de asemenea, eliminate. Untitled FărăTitlu OpenGameTab Untitled FărăTitlu %L1 pieces %2 %3% complete %L1 piese %2 %3% completat Delete Ştergere Delete Game Ştergere joc Delete selected game? Şterge jocul selectat? Overview Overview Imagine de ansamblu TagManager Add Tag Adăugare etichetă Remove Tag Eliminare etichetă Untagged Neetichetat All Images Toate imaginile Untitled %1 FărăTitlu %1 Question Întrebare Remove selected tag? Elimină eticheta selectată? Sorry Scuze A tag with that name already exists. O etichetă cu acel nume deja există. Window Tetzle Tetzle &Game &Joc &Retrieve Pieces P&reluare piese Ctrl+R Ctrl+R &Quit &Ieşire &Choose... Alegeţi... &View &Vizualizare Zoom &In &Mărire + + Zoom &Out M&icşorare - - Best &Fit Cel mai potrivit Show O&verview Arată imagine de ansamblu Tab Tab F&ullscreen &Tot ecranul F11 F11 Ctrl+F Ctrl+F &Settings &Setări &Appearance... &Aspect... &Language... &Limbă... &Help &Ajutor &Controls &Controale &About &Despre About &Qt Despre &Qt Controls Controale <b>Pick Up Pieces:</b> <b>Piese ridicate:</b> Left Click or Space Clic stînga sau spaţiu <b>Drop Pieces:</b> <b>Piese coborîte:</b> <b>Select Pieces:</b> <b>Selectare piese:</b> Left Drag Glisare stînga <b>Rotate Pieces:</b> <b>Rotire piese:</b> Right Click, Control + Left Click, or R Clic dreapta, Control + Clic stînga, sau R <b>Drag Puzzle:</b> <b>Glisare puzzle:</b> Middle Click, Shift + Left Click, or Arrows Clic mijloc, Shift + Clic stînga, sau Săgeţi <b>Zoom Puzzle:</b> <b>Mărire puzzle:</b> Scrollwheel or +/- Rotiţa de derulare or +/- <b>Move Cursor:</b> <b>Mutare cursor:</b> Move mouse or W,A,D,S Mutare mouse sau W,A,D,S About Tetzle Despre Tetzle A jigsaw puzzle with tetrominoes for pieces Un puzzle cu tetromino-uri pentru piese Copyright &copy; 2008-%1 Graeme Gott Toate drepturile rezervate &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license Lansat sub licenţă <a href=%1>GPL 3</a> ZoomSlider ??% ??% %1% %1% main Select OpenGL version. Selectaţi versiunea OpenGL. version versiunea tetzle-2.1.5+dfsg1/translations/tetzle_zh.ts0000644000175000017500000003231013522554645021327 0ustar jonathanjonathan AddImage Open Image AppearanceDialog Appearance Options Beveled borders Drop shadows Colors Background: Shadow: Highlight: Board Error Missing image. Please Wait Loading image... Generating puzzle... Creating pieces... Loading puzzle... Unknown data format Unknown element '%1' Error parsing XML file. %1 Loading pieces... Retrieving pieces... Placing pieces... Success ChooseGameDialog Choose Game Current Games New Game ImagePropertiesDialog Image Properties Name: Tags: LocaleDialog Select application language: <System Language> <系统语言> Note 提示 Please restart this application for the change in language to take effect. NewGameTab Add Image Remove Image Image Properties %L1 pieces Copying images... Cancel 取消 Remove selected image? Remove selected image? There are saved games using this image that will also be removed. Untitled OpenGameTab Untitled %L1 pieces %2 %3% complete Delete Delete Game Delete selected game? Overview Overview TagManager Add Tag Remove Tag Untagged All Images Untitled %1 Question Remove selected tag? Sorry A tag with that name already exists. Window Tetzle Tetzle &Game &Retrieve Pieces Ctrl+R Ctrl+R &Quit &Choose... &View Zoom &In 缩 &小 + + Zoom &Out 放 &大 - - Best &Fit Show O&verview Tab Tab F&ullscreen 全&屏 F11 F11 Ctrl+F Ctrl+F &Settings &设置 &Appearance... &Language... &Help &帮助 &Controls &控制 &About &关于 About &Qt 关于 &Qt Controls 控制 <b>Pick Up Pieces:</b> Left Click or Space <b>Drop Pieces:</b> <b>Select Pieces:</b> Left Drag <b>Rotate Pieces:</b> Right Click, Control + Left Click, or R <b>Drag Puzzle:</b> Middle Click, Shift + Left Click, or Arrows <b>Zoom Puzzle:</b> Scrollwheel or +/- <b>Move Cursor:</b> Move mouse or W,A,D,S About Tetzle 关于 Tetzle A jigsaw puzzle with tetrominoes for pieces Copyright &copy; 2008-%1 Graeme Gott 版权所有 &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license 基于 <a href=%1>GPL 3</a> 协议发布 ZoomSlider ??% ??% %1% %1% main Select OpenGL version. 选择 OpenGL 版本。 version 版本 tetzle-2.1.5+dfsg1/translations/tetzle_lv.ts0000644000175000017500000003246113522554645021336 0ustar jonathanjonathan AddImage Open Image Atvērt attēlu AppearanceDialog Appearance Izskats Options Beveled borders Drop shadows Colors Krāsas Background: Fons: Shadow: Ēna: Highlight: Board Error Kļūda Missing image. Please Wait Lūdzu, uzgaidiet Loading image... Generating puzzle... Creating pieces... Loading puzzle... Unknown data format Unknown element '%1' Error parsing XML file. %1 Loading pieces... Retrieving pieces... Placing pieces... Success ChooseGameDialog Choose Game Current Games New Game ImagePropertiesDialog Image Properties Name: Tags: LocaleDialog Select application language: <System Language> Note Please restart this application for the change in language to take effect. NewGameTab Add Image Remove Image Image Properties %L1 pieces Copying images... Cancel Remove selected image? Remove selected image? There are saved games using this image that will also be removed. Untitled OpenGameTab Untitled %L1 pieces %2 %3% complete Delete Delete Game Delete selected game? Overview Overview TagManager Add Tag Remove Tag Untagged All Images Untitled %1 Question Remove selected tag? Sorry A tag with that name already exists. Window Tetzle &Game &Retrieve Pieces Ctrl+R &Quit &Choose... &View Zoom &In + Zoom &Out - Best &Fit Show O&verview Tab F&ullscreen F11 Ctrl+F &Settings &Appearance... &Language... &Help &Controls &About About &Qt Controls <b>Pick Up Pieces:</b> Left Click or Space <b>Drop Pieces:</b> <b>Select Pieces:</b> Left Drag <b>Rotate Pieces:</b> Right Click, Control + Left Click, or R <b>Drag Puzzle:</b> Middle Click, Shift + Left Click, or Arrows <b>Zoom Puzzle:</b> Scrollwheel or +/- <b>Move Cursor:</b> Move mouse or W,A,D,S About Tetzle A jigsaw puzzle with tetrominoes for pieces Copyright &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license ZoomSlider ??% %1% main Select OpenGL version. version tetzle-2.1.5+dfsg1/translations/tetzle_uk.ts0000644000175000017500000003501013522554645021325 0ustar jonathanjonathan AddImage Open Image Відкрити зображення AppearanceDialog Appearance Вигляд Options Параметри Beveled borders Скісні краї Drop shadows Різкі тіні Colors Колір Background: Фон: Shadow: Тінь: Highlight: Підсвічування: Board Error Помилка Missing image. Зображення немає. Please Wait Будь ласка, зачекайте Loading image... Завантаження зображення... Generating puzzle... Генерування пазла... Creating pieces... Створення елементів... Loading puzzle... Завантаження пазла... Unknown data format Невідомий формат даних Unknown element '%1' Невідомий елемент «%1» Error parsing XML file. %1 Error parsing XML file. %1 Loading pieces... Завантаження елементів... Retrieving pieces... Отримання елементів... Placing pieces... Розташування елементів... Success Успішно ChooseGameDialog Choose Game Вибрати гру Current Games Поточні ігри New Game Нова гра ImagePropertiesDialog Image Properties Властивості зображення Name: Назва: Tags: Мітки: LocaleDialog Select application language: Вибрати мову програми: <System Language> <Системна мова> Note Нотатка Please restart this application for the change in language to take effect. Перезапустіть програму, щоб зміна мови набула сили. NewGameTab Add Image Додати зображення Remove Image Вилучити зображення Image Properties Властивості зображення %L1 pieces %L1 елементів Copying images... Копіювання зображень... Cancel Скасувати Remove selected image? Вилучити вибране зображення? Remove selected image? There are saved games using this image that will also be removed. Вилучити вибране зображення? Є збережені ігри з таким зображенням, що також будуть вилучені. Untitled Без назви OpenGameTab Untitled Без назви %L1 pieces %2 %3% complete %L1 елементів %2 %3% завершено Delete Вилучити Delete Game Вилучити гру Delete selected game? Вилучити вибрану гру? Overview Overview Огляд TagManager Add Tag Додати мітку Remove Tag Вилучити мітку Untagged Без мітки All Images Всі зображення Untitled %1 Без назви %1 Question Запит Remove selected tag? Вилучити вибрану мітку? Sorry На жаль A tag with that name already exists. Мітка з такою назвою вже є. Window Tetzle Tetzle &Game &Гра &Retrieve Pieces &Отримати елементи Ctrl+R Ctrl+R &Quit &Вийти &Choose... &Вибрати... &View &Перегляд Zoom &In &Збільшити + + Zoom &Out Зм&еншити - - Best &Fit Найкращий &добір Show O&verview Показати о&гляд Tab Tab F&ullscreen На по&вний екран F11 F11 Ctrl+F Ctrl+F &Settings &Параметри &Appearance... &Вигляд... &Language... &Мова... &Help &Довідка &Controls &Керування &About Пр&о гру About &Qt Про &Qt Controls Керування <b>Pick Up Pieces:</b> <b>Підняти елементи:</b> Left Click or Space Ліва кнопка миші або пробіл <b>Drop Pieces:</b> <b>Опустити елементи:</b> <b>Select Pieces:</b> <b>Вибрати елементи:</b> Left Drag Перетягування лівою кнопкою <b>Rotate Pieces:</b> <b>Обернути елементи:</b> Right Click, Control + Left Click, or R Права кнопка миші, Ctrl + ліва кнопка або R <b>Drag Puzzle:</b> <b>Перетягти пазл:</b> Middle Click, Shift + Left Click, or Arrows Середня кнопка, Shift + ліва кнопка або стрілки <b>Zoom Puzzle:</b> <b>Масштаб пазла:</b> Scrollwheel or +/- Колесо миші або +/- <b>Move Cursor:</b> <b>Перемістити курсор:</b> Move mouse or W,A,D,S Перемістити мишу або клавіші W, A, D, S About Tetzle A jigsaw puzzle with tetrominoes for pieces Copyright &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license ZoomSlider ??% ??% %1% %1% main Select OpenGL version. version tetzle-2.1.5+dfsg1/translations/tetzle_es.ts0000644000175000017500000003306313522554645021323 0ustar jonathanjonathan AddImage Open Image Abrir imagen AppearanceDialog Appearance Apariencia Options Opciones Beveled borders Bordes biselados Drop shadows Sombras paralelas Colors Colores Background: Fondo: Shadow: Sombra: Highlight: Resalte: Board Error Error Missing image. Falta una imagen. Please Wait Espere un momento Loading image... Cargando la imagen… Generating puzzle... Generando el rompecabezas… Creating pieces... Creando las piezas… Loading puzzle... Cargando el rompecabezas… Unknown data format Formato de datos desconocido Unknown element '%1' El elemento «%1» es desconocido Error parsing XML file. %1 Error al analizar el archivo XML. %1 Loading pieces... Cargando las piezas… Retrieving pieces... Obteniendo las piezas… Placing pieces... Colocando las piezas… Success Acierto ChooseGameDialog Choose Game Elegir Juego Current Games Juegos actuales New Game Partida nueva ImagePropertiesDialog Image Properties Propiedades de la imagen Name: Nombre: Tags: Etiquetas: LocaleDialog Select application language: Seleccione el idioma del programa: <System Language> <Idioma del sistema> Note Nota Please restart this application for the change in language to take effect. Reinicie el programa para que el cambio de idioma surta efecto. NewGameTab Add Image Añadir imagen Remove Image Eliminar imagen Image Properties Propiedades de la imagen %L1 pieces %L1 piezas Copying images... Copiando las imágenes… Cancel Cancelar Remove selected image? ¿Quiere eliminar la imagen seleccionada? Remove selected image? There are saved games using this image that will also be removed. Eliminar la imagen seleccionada? Hay juegos guardados que usan esta imagen que será eliminada. Untitled Sin título OpenGameTab Untitled Sin título %L1 pieces %2 %3% complete %L1 piezas %2 %3% completo Delete Eliminar Delete Game Eliminar Juego Delete selected game? Eliminar el juego seleccionado? Overview Overview Vista general TagManager Add Tag Añadir etiqueta Remove Tag Quitar etiqueta Untagged Sin etiqueta All Images Todas las imágenes Untitled %1 Sin título %1 Question Pregunta Remove selected tag? Eliminar etiqueta seleccionada? Sorry Lo Siento A tag with that name already exists. Ya existe una etiqueta con ese nombre. Window Tetzle Tetzle &Game &Juego &Retrieve Pieces &Recuperar Piezas Ctrl+R Ctrl+R &Quit &Salir &Choose... &Elegir &View &Ver Zoom &In Acercar& + + Zoom &Out Alejar& - Best &Fit Mejor &Ajuste Show O&verview Mostrar R&esumen Tab Tab F&ullscreen &Pantalla completa F11 F11 Ctrl+F Ctrl+F &Settings &Configuración &Appearance... &Apariencia… &Language... &Idioma… &Help Ay&uda &Controls &Controles &About &Acerca de About &Qt Acerca de &Qt Controls Controles <b>Pick Up Pieces:</b> <b>Recoger Piezas:</b> Left Click or Space Clic Izquierdo o Espacio <b>Drop Pieces:</b> <b>Colocar las Piezas:</b> <b>Select Pieces:</b> <b>Seleccionar Piezas:</b> Left Drag Arrastrar a la izquierda <b>Rotate Pieces:</b> <b>Rotar Piezas:</b> Right Click, Control + Left Click, or R Click Derecho, Control + Clic Izquierdo o R <b>Drag Puzzle:</b> <b>Arrastrar Puzzle:</b> Middle Click, Shift + Left Click, or Arrows Click Rueda Raton , Mayús + Clic Izquierdo, o las Flechas <b>Zoom Puzzle:</b> <b>Zoom Puzzle:</b> Scrollwheel or +/- Rueda del Ratón o +/- <b>Move Cursor:</b> <b>Mover Cursor:</b> Move mouse or W,A,D,S Mover el ratón o W, A, D, S About Tetzle Acerca de Tetzle A jigsaw puzzle with tetrominoes for pieces Un rompecabezas que usa tetrominós como piezas Copyright &copy; 2008-%1 Graeme Gott &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license Publicado bajo la licencia <a href=%1>GPL 3</a> ZoomSlider ??% ?? % %1% %1 % main Select OpenGL version. version tetzle-2.1.5+dfsg1/translations/tetzle_ca.ts0000644000175000017500000003317513522554645021303 0ustar jonathanjonathan AddImage Open Image Obrir imatge AppearanceDialog Appearance Apariencia Options Opcions Beveled borders Costats bisellades Drop shadows Sombres paral·leles Colors Colors Background: Fons: Shadow: Ombra: Highlight: Ressaltat: Board Error Error Missing image. No es troba la imatge. Please Wait Espereu un moment Loading image... Carregant la imatge… Generating puzzle... Generant el trencaclosques… Creating pieces... Generant les peces… Loading puzzle... Carregant el trancaclosques… Unknown data format El format de les dades és incorrecte Unknown element '%1' L'elemento «%1» és desconegut Error parsing XML file. %1 S'ha produït un error en analitzar el fitxer XML. %1 Loading pieces... Carregant les peces… Retrieving pieces... Recuperant les peces… Placing pieces... Col·locant les peces… Success Èxit ChooseGameDialog Choose Game Elegir Joc Current Games Jocs actuals New Game Joc nou ImagePropertiesDialog Image Properties Propietats de la imatge Name: Nom: Tags: Etiquetes: LocaleDialog Select application language: Seleccioni l'idioma del programa: <System Language> <Idioma del sistema> Note Nota Please restart this application for the change in language to take effect. Reinicii el programa per a que el canvi d'idioma es faci efectiu. NewGameTab Add Image Afegir imatge Remove Image Eliminar imatge Image Properties Propietats de la imatge %L1 pieces %L1 pieces Copying images... Copiant les imátges… Cancel Cancel·lar Remove selected image? Voleu eliminar la imatge seleccionada? Remove selected image? There are saved games using this image that will also be removed. Eliminar la imatge seleccionada? Hi ha jocs desats que fan servir la imatge que voleu eliminar. Untitled Sense títol OpenGameTab Untitled Sense títol %L1 pieces %2 %3% complete %L1 pieces %2 %3% completat Delete Eliminar Delete Game Eliminar Joc Delete selected game? Voleu eliminar el joc seleccionat? Overview Overview Vista general TagManager Add Tag Afegir etiqueta Remove Tag Eliminar etiqueta Untagged Sense etiqueta All Images Totes les imatges Untitled %1 Sense títol %1 Question Pregunta Remove selected tag? Eliminar l'etiqueta seleccionada? Sorry Ho sento A tag with that name already exists. Ja existeix una etiqueta amb aquest nom. Window Tetzle Tetzle &Game &Joc &Retrieve Pieces &Recuperar Peces Ctrl+R Ctrl+R &Quit &Surt &Choose... &Elegir... &View &Veure Zoom &In Am&pliar + + Zoom &Out &Reduir - Best &Fit Millor ajus&t Show O&verview Mostrar R&esum Tab Tab F&ullscreen &Pantalla completa F11 F11 Ctrl+F Ctrl+F &Settings &Configuració &Appearance... &Apariença… &Language... &Idioma… &Help Aj&uda &Controls &Controls &About &Quant a About &Qt Quant a &Qt Controls Controls <b>Pick Up Pieces:</b> <b>Recollir les peces:</b> Left Click or Space Clic esquerre o espai <b>Drop Pieces:</b> <b>Col·locar les Peces:</b> <b>Select Pieces:</b> <b>Seleccionar Peces:</b> Left Drag Arrossegar a l'esquerra <b>Rotate Pieces:</b> <b>Girar peces:</b> Right Click, Control + Left Click, or R Click Dreta, Control + Clic Esquerra o R <b>Drag Puzzle:</b> <b>Arrossegar trencaclosques:</b> Middle Click, Shift + Left Click, or Arrows Clic Roda del ratolí , Majúscules + Clic Esquerra, o Fletxes <b>Zoom Puzzle:</b> <b>Zoom Puzzle:</b> Scrollwheel or +/- Roda del ratolí o +/- <b>Move Cursor:</b> <b>Moure el cursor:</b> Move mouse or W,A,D,S Moure el cursor o W, A, D, S About Tetzle Quant a Tetzle A jigsaw puzzle with tetrominoes for pieces Un trencaclosques que fa servir tetrominoes com a peces Copyright &copy; 2008-%1 Graeme Gott &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license Publicat sota llicència <a href=%1>GPL 3</a> ZoomSlider ??% ?? % %1% %1 % main Select OpenGL version. Seleccionau la versió d'OpenGL. version versió tetzle-2.1.5+dfsg1/translations/tetzle_eo.ts0000644000175000017500000003257713522554645021330 0ustar jonathanjonathan AddImage Open Image Malfermi bildon AppearanceDialog Appearance Apero Options Opcioj Beveled borders Drop shadows Colors Koloroj Background: Fono: Shadow: Ombro: Highlight: Board Error Eraro Missing image. Bildo mankas. Please Wait Bonvile atendu Loading image... Ŝargado de bildo... Generating puzzle... Generado de puzlo... Creating pieces... Kreado de eroj... Loading puzzle... Ŝargado de puzlo... Unknown data format Nekonata aranĝo de datumoj Unknown element '%1' Nekonata ero '%1' Error parsing XML file. %1 Eraro dum analizado de XML-dosiero. %1 Loading pieces... Ŝargado de eroj... Retrieving pieces... Ricevado de eroj... Placing pieces... Metado de eroj... Success Sukcese ChooseGameDialog Choose Game Elektu ludon Current Games Aktuala ludo New Game Nova ludo ImagePropertiesDialog Image Properties Ecoj de bildo Name: Nomo: Tags: Etkedoj: LocaleDialog Select application language: Elektu lingvon de alikaĵo: <System Language> <Lingvo de sistemo> Note Noto Please restart this application for the change in language to take effect. Bonvole restartigu ĉi tiun aplikaĵon por efektivigi la ŝanĝon de lingvo. NewGameTab Add Image Aldoni bildon Remove Image Forigi bildon Image Properties Ecoj de bildo %L1 pieces %L1 eroj Copying images... Kopiado de bildo... Cancel Nuligi Remove selected image? Ĉu forigi elektitan bildon? Remove selected image? There are saved games using this image that will also be removed. Ĉu forigi elektitan bildon? Estas konservataj ludoj, uzantaj ĉi tiun bildon, kiuj estas ankaŭ forigotaj. Untitled Sentitola OpenGameTab Untitled Sentitola %L1 pieces %2 %3% complete %L1 eroj %2 %3% plenumita Delete Forigi Delete Game Forigi ludon Delete selected game? Ĉu forigi ludon? Overview Overview Superrigardo TagManager Add Tag Aldoni etikedon Remove Tag Forigi etikedon Untagged Senetikeda All Images Ĉiuj bildoj Untitled %1 Sentitola %1 Question Demando Remove selected tag? Ĉu forigi elektitan etikedon? Sorry Mi pardonpetas A tag with that name already exists. Samnoma etikedo jam ekzistas. Window Tetzle Tetzlo &Game &Ludo &Retrieve Pieces &Ricevi erojn Ctrl+R Stir+R &Quit &Eliri &Choose... &Elektu... &View &Vido Zoom &In Pl&igrandigi + + Zoom &Out &Malpligrandigi - - Best &Fit &Plejbona adapto Show O&verview &Montri superrigardon Tab Langeto F&ullscreen T&utekrane F11 F11 Ctrl+F Stir+F &Settings &Agordoj &Appearance... &Apero... &Language... &Lingvo... &Help &Helpo &Controls &Stiriloj &About &Pri About &Qt Pri &Qt Controls Stiriloj <b>Pick Up Pieces:</b> <b>Prenu erojn;</b> Left Click or Space Maldekstra alklako aŭ spaceto <b>Drop Pieces:</b> <b>Demetu erojn:</b> <b>Select Pieces:</b> <b>Elektu erojn:</b> Left Drag Maldekstra ŝovo <b>Rotate Pieces:</b> <b>Turnu erojn:</b> Right Click, Control + Left Click, or R Dekstra alklako, stirklavo + maldekstra alklako aŭ R <b>Drag Puzzle:</b> <b>Ŝovu puzlon:</b> Middle Click, Shift + Left Click, or Arrows Meza alklako, majuskliga klavo + dekstra alklako aŭ sagoj <b>Zoom Puzzle:</b> <b>Pligrandigu puzlon:</b> Scrollwheel or +/- Rulumrado aŭ +/- <b>Move Cursor:</b> <b>Movu kursoron:</b> Move mouse or W,A,D,S Movi muson aŭ W, A, D kaj S About Tetzle Pri Tetzlo A jigsaw puzzle with tetrominoes for pieces Copyright &copy; 2008-%1 Graeme Gott Kopirajto &copy; 2008-%1 Graeme GOTT Released under the <a href=%1>GPL 3</a> license Publikigita sub la permesilo <a href=%1>GPL 3</a> ZoomSlider ??% ??% %1% %1% main Select OpenGL version. version tetzle-2.1.5+dfsg1/translations/tetzle_en.ts0000644000175000017500000003254213522554645021317 0ustar jonathanjonathan AddImage Open Image AppearanceDialog Appearance Options Beveled borders Drop shadows Colors Background: Shadow: Highlight: Board Error Missing image. Please Wait Loading image... Generating puzzle... Creating pieces... Loading puzzle... Unknown data format Unknown element '%1' Error parsing XML file. %1 Loading pieces... Retrieving pieces... Placing pieces... Success ChooseGameDialog Choose Game Current Games New Game ImagePropertiesDialog Image Properties Name: Tags: LocaleDialog Select application language: <System Language> Note Please restart this application for the change in language to take effect. NewGameTab Add Image Remove Image Image Properties %L1 pieces Copying images... Cancel Remove selected image? Remove selected image? There are saved games using this image that will also be removed. Untitled OpenGameTab Untitled %L1 pieces %2 %3% complete Delete Delete Game Delete selected game? Overview Overview TagManager Add Tag Remove Tag Untagged All Images Untitled %1 Question Remove selected tag? Sorry A tag with that name already exists. Window Tetzle &Game &Retrieve Pieces Ctrl+R &Quit &Choose... &View Zoom &In + Zoom &Out - Best &Fit Show O&verview Tab F&ullscreen F11 Ctrl+F &Settings &Appearance... &Language... &Help &Controls &About About &Qt Controls <b>Pick Up Pieces:</b> Left Click or Space <b>Drop Pieces:</b> <b>Select Pieces:</b> Left Drag <b>Rotate Pieces:</b> Right Click, Control + Left Click, or R <b>Drag Puzzle:</b> Middle Click, Shift + Left Click, or Arrows <b>Zoom Puzzle:</b> Scrollwheel or +/- <b>Move Cursor:</b> Move mouse or W,A,D,S About Tetzle A jigsaw puzzle with tetrominoes for pieces Copyright &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license ZoomSlider ??% %1% main Select OpenGL version. version tetzle-2.1.5+dfsg1/translations/tetzle_fr.ts0000644000175000017500000003342113522554645021321 0ustar jonathanjonathan AddImage Open Image Ouvrir une image AppearanceDialog Appearance Apparence Options Options Beveled borders Coins biseautés Drop shadows Dissiper les zones d'ombre Colors Couleurs Background: Arrière-plan : Shadow: Ombre : Highlight: Surbrillance : Board Error Erreur Missing image. Image manquante. Please Wait Veuillez patienter Loading image... Chargement de l'image… Generating puzzle... Génération du puzzle… Creating pieces... Création des pièces… Loading puzzle... Chargement du puzzle… Unknown data format Format de donnée inconnu Unknown element '%1' Élément inconnu "%1" Error parsing XML file. %1 Erreur d'analyse du fichier XML. %1 Loading pieces... Chargement des pièces… Retrieving pieces... Pioche des pièces… Placing pieces... Disposition des pièces… Success Succès ChooseGameDialog Choose Game Choisir une partie Current Games Parties en cours New Game Nouvelle partie ImagePropertiesDialog Image Properties Propriétés de l'image Name: Nom : Tags: Mot-cles : LocaleDialog Select application language: Sélectionner la langue de l'application : <System Language> <Langue du système> Note Remarque Please restart this application for the change in language to take effect. Veuillez relancer l'application pour que la modification prenne effet. NewGameTab Add Image Ajouter une image Remove Image Supprimer l'image Image Properties Propriétés de l'image %L1 pieces %L1 pièces Copying images... Copie des images… Cancel Annuler Remove selected image? Supprimer l'image sélectionnée ? Remove selected image? There are saved games using this image that will also be removed. Supprimer l'image sélectionnée ? Les parties utilisant cette image seront également supprimées. Untitled Sans titre OpenGameTab Untitled Sans titre %L1 pieces %2 %3% complete %L1 pièces %2 %3% terminées Delete Supprimer Delete Game Supprimer la partie Delete selected game? Supprimer la partie sélectionnée ? Overview Overview Vue d'ensemble TagManager Add Tag Ajouter un mot-clef Remove Tag Supprimer le mot-clef Untagged Mot-clef retiré All Images Toutes les images Untitled %1 Sans titre %1 Question Question Remove selected tag? Supprimer le mot-clef sélectionné ? Sorry Désolé A tag with that name already exists. Un mot-clef identique existe déjà. Window Tetzle Tetzle &Game &Jeu &Retrieve Pieces &Piocher des pièces Ctrl+R Ctrl+R &Quit &Quitter &Choose... &Choisir… &View &Afficher Zoom &In Zoom &avant + + Zoom &Out Zoom &arrière - - Best &Fit &Mise au point optimale Show O&verview Afficher la &vue d'ensemble Tab Tab F&ullscreen &Plein écran F11 F11 Ctrl+F Ctrl+F &Settings &Paramètres &Appearance... &Apparence… &Language... &Langue… &Help &Aide &Controls &Commandes &About À &propos de… About &Qt À propos de &Qt Controls Contrôles <b>Pick Up Pieces:</b> <b>Ramasser des pièces :</b> Left Click or Space Clic gauche ou Barre d'espace <b>Drop Pieces:</b> <b>Relâcher des pièces :</b> <b>Select Pieces:</b> <b>Sélectionner des pièces :</b> Left Drag Faire glisser à gauche <b>Rotate Pieces:</b> <b>Rotation des pièces :</b> Right Click, Control + Left Click, or R Clic droit, Contrôle + Clic gauche, ou R <b>Drag Puzzle:</b> <b>Faire glisser le puzzle :</b> Middle Click, Shift + Left Click, or Arrows Clic du milieu, Maj + Clic gauche, ou flèches <b>Zoom Puzzle:</b> <b>Zoomer sur le puzzle :</b> Scrollwheel or +/- Molette ou + / - <b>Move Cursor:</b> <b>Curseur de la souris :</b> Move mouse or W,A,D,S Déplacez la souris ou utilisez W,A,D,S About Tetzle À propos de Tetzle A jigsaw puzzle with tetrominoes for pieces Un puzzle Jigsaw à base de tétraminos Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license Distribué sous licence GNU <a href=%1>GPL 3</a> ZoomSlider ??% ??% %1% %1% main Select OpenGL version. version tetzle-2.1.5+dfsg1/translations/tetzle_el.ts0000644000175000017500000003631713522554645021321 0ustar jonathanjonathan AddImage Open Image Άνοιγμα Εικόνας AppearanceDialog Appearance Εμφάνιση Options Ρυθμίσεις Beveled borders Κορνίζα συνόρων Drop shadows Σκιές Colors Χρώματα Background: Φόντος: Shadow: Σκιά: Highlight: Επισήμανση: Board Error Σφάλμα Missing image. Ελλειπής εικόνα. Please Wait Παρακαλώ περιμένετε Loading image... Φόρτωση εικόνας... Generating puzzle... Δημιουργία παζλ... Creating pieces... Δημιουργία κομματιών... Loading puzzle... Φόρτωση παζλ... Unknown data format Άγνωστη μορφή δεδομένων Unknown element '%1' Άγνωστο στοιχείο '%1' Error parsing XML file. %1 Σφάλμα κατά την ανάλυση του XML αρχείου. %1 Loading pieces... Φόρτωση κομματιών... Retrieving pieces... Ανάκτηση κομματιών... Placing pieces... Τοποθέτηση κομματιών... Success Επιτυχία ChooseGameDialog Choose Game Επιλογή παιχνιδιού Current Games Τρέχοντα παιχνίδια New Game Καινούργιο παιχνίδι ImagePropertiesDialog Image Properties Ιδιότητες Εικόνας Name: Όνομα: Tags: Κατηγορία: LocaleDialog Select application language: Επιλογή γλώσσας εφαρμογής: <System Language> <System Language> Note Σημείωση Please restart this application for the change in language to take effect. Παρακαλείστε να επανεκκινήσετε την εφαρμογή για να τεθεί σε ισχύ η αλλαγή της γλώσσας. NewGameTab Add Image Προσθήκη Εικόνας Remove Image Αφαίρεση Εικόνας Image Properties Ιδιότητες Εικόνας %L1 pieces %L1 κομμάτια Copying images... Αντιγραφή εικόνων... Cancel Ακύρωση Remove selected image? Αφαίρεση της επιλεγμένης εικόνας; Remove selected image? There are saved games using this image that will also be removed. Αφαίρεση της επιλεγμένης εικόνας; Εκεί αποθηκεύονται τα παιχνίδια που χρησιμοποιούν αυτή την εικόνα που θα πρέπει επίσης να αφαιρεθεί. Untitled Χωρίς τίτλο OpenGameTab Untitled Χωρίς τίτλους %L1 pieces %2 %3% complete %L1 κομμάτια %2 %3% ολοκληρώθηκαν Delete Διαγραφή Delete Game Διαγραφή παιχνιδιού Delete selected game? Διαγραφή επιλεγμένου παιχνιδιού; Overview Overview Επισκόπηση TagManager Add Tag Προσθήκη κατηγορίας Remove Tag Αφαίρεση Κατηγορίας Untagged Χωρίς κατηγορία All Images Ολες οι εικόνες Untitled %1 Χωρίς τίτλο %1 Question Ερώτηση Remove selected tag? Αφαίρεση της επιλεγμένης κατηγορίας; Sorry Συγγνώμη A tag with that name already exists. Μια κατηγορία με αυτό το όνομα υπάρχει ήδη. Window Tetzle Tetzle &Game &Παιχνίδι &Retrieve Pieces &Ανάκτηση κομματιών Ctrl+R Ctrl+Ρ &Quit &Τερματισμός &Choose... &Επιλογή... &View &Εμφάνιση Zoom &In Μεγέθυνση + + Zoom &Out Μεγέθυνση - - Best &Fit Καλύτερο ταίριασμα Show O&verview Εμφάνιση επ&ισκόπησης Tab Καρτέλα F&ullscreen Πλήρης οθόνη F11 F11 Ctrl+F Ctrl+Φ &Settings &Ρυθμίσεις &Appearance... &Εμφάνιση... &Language... &Γλώσσα... &Help &Βοήθεια &Controls &Διαχείριση &About &Σχετικά με About &Qt Σχετικά με το &Qt Controls Διαχείριση <b>Pick Up Pieces:</b> <b>Κομμάτια πού λύθηκαν:</b> Left Click or Space Πατήστε στην επιλογή αριστερά <b>Drop Pieces:</b> <b>Μειωμένα Κομμάτια:</b> <b>Select Pieces:</b> <b>Επιλεγμένα Κομμάτια:</b> Left Drag Σύρετε Αριστερά <b>Rotate Pieces:</b> <b>Περιστροφή κομματιών:</b> Right Click, Control + Left Click, or R Κάντε δεξί Κλικ για την ανάκτηση ελέγχου + αριστερό κλικ, η πατήστε το πλήκτρο Ρ <b>Drag Puzzle:</b> <b>Σύρετε το παζλ:</b> Middle Click, Shift + Left Click, or Arrows Κάντε μεσαίο Κλικ, Shift + Αριστερό Κλικ, η χρησιμοποιήστε τα βέλη <b>Zoom Puzzle:</b> <b>Μεγέθυνση τού παζλ:</b> Scrollwheel or +/- Κύλιση η +/- <b>Move Cursor:</b> <b>Μετακίνηση Δρομέα:</b> Move mouse or W,A,D,S Μετακινήστε το ποντίκι η πατήστε τα πλήκτρα Β,Α,Δ,Σ About Tetzle Σχετικά με το Tetzle A jigsaw puzzle with tetrominoes for pieces Παζλ με κομμάτια tetromino Copyright &copy; 2008-%1 Graeme Gott Πνευματικά δικαιώματα&αντίγραφα; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license Κυκλοφορία υπο την άδεια <a href=%1>GPL 3</a> ZoomSlider ??% ;;% %1% %1% main Select OpenGL version. Επιλογή έκδοσης OpenGL. version έκδοση tetzle-2.1.5+dfsg1/translations/tetzle_tr.ts0000644000175000017500000003307013522554645021337 0ustar jonathanjonathan AddImage Open Image Resim Aç AppearanceDialog Appearance Görünüm Options Seçenekler Beveled borders Eğimli Köşeler Drop shadows Alt gölgeler Colors Renkler Background: Arka Plan: Shadow: Gölge: Highlight: Vurgulama: Board Error Hata Missing image. Kayıp resim. Please Wait Lütfen Bekleyin Loading image... Resim yükleniyor... Generating puzzle... Yap-boz oluşturuluyor... Creating pieces... Parçalar oluşturuluyor... Loading puzzle... Yap-boz yükleniyor... Unknown data format Bilinmeyen veri biçimi Unknown element '%1' Blinmeyen '%1' ögesi Error parsing XML file. %1 XML dosyası ayrıştırma hatası.⏎ ⏎ %1 Loading pieces... Parçalar yükleniyor... Retrieving pieces... Parçalar alınıyor... Placing pieces... Parçalar yerleştiriliyor... Success Başarılı ChooseGameDialog Choose Game Oyun Seç Current Games Mevcut Oyunlar New Game Yeni Oyun ImagePropertiesDialog Image Properties Resim Seçenekleri Name: İsim: Tags: Etiketler: LocaleDialog Select application language: Uygulama dilini seçin: <System Language> <Sistem Dili> Note Not Please restart this application for the change in language to take effect. Dil değişikliğinin etkin olması için lütfen bu uygulamayı yeniden başlatın. NewGameTab Add Image Resim Ekle Remove Image Resim Kaldır Image Properties Resim Seçenekleri %L1 pieces %L1 parça Copying images... Resimler kopyalanıyor... Cancel İptal Et Remove selected image? Seçilmiş resim kaldırılsın mı? Remove selected image? There are saved games using this image that will also be removed. Seçilmiş resim kaldırılsın mı?⏎ ⏎ Bu resmi kullanan kayıtlı oyunlar da kaldırılacaktır. Untitled Başlıksız OpenGameTab Untitled Başlıksız %L1 pieces %2 %3% complete %L1 parça %2 %3% tamamlandı Delete Sil Delete Game Oyunu Sil Delete selected game? Seçilmiş oyun silinsin mi? Overview Overview Küçük Resim TagManager Add Tag Etiket Ekle Remove Tag Etiketi Kaldır Untagged Etiketlenmemiş All Images Tüm Resimler Untitled %1 Başlıksız %1 Question Soru Remove selected tag? Seçilmiş etiket kaldırılsın mı? Sorry Üzgünüm A tag with that name already exists. Bu adda bir etiket zaten var. Window Tetzle Tetzle &Game &Oyun &Retrieve Pieces &Parçaları Geri Getir Ctrl+R Ctrl+R &Quit &Çık &Choose... &Seç... &View &Görünüm Zoom &In &Yakınlaş + + Zoom &Out &Uzaklaş - - Best &Fit &En Uygun Show O&verview &Küçük Resmi Göster Tab Sekme F&ullscreen &Tam Ekran F11 F11 Ctrl+F Ctrl+F &Settings &Ayarlar &Appearance... &Görünüm... &Language... &Dil... &Help &Yardım &Controls &Kontroller... &About &Hakkında About &Qt &Qt Hakkında Controls Kontroller <b>Pick Up Pieces:</b> <b>Parçaları Al:</b> Left Click or Space Sol Tıklama ya da Boşluk <b>Drop Pieces:</b> <b>Parçaları Bırak:</b> <b>Select Pieces:</b> <b>Parçaları Seç:</b> Left Drag Sol Sürükleme <b>Rotate Pieces:</b> <b>Parçaları Döndür:</b> Right Click, Control + Left Click, or R Sağ Tıklama, Ctrl + Sol Tıklama ya da R <b>Drag Puzzle:</b> <b>Yap-bozu Sürükle:</b> Middle Click, Shift + Left Click, or Arrows Orta Tıklama, Shift + Sol Tıklama ya da Oklar <b>Zoom Puzzle:</b> <b>Yap-boz Yakınlaş/Uzaklaş:</b> Scrollwheel or +/- Tekerleği çevir ya da +/- <b>Move Cursor:</b> <b>İmleci Hareket Ettir:</b> Move mouse or W,A,D,S Fare ya da W, A, S, D About Tetzle Tetzle Hakkında A jigsaw puzzle with tetrominoes for pieces Tetris benzeri parçalı bir yap-boz oyunu Copyright &copy; 2008-%1 Graeme Gott Telif hakları saklıdır &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license <a href=%1>GPL 3</a> lisansı altında yayınlanmıştır ZoomSlider ??% ??% %1% %1% main Select OpenGL version. version tetzle-2.1.5+dfsg1/translations/tetzle_he.ts0000644000175000017500000003324113522554645021306 0ustar jonathanjonathan AddImage Open Image פתיחת תמונה AppearanceDialog Appearance מראה Options אפשרויות Beveled borders שיפוע גבולות Drop shadows הטלת צללים Colors צבעים Background: רקע אחורי: Shadow: צל: Highlight: הדגשה: Board Error שגיאה Missing image. תמונה חסרה. Please Wait אנא המתן Loading image... כעת טוען תמונה... Generating puzzle... כעת מפיק פאזל... Creating pieces... כעת יוצר חתיכות... Loading puzzle... כעת טוען פאזל... Unknown data format פורמט מידע לא מוכר Unknown element '%1' אלמנט לא מוכר '%1' Error parsing XML file. %1 שגיאת ניתוח קובץ XML. %1 Loading pieces... כעת טוען חתיכות... Retrieving pieces... כעת מאחזר חתיכות... Placing pieces... כעת ממקם חתיכות... Success הצלחה ChooseGameDialog Choose Game בחירת משחק Current Games משחק נוכחי New Game משחק חדש ImagePropertiesDialog Image Properties מאפייני תמונה Name: שם: Tags: תגיות: LocaleDialog Select application language: בחר שפת יישום: <System Language> <שפת מערכת> Note הערה Please restart this application for the change in language to take effect. נא לאתחל את יישום זה כדי להחיל את השינוי בשפה. NewGameTab Add Image הוספת תמונה Remove Image הסרת תמונה Image Properties מאפייני תמונה %L1 pieces %L1 חתיכות Copying images... מעתיק תמונה כעת... Cancel ביטול Remove selected image? הסרת תמונה נבחרת? Remove selected image? There are saved games using this image that will also be removed. Untitled ללא כותרת OpenGameTab Untitled ללא כותרת %L1 pieces %2 %3% complete Delete מחיקה Delete Game מחיקת משחק Delete selected game? מחיקת משחק נוכחי? Overview Overview סקירה כללית TagManager Add Tag הוסף תגית Remove Tag הסר תגית Untagged לא מתויג All Images כל התמונות Untitled %1 ללא כותרת %1 Question שאלה Remove selected tag? להסיר תגית נבחרת? Sorry סליחה A tag with that name already exists. תגית בשם זה כבר קיימת. Window Tetzle Tetzle &Game &משחק &Retrieve Pieces &אחזור חתיכות Ctrl+R Ctrl+R &Quit י&ציאה &Choose... &בחירה... &View &תצוגה Zoom &In זום &פנימה + + Zoom &Out זום &חוצה - - Best &Fit התאמה &מיטבית Show O&verview Tab F&ullscreen &מסך מלא F11 F11 Ctrl+F Ctrl+F &Settings &הגדרות &Appearance... &מראה... &Language... &שפה... &Help &עזרה &Controls &בקרים &About &אודות About &Qt אודות &QT Controls בקרים <b>Pick Up Pieces:</b> Left Click or Space קליק שמאלי או רווח <b>Drop Pieces:</b> <b>Select Pieces:</b> <b>בחירת חתיכות:</b> Left Drag <b>Rotate Pieces:</b> <b>סיבוב חתיכות:</b> Right Click, Control + Left Click, or R קליק ימני, Control + קליק שמאלי, או R <b>Drag Puzzle:</b> Middle Click, Shift + Left Click, or Arrows קליק אמצעי, Shift + קליק שמאלי, או חצים <b>Zoom Puzzle:</b> Scrollwheel or +/- גלגל עכבר או +/- <b>Move Cursor:</b> Move mouse or W,A,D,S הזזת עכבר או W,A,D,S About Tetzle אודות Tetzle A jigsaw puzzle with tetrominoes for pieces Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license משוחרר תחת הרשיון ‫<a href=%1>GPL 3</a> ZoomSlider ??% ??% %1% %1% main Select OpenGL version. version tetzle-2.1.5+dfsg1/translations/tetzle_ru.ts0000644000175000017500000003533613522554645021347 0ustar jonathanjonathan AddImage Open Image Открыть изображение AppearanceDialog Appearance Вид Options Опции Beveled borders Видимые границы Drop shadows Убрать тени Colors Цвета Background: Задний фон Shadow: Тень Highlight: Подсветка Board Error Ошибка Missing image. Изображение отсутствует. Please Wait Пожалуйста, подождите Loading image... Загрузка изображения... Generating puzzle... Генерация пазла... Creating pieces... Создание пазлов... Loading puzzle... Загрузка пазла... Unknown data format Неизвестный формат файла Unknown element '%1' Неизвестный элемент '%1' Error parsing XML file. %1 Ошибка при обработке XML-файла. %1 Loading pieces... Загрузка пазлов... Retrieving pieces... Перемешиваем пазлы... Placing pieces... Размещение пазлов... Success Успех! ChooseGameDialog Choose Game Выберите игру Current Games Текущие игры New Game Новая игра ImagePropertiesDialog Image Properties Настройки изображения Name: Название: Tags: Тэги: LocaleDialog Select application language: Выберите язык программы: <System Language> <Язык системы> Note Предупреждение Please restart this application for the change in language to take effect. Пожалуйста, перезапустите программу для того, чтобы изменения вступили в силу. NewGameTab Add Image Добавить изображение Remove Image Удалить изображение Image Properties Настройки изображения %L1 pieces %L1 пазлов Copying images... Копируем изображения... Cancel Отмена Remove selected image? Удалить выбранное изображение? Remove selected image? There are saved games using this image that will also be removed. Удалить выбранное изображение? Сохраненные игры, использующие это изображение, также будут удалены. Untitled Без названия OpenGameTab Untitled Без названия %L1 pieces %2 %3% complete %L1 пазлов %2 %3% завершено Delete Удалить Delete Game Удалить игру Delete selected game? Удалить выбранную игру? Overview Overview Общий вид TagManager Add Tag Добавить тэг Remove Tag Удалить тэг Untagged Нет тега All Images Все изображения Untitled %1 Без названия %1 Question Вопрос Remove selected tag? Удалить выбранный тэг? Sorry Извините A tag with that name already exists. Такой тэг уже существует. Window Tetzle Tetzle &Game &Игра &Retrieve Pieces &Перемешать пазлы Ctrl+R Ctrl+R &Quit &Выход &Choose... &Выбрать... &View &Вид Zoom &In У&величить + + Zoom &Out У&меньшить - - Best &Fit Наилучший вид Show O&verview Показывать &общий вид Tab Tab F&ullscreen &На весь экран F11 F11 Ctrl+F Ctrl+F &Settings Н&астройки &Appearance... &Вид... &Language... &Язык... &Help &Помощь &Controls &Управление &About &Об игре About &Qt О Qt& Controls Управление <b>Pick Up Pieces:</b> <b>Брать пазлы:</b> Left Click or Space Левый клик или пробел <b>Drop Pieces:</b> <b>Отпускать пазлы:</b> <b>Select Pieces:</b> <b>Выделять пазлы</b> Left Drag Зажать левую кнопку мыши и выделять <b>Rotate Pieces:</b> <b>Вращение элементов:</b> Right Click, Control + Left Click, or R Правый клик, Ctrl + левый клик, или R <b>Drag Puzzle:</b> <b>Двигать полотно пазла:</b> Middle Click, Shift + Left Click, or Arrows Зажать колесико мышки, Shift+ Левый клик, или кнопки Влево, Вправо, Вверх и Вниз <b>Zoom Puzzle:</b> <b>Увеличить пазл:</b> Scrollwheel or +/- Колесо прокрутки или +/- <b>Move Cursor:</b> <b>Двигать курсор:</b> Move mouse or W,A,D,S Мышь или W,A,S,D About Tetzle О Tetlze A jigsaw puzzle with tetrominoes for pieces Игра-головоломка с тетрамино Copyright &copy; 2008-%1 Graeme Gott Копирайт &copy; 20080%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license Опубликовано под лицензией <a href=%1>GPL 3</a> ZoomSlider ??% ??% %1% %1% main Select OpenGL version. version tetzle-2.1.5+dfsg1/translations/tetzle_pt_BR.ts0000644000175000017500000003277513522554645021733 0ustar jonathanjonathan AddImage Open Image Abrir imagem AppearanceDialog Appearance Aparência Options Opções Beveled borders Bordas chanfradas Drop shadows Sombras externas Colors Cores Background: Fundo: Shadow: Sombra: Highlight: Realce: Board Error Erro Missing image. Faltando imagem. Please Wait Por favor aguarde Loading image... Carregando imagem... Generating puzzle... Gerando quebra-cabeças... Creating pieces... Criando peças... Loading puzzle... Carregando quebra-cabeças... Unknown data format Formato de dados desconhecido Unknown element '%1' Elemento desconhecido '%1' Error parsing XML file. %1 Erro ao interpretar arquivo XML. %1 Loading pieces... Carregando peças... Retrieving pieces... Recuperando peças... Placing pieces... Posicionando peças... Success Sucesso ChooseGameDialog Choose Game Escolha um jogo Current Games Jogos atuais New Game Novo jogo ImagePropertiesDialog Image Properties Propriedades da imagem Name: Nome: Tags: Tags: LocaleDialog Select application language: Selecione o idioma do jogo: <System Language> <Idioma do sistema> Note Nota Please restart this application for the change in language to take effect. Por favor reinicie o jogo para que a alteração do idioma faça efeito. NewGameTab Add Image Adicionar imagem Remove Image Remover imagem Image Properties Propriedades da imagem %L1 pieces %L1 peças Copying images... Copiando imagens.. Cancel Cacelar Remove selected image? Remover imagem selecionada? Remove selected image? There are saved games using this image that will also be removed. Remover imagem selecionada? Os jogos salvos usando esta imagem também serão removidos. Untitled Sem título OpenGameTab Untitled Sem título %L1 pieces %2 %3% complete %L1 peças %2 %3 completas Delete Excluir Delete Game Excluir jogo Delete selected game? Excluir jogo selecionado? Overview Overview Visão geral TagManager Add Tag Adicionar tag Remove Tag Remover tag Untagged Sem tags All Images Todas as imagens Untitled %1 Sem título %1 Question Pergunta Remove selected tag? Remover a tag selecionada? Sorry Desculpe A tag with that name already exists. Uma tag com este nome já existe. Window Tetzle Tetzle &Game &Jogo &Retrieve Pieces &Recuperar peças Ctrl+R Ctrl+R &Quit Sai&r &Choose... &Escolher... &View &Visualizar Zoom &In &Aumentar Zoom + + Zoom &Out &Diminuir Zoom - - Best &Fit Ajustar à &tela Show O&verview Exibir &visão geral Tab Tab F&ullscreen Tela &cheia F11 F11 Ctrl+F Ctrl+F &Settings &Configurações &Appearance... &Aparência... &Language... &Idioma... &Help A&juda &Controls &Controles &About &Sobre About &Qt Sobre o &Qt Controls Controles <b>Pick Up Pieces:</b> <b>Pegar peças:</b> Left Click or Space Clique esquerdo ou espaço <b>Drop Pieces:</b> <b>Deixar peças:</b> <b>Select Pieces:</b> <b>Selecionar peças:</b> Left Drag Arrastar com botão esquerdo <b>Rotate Pieces:</b> <b>Girar peças:</b> Right Click, Control + Left Click, or R Clique direito, Control + clique esquerdo, ou R <b>Drag Puzzle:</b> <b>Arrastar quebra-cabeças:</b> Middle Click, Shift + Left Click, or Arrows Clique no meio, Shift + Clique esquerdo, ou setas direcionais <b>Zoom Puzzle:</b> <b>Aumentar/diminuir zoom:</b> Scrollwheel or +/- Roda do mouse ou +/- <b>Move Cursor:</b> <b>Mover cursor:</b> Move mouse or W,A,D,S Mova o mouse ou W, A, S, D About Tetzle Sobre o Teztle A jigsaw puzzle with tetrominoes for pieces Quebra-cabeças com peças em formato de tetris Copyright &copy; 2008-%1 Graeme Gott Copyright &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license Licenciado sob os termos da <a href=%1>GPL 3</a> ZoomSlider ??% ??% %1% %1% main Select OpenGL version. version tetzle-2.1.5+dfsg1/translations/tetzle_pl.ts0000644000175000017500000003273213522554645021331 0ustar jonathanjonathan AddImage Open Image Otwórz obraz AppearanceDialog Appearance Wygląd Options Opcje Beveled borders Skośne krawędzie Drop shadows Cienie upuszczania Colors Kolory Background: Tło: Shadow: Cień: Highlight: Zaznaczone: Board Error Błąd Missing image. Brak obrazu. Please Wait Proszę czekać Loading image... Ładowanie obrazu... Generating puzzle... Tworzenie puzzli... Creating pieces... Tworzenie części... Loading puzzle... Ładowanie puzzli... Unknown data format Nieznany format danych Unknown element '%1' Nieznany element '%1' Error parsing XML file. %1 Błąd parsowania pliku XML. %1 Loading pieces... Ładowanie części... Retrieving pieces... Pobieranie części... Placing pieces... Umieszczanie części... Success Sukces ChooseGameDialog Choose Game Wybierz grę Current Games Obecne gry New Game Nowa gra ImagePropertiesDialog Image Properties Właściwości obrazu Name: Nazwa: Tags: Tagi LocaleDialog Select application language: Wybierz język programu: <System Language> <Język systemowy> Note Uwaga Please restart this application for the change in language to take effect. Proszę ponownie uruchomić ten program, aby zastosować zmianę języka. NewGameTab Add Image Dodaj obraz Remove Image Usuń obraz Image Properties Właściwości obrazu %L1 pieces %L1 części Copying images... Kopiowanie obrazów... Cancel Anuluj Remove selected image? Usunąć wybrany obraz? Remove selected image? There are saved games using this image that will also be removed. Usunąć wybrany obraz? Istniejące zapisane gry, które używają tego obrazu, zostaną również usunięte. Untitled Bez tytułu OpenGameTab Untitled Bez tytułu %L1 pieces %2 %3% complete %L1 części %2 %3% kompletne Delete Usuń Delete Game Usuń grę Delete selected game? Usunąć wybraną grę? Overview Overview Przegląd TagManager Add Tag Dodaj tag Remove Tag Usuń tag Untagged Bez tagów All Images Wszystkie obrazy Untitled %1 Bez tytułu %1 Question Pytanie Remove selected tag? Usunąć wybrany tag? Sorry Przepraszamy A tag with that name already exists. Tag o takiej nazwie już istnieje. Window Tetzle Tetzle &Game &Gra &Retrieve Pieces &Pobierz części Ctrl+R Ctrl+R &Quit &Zakończ &Choose... W&ybierz... &View &Widok Zoom &In &Przybliż + + Zoom &Out &Oddal - - Best &Fit &Najlepsze dopasowanie Show O&verview Pokaż p&odgląd Tab Tab F&ullscreen Pełny &ekran F11 F11 Ctrl+F Ctrl+F &Settings &Ustawienia &Appearance... Wy&gląd... &Language... &Język... &Help &Pomoc &Controls &Sterowanie &About &O About &Qt O &Qt Controls Sterowanie <b>Pick Up Pieces:</b> <b>Podnoszenie części:</b> Left Click or Space Lewy przycisk myszy lub spacja <b>Drop Pieces:</b> <b>Upuszczanie części:</b> <b>Select Pieces:</b> <b>Wybór części:</b> Left Drag Przeciągając lewym przyciskiem myszy <b>Rotate Pieces:</b> <b>Obróć części:</b> Right Click, Control + Left Click, or R Prawy przycisk myszy, Ctrl + Lewy przycisk myszy lub R <b>Drag Puzzle:</b> <b>Przeciąganie puzzli:</b> Middle Click, Shift + Left Click, or Arrows Środkowy przycisk myszy, Shift + Lewy przycisk myszy, lub strzałki <b>Zoom Puzzle:</b> <b>Powiększanie puzzli:</b> Scrollwheel or +/- Kółko myszy lub +/- <b>Move Cursor:</b> <b>Przesuwanie kursora:</b> Move mouse or W,A,D,S Przesuń myszą lub W,A,D,S About Tetzle O Tetzle A jigsaw puzzle with tetrominoes for pieces Gra puzzle z części o kształcie tetromina Copyright &copy; 2008-%1 Graeme Gott Prawo autorskie &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license Wydano na licencji <a href=%1>GPL 3</a> ZoomSlider ??% ??% %1% %1% main Select OpenGL version. Wybierz wersję OpenGL. version wersja tetzle-2.1.5+dfsg1/translations/tetzle_nb_NO.ts0000644000175000017500000003240413522554645021705 0ustar jonathanjonathan AddImage Open Image Åpne bilde AppearanceDialog Appearance Utseende Options Valg Beveled borders Avrundet utsnitt Drop shadows Kastskygger Colors Farger Background: Bakgrunn: Shadow: Skygge: Highlight: Framheving: Board Error Feil Missing image. Mangler bilde. Please Wait Vent Loading image... Laster bilde… Generating puzzle... Genererer puslespill… Creating pieces... Oppretter brikker… Loading puzzle... Laster puslespill… Unknown data format Ukjent dataformat Unknown element '%1' Ukjent element "%1" Error parsing XML file. %1 Kunne ikke tolke XML-fil. %1 Loading pieces... Laster brikker… Retrieving pieces... Henter brikker… Placing pieces... Plasserer brikker… Success Vellykket ChooseGameDialog Choose Game Velg spill Current Games Nåværende spill New Game Nytt spill ImagePropertiesDialog Image Properties Billedegenskaper Name: Navn: Tags: Etiketter: LocaleDialog Select application language: Velg programspråk: <System Language> <Systemforvalg> Note Merk Please restart this application for the change in language to take effect. Språkvalg trer i effekt ved omstart av programmet. NewGameTab Add Image Legg til bilde Remove Image Fjern bilde Image Properties Billedegenskaper %L1 pieces %L1 brikker Copying images... Kopierer bilder… Cancel Avbryt Remove selected image? Fjern valgt bilde? Remove selected image? There are saved games using this image that will also be removed. Fjern valgt bilde? Lagrede spill som bruker dette bildet vil også bli fjernet. Untitled Uten tittel OpenGameTab Untitled Uten tittel %L1 pieces %2 %3% complete %L1 brikker %2 %3% fullført Delete Slett Delete Game Slett spill Delete selected game? Slett valgt spill? Overview Overview Oversikt TagManager Add Tag Legg til etikett Remove Tag Fjern etikett Untagged Umerket All Images Alle bilder Untitled %1 Uten tittel %1 Question Spørsmål Remove selected tag? Fjern valgt etikett? Sorry Beklager A tag with that name already exists. En etikett med det navnet finnes allerede. Window Tetzle Tetzle &Game &Spill &Retrieve Pieces &Hent brikker Ctrl+R Ctrl+R &Quit &Avslutt &Choose... &Velg… &View &Vis Zoom &In For&størr + + Zoom &Out For&minsk - - Best &Fit &Tilpasning Show O&verview Vis &oversikt Tab Fane F&ullscreen F&ullskjermsvisning F11 F11 Ctrl+F Ctrl+F &Settings &Innstillinger &Appearance... &Utseende… &Language... &språk… &Help &Hjelp &Controls &Kontroller &About &Om About &Qt Om &Qt Controls Kontroller <b>Pick Up Pieces:</b> <b>Plukk opp brikker:</b> Left Click or Space Venstreklikk eller mellomrom <b>Drop Pieces:</b> <b>Legg ned brikker:</b> <b>Select Pieces:</b> <b>Velg brikker:</b> Left Drag Venstremusetastdragning <b>Rotate Pieces:</b> <b>Roter brikker:</b> Right Click, Control + Left Click, or R Høyreklikk, Ctrl+venstreklikk, eller R <b>Drag Puzzle:</b> <b>Dra puslespill:</b> Middle Click, Shift + Left Click, or Arrows Midklikk, Shift+Venstreklikk, eller piltaster <b>Zoom Puzzle:</b> <b>Forstørr bilde:</b> Scrollwheel or +/- Rullehjul eller +/- <b>Move Cursor:</b> <b>Flytt peker:</b> Move mouse or W,A,D,S Flytt mus eller W,A,D,S About Tetzle Om Tetzle A jigsaw puzzle with tetrominoes for pieces Et puslespill som bruker tetromino-brikker Copyright &copy; 2008-%1 Graeme Gott Opphavsrett &copy; 2008-%1 Graeme Gott Released under the <a href=%1>GPL 3</a> license Lisensiert <a href=%1>GPLv3</a> ZoomSlider ??% ??% %1% %1% main Select OpenGL version. Velg OpenGL-versjon. version versjon tetzle-2.1.5+dfsg1/windows_deploy.bat0000644000175000017500000000254113522554645017767 0ustar jonathanjonathan@ECHO ON>windows\dirs.nsh @ECHO ON>windows\files.nsh @ECHO OFF SET APP=Tetzle SET VERSION=2.1.5 ECHO Copying executable MKDIR %APP% COPY release\%APP%.exe %APP% >nul strip %APP%\%APP%.exe ECHO Copying translations SET TRANSLATIONS=%APP%\translations MKDIR %TRANSLATIONS% COPY translations\*.qm %TRANSLATIONS% >nul ECHO Copying Qt %QTDIR%\bin\windeployqt.exe --verbose 0 --release %APP%\%APP%.exe RMDIR /S /Q %APP%\iconengines ECHO Creating ReadMe TYPE README >> %APP%\ReadMe.txt ECHO. >> %APP%\ReadMe.txt ECHO. >> %APP%\ReadMe.txt ECHO CREDITS >> %APP%\ReadMe.txt ECHO ======= >> %APP%\ReadMe.txt ECHO. >> %APP%\ReadMe.txt TYPE CREDITS >> %APP%\ReadMe.txt ECHO. >> %APP%\ReadMe.txt ECHO. >> %APP%\ReadMe.txt ECHO NEWS >> %APP%\ReadMe.txt ECHO ==== >> %APP%\ReadMe.txt ECHO. >> %APP%\ReadMe.txt TYPE ChangeLog >> %APP%\ReadMe.txt ECHO Creating installer CD %APP% SETLOCAL EnableDelayedExpansion SET "parentfolder=%__CD__%" FOR /R . %%F IN (*) DO ( SET "var=%%F" ECHO Delete "$INSTDIR\!var:%parentfolder%=!" >> ..\windows\files.nsh ) FOR /R /D %%F IN (*) DO ( TYPE ..\windows\dirs.nsh > temp.txt SET "var=%%F" ECHO RMDir "$INSTDIR\!var:%parentfolder%=!" > ..\windows\dirs.nsh TYPE temp.txt >> ..\windows\dirs.nsh ) DEL temp.txt ENDLOCAL CD .. makensis.exe /V0 windows\installer.nsi ECHO Cleaning up RMDIR /S /Q %APP% DEL windows\dirs.nsh DEL windows\files.nsh tetzle-2.1.5+dfsg1/COPYING0000644000175000017500000010451313522554645015266 0ustar jonathanjonathan GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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 3 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. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . tetzle-2.1.5+dfsg1/.gitignore0000644000175000017500000000003613522554645016216 0ustar jonathanjonathanMakefile build tetzle *.qm *~ tetzle-2.1.5+dfsg1/data/0000755000175000017500000000000013522554645015140 5ustar jonathanjonathantetzle-2.1.5+dfsg1/data/bumpmap.png0000644000175000017500000000633613522554645017317 0ustar jonathanjonathanPNG  IHDR&sRGB pHYsaa?itIME ,_iTXtCommentCreated with GIMPd.ebKGD̿ 9IDATxnFEgH3(v7AE}+PBm r颉MMrs47(}6o۵U?Yy_6X_MKNmfS~Z]>2ڋ߰w0[Zkl3_G[_fj4S0hK/E+ sן J+~C]'N7;8+9lsחPwbQ34tka B'?A&t; z H H L; foPwy}+&`q0輸X3L$ @$ @$ @$ @ @udeB_olWoWP?d Y2I1F|Y3?\ hXyF8tO}gz_iމo߮nlzhݮݏa囕 ډKo~YgkgdSY t_To2~o(S6W+B3;蓉L:'_?X~êVL>NfwնZ=(篯N}-~_~l6k~s˦KO;#h}%mfU* X__U{)e#*TK$[N[Zkf6SQ??KR(+T/Cudhx|7ޟ~[8 M<+Z3sIEMYo?|x9Yw? @6P݁f0'pv hO$ @$ @uD7;l#W_pp%L{aW~Up@}Μ_BO$ @$ @$ @$ 0 gށ>$wb&:yͯ{T T:iU\զE;?k߷?ޗ;7Vkq mU۝5ښsϻ_ן^_?JKH;|&Εoewxwt"#H4x--Cvi׷/#6ܯݮݷB|YFW9Lo232)wKi&h09ocbۨ0Yebn9jo^f 3ٚsi\n8tO}gzLGLq/~~%݇'kuZ: ߿} D)A 1$@ i j,>E$ @$ @D%@ %@ v @, !^,np*c H H H H`1$w''k{/B_XQS=k JY_cL2p/π}GODC'b[3t-1fs/ MĹq 7N)JkoS̏dwv?~m__hh=4?T4WVna~'qޟq xXCo͜w@i1n%@Iؕq/3PFIENDB`tetzle-2.1.5+dfsg1/data/shaders/0000755000175000017500000000000013522554645016571 5ustar jonathanjonathantetzle-2.1.5+dfsg1/data/shaders/gl2/0000755000175000017500000000000013522554645017255 5ustar jonathanjonathantetzle-2.1.5+dfsg1/data/shaders/gl2/textures0.vert0000644000175000017500000000015513522554645022123 0ustar jonathanjonathanuniform mat4 matrix; attribute vec3 position; void main() { gl_Position = matrix * vec4(position, 1.0); } tetzle-2.1.5+dfsg1/data/shaders/gl2/textures2.frag0000644000175000017500000000041113522554645022057 0ustar jonathanjonathanuniform sampler2D texture0; uniform sampler2D texture1; varying highp vec2 frag_texcoord0; varying highp vec2 frag_texcoord1; void main() { gl_FragColor = texture2D(texture0, frag_texcoord0) + texture2D(texture1, frag_texcoord1) - vec4(0.5, 0.5, 0.5, 0.5); } tetzle-2.1.5+dfsg1/data/shaders/gl2/textures1.vert0000644000175000017500000000030313522554645022117 0ustar jonathanjonathanuniform mat4 matrix; attribute vec2 texcoord0; attribute vec3 position; varying vec2 frag_texcoord0; void main() { gl_Position = matrix * vec4(position, 1.0); frag_texcoord0 = texcoord0; } tetzle-2.1.5+dfsg1/data/shaders/gl2/textures1.frag0000644000175000017500000000025313522554645022062 0ustar jonathanjonathanuniform sampler2D texture0; uniform highp vec4 color; varying highp vec2 frag_texcoord0; void main() { gl_FragColor = texture2D(texture0, frag_texcoord0) * color; } tetzle-2.1.5+dfsg1/data/shaders/gl2/textures2.vert0000644000175000017500000000042713522554645022127 0ustar jonathanjonathanuniform mat4 matrix; attribute vec2 texcoord1; attribute vec2 texcoord0; attribute vec3 position; varying vec2 frag_texcoord0; varying vec2 frag_texcoord1; void main() { gl_Position = matrix * vec4(position, 1.0); frag_texcoord0 = texcoord0; frag_texcoord1 = texcoord1; } tetzle-2.1.5+dfsg1/data/shaders/gl2/textures0.frag0000644000175000017500000000010513522554645022055 0ustar jonathanjonathanuniform highp vec4 color; void main() { gl_FragColor = color; } tetzle-2.1.5+dfsg1/data/shaders/gl3/0000755000175000017500000000000013522554645017256 5ustar jonathanjonathantetzle-2.1.5+dfsg1/data/shaders/gl3/textures1.vert0000644000175000017500000000026113522554645022123 0ustar jonathanjonathanuniform mat4 matrix; in vec3 position; in vec2 texcoord0; out vec2 frag_texcoord0; void main() { gl_Position = matrix * vec4(position, 1.0); frag_texcoord0 = texcoord0; } tetzle-2.1.5+dfsg1/data/shaders/gl3/textures2.frag0000644000175000017500000000042313522554645022063 0ustar jonathanjonathanuniform sampler2D texture0; uniform sampler2D texture1; in highp vec2 frag_texcoord0; in highp vec2 frag_texcoord1; out highp vec4 out_color; void main() { out_color = texture(texture0, frag_texcoord0) + texture(texture1, frag_texcoord1) - vec4(0.5, 0.5, 0.5, 0.5); } tetzle-2.1.5+dfsg1/data/shaders/gl3/textures0.vert0000644000175000017500000000014613522554645022124 0ustar jonathanjonathanuniform mat4 matrix; in vec3 position; void main() { gl_Position = matrix * vec4(position, 1.0); } tetzle-2.1.5+dfsg1/data/shaders/gl3/textures0.frag0000644000175000017500000000013513522554645022061 0ustar jonathanjonathanuniform highp vec4 color; out highp vec4 out_color; void main() { out_color = color; } tetzle-2.1.5+dfsg1/data/shaders/gl3/textures2.vert0000644000175000017500000000037213522554645022127 0ustar jonathanjonathanuniform mat4 matrix; in vec3 position; in vec2 texcoord0; in vec2 texcoord1; out vec2 frag_texcoord0; out vec2 frag_texcoord1; void main() { gl_Position = matrix * vec4(position, 1.0); frag_texcoord0 = texcoord0; frag_texcoord1 = texcoord1; } tetzle-2.1.5+dfsg1/data/shaders/gl3/textures1.frag0000644000175000017500000000027413522554645022066 0ustar jonathanjonathanuniform sampler2D texture0; uniform highp vec4 color; in highp vec2 frag_texcoord0; out highp vec4 out_color; void main() { out_color = texture(texture0, frag_texcoord0) * color; } tetzle-2.1.5+dfsg1/data/data.qrc0000644000175000017500000000272613522554645016567 0ustar jonathanjonathan bumpmap.png shadow.png shaders/gl2/textures0.frag shaders/gl2/textures0.vert shaders/gl2/textures1.frag shaders/gl2/textures1.vert shaders/gl2/textures2.frag shaders/gl2/textures2.vert shaders/gl3/textures0.frag shaders/gl3/textures0.vert shaders/gl3/textures1.frag shaders/gl3/textures1.vert shaders/gl3/textures2.frag shaders/gl3/textures2.vert tango/16x16/image-x-generic.png tango/16x16/list-add.png tango/16x16/list-remove.png tango/22x22/image-x-generic.png tango/22x22/list-add.png tango/22x22/list-remove.png tango/24x24/image-x-generic.png tango/24x24/list-add.png tango/24x24/list-remove.png tango/32x32/image-x-generic.png tango/32x32/list-add.png tango/32x32/list-remove.png tango/48x48/image-x-generic.png tango/48x48/list-add.png tango/48x48/list-remove.png tango/64x64/image-x-generic.png tango/64x64/list-add.png tango/64x64/list-remove.png tango/image-loading.png tango/image-loading@2x.png tango/image-loading@3x.png tetzle-2.1.5+dfsg1/data/tango/0000755000175000017500000000000013522554645016250 5ustar jonathanjonathantetzle-2.1.5+dfsg1/data/tango/image-loading@3x.png0000644000175000017500000004000413522554645022024 0ustar jonathanjonathanPNG  IHDR\rfsBIT|d pHYsIIEtEXtSoftwarewww.inkscape.org<tEXtTitleLoading ThumbnailtEXtAuthorJakub Steiner/!tEXtSourcehttp://jimmac.musichall.czif^XtEXtCopyrightCC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/>IDATx} UnCB@HSHBC&!*tBF|•O}vKV~ka˳2dȑV`{-E(_ 1pS_kBJ>%l]=(0Ȼ)O z/bBe_rG_W__{({RD0x!`= Æ ve`1bĈ Oox~-@nʟU7n/b_Pl[L @qケc;EVYˮ+\PU/E?)Y@ /Do &OL4)knڪVi9X{.XfMeg&>`:xԩS#N|]V!@ݔ;g-ҧM6+VxSL M뮕WMSi/V?AE܎;Y瞞ox]G O,Y$;8C3U Mֿ)=XnݺT~v9P|KiVugǁ@@HFx#cƌu4`K5Rv)?GȽ$%5jT@O]uLs GCF\zx6lx Xz%Ӄ=أv1Ч.?bz(bmV)8Jǐ[{Ż l(?GmJ#?>8" >v@9uP~X'|2rmrp0%V*3o(0R&L`4%$k׮p@#\rB!@ޥpaCqwy`}6^} @#ˎCgHp0s(7R> yF .q+~EwqϕJQ!VlL%>@8@ Bp /C)Hs?_ $jQHZA5,3+X+)D9s bw@@A(<@hq?~2!M8R xc"#_N46*i` F'p}x?t7s0-B ݃~Ȣ=>I -! +:<8@f"W뮻1c5_]ku\lYk? ?E1]j.T*$@_ ԱG0SO=%o a͑Gi `<)& 5xիtwuQMN&t1ElZmrY#'Us ("ա8 ($Bv[c9&E+O:҃yY7)?&9sDdAaoR ֆDLm8(rC1pm~{"(x5j@% V`?.pAw\fO5@$kRL(~2`BϞ=I9GJ Ys&ŔV#ošqe$   i\ .\ģ~%x6 +M" %WE1?d֬Y 7{7ppM|"1&EH0m 7[#Wn1WAB|7 kOn5PA](OBHkUIAʣZyp TB-i,8 ln;P8^Jq᲏[ZN;  @1xoD6CQ'P R; `GRhέ x-~_Cb~T@V,̙3[4n}6wqXfG5YEݢ!iq~9v#"Rx״<\{B(n\V娐IB0dMO:˗/Xզ*60aM1..ɓZVѩc-_Uk>64J:: oܸI `6@Js0] 1|*OgU~P7txjCdٸAmruy grK>Fc ǁ< (/%||pn'N Xx@U>P8/A<2 ރpW1$JT\h`j>)Sʶ&W7ܰ(#\?}oK xU PKtAo\!A("*%=կ~zꩁ{v B<6{ ϡX )?‰)S? &鮫*#\ȊpWx(ʟmqc@Pk!wЁ8`iդD VB*J~v^Xn&?ӱ))XQ0P8cPT-xdz>Z'+#t !0Q,P'1${$ }Nrҥ!A%eZA -ԩG}Tui%%m=n,-?6 +Z\ܹscy z2Bd qemRq!@1&e\xZu?Rfh ᦊgMzuG>Ҍ @Q (?8IU=)n ʜ?6@bЩߦu7lI_*K~a#pȖe6^{=}'o3I6%$ 4Ҧ "=K#DUn)yk[A;巩VORcDŽk7@E˟d~a Y(?5\/V2 7z)'ރ Nn,,c~ }LeTeĽBEDIdG ogufX W xgX)r%KA0( u &,bMG+_֋xH+IPe'yC9K85R(0FD|iC4veI<{@6,P-ȥ-2⵴(YQEŝKXZ.zuLPRբe7y<<"BN@'4*Ǥx\&Cw,ê۾GgVtp7M _P'TL9sf%vm@MqDl ghz!TiZ4x0%Ӵ';8 J'l93 hx`DhW.$dU -adD.Osŋk"MnL"]*xJjQ'mGcu@K]po [ QBVTG*tvUMjd,lXVlW'N E.F%Xts$_C&Uڛ'-~Gj}+esMT/ -?=4h%(@F/Y3*&񿴿*ws3f7s4V&> Р.a-- jƤD`@ 5<0ےUĥ0g^/+ I΁BuLj=uBfT̛P+Tz#5֟~7#pʦ>h\TMF2XAZ7a|g&|<4{ 2":G e6K Φ&$8/XE\tE>q>T}- Dt`_"@SuT̫$XRjLP 4ySKxҦx0lMl֢؜9[eKDѤ ǁ/nw]<ݚ,D_$`"Yvi@% qW^+V<)פ[ .-kϣD.@on<'M}~O,P7  w Z >0i?;Drd| <s=- ,?:,&+ nq`xlC0@;4/LSRˁ P6BÇҴ04iP[?+_8w㏇ۊp+OӨ.M;v",KbJ@Ӷy{Rl-C\)/͖e3fbZ aG!?0׮ꪰSO=Ոڐ?>CGstx/AIٳ}nk&g@9+|)~^!t#GP9*X\#~?~4G?3;ԚDW@^ e_ 0,&/]T76o[.t?ʏMM?\?53508wyG]\">h+3;a1BxI#W~u@("4p E%`"uB&&B9IiӛwzHe:@ў{炗^zI.zio]O?t8yM;wEA_vӶCB T="N >)4E5u׬[uIn7uQ9 )>\>},2 iz #CnѲuK.4Lwp?>-֞?JU >>Tk%K3]xV5 p'`I K`1TT}J8ty['K}jjm N= e! x9]|#) ?&@-R_S(::tr`ݺ}X/5vbQ~^Tq=x#\@s#_hu 6OSlkXreaM׵S=8yU-rn9pA7q6A^.K4C,b*D8*sL /(}4Vk]"~?zg?2?֊oI :ufV9.'OIu7 #; @ƔRB ;`r]G >s{CaHpdjpMsirV5~D\=i%p%˦@,<;U4>{ cܟK'ų`y2@8nXix_w?^T~XsdpwϏ]6H y=,^|k}76mj3gf.iY$o^ADVO(/2Ư8E8{R }1.[Qmܸ)55eYHudڴiQ^ ſ#X&G s(,ʞaZa|wn]̴f+c%+oM-@ WcNJOrX w ;QA>~skoj(d,NʪS &*SsB Ӻ^/es =6ِ^'üyso'6q B[׽w#@%[au zuȹe[rm]<{p? ,&,HT~7XyXw&Ħx|@ۄÇ7wfIhEZ7 ՊNXWk0 g&M,$`a / ްAV`R|pabqi lv%.m *?agє Jf<#&y} {arjb^nXAׂZ+F Z}ziӈzZhC8∰?GKqaZjC[Ǵ,k_!<3 MTX)TJ@g<@yPrg4{th6[#vײ0ogIq`[5#S~qCuMWW&*}-|ParPUJX1؃;/Q/=q*@`bǻik~y4Ү>X{' چdZSȠ&פ?~|d H]$= XQ {,"J? @..H'D]dIش+"H@4硇V  tRK_w+) 0C>N Pi(2GV:b!k9|?IA$f{5Q\> Oo(To"9u!j6P#PX)͇IRXkUPt"j`%vo`MZ-%13f\xm:?Bx?b~x`R/xl.#{p$hFLf4v,4 &ŋNB8 !y'ΰ7t5l=gvu;GvR}p\؇1fw)]1|[r{ pH#tچA@(CVZBF4*°]r,? x{ǰ)o}3X'Ȟ-:O/*?iV8t݁@'S]tm^r 2o޼]:@֚i! lIT2nݺ-oyKd8Lñe 6;(H&mrP< j n؝xHy/5㼥sHa,}>@Fi6[ܿSՊYPĖ . elMM*"'X% q;›j 2dh7}k_ *m0u|<ҋ6V_U~ zH0'pB{:7 J-BV裏7MMG| R(1$r/`!q7ikHx8$R,ɤ6@:nLj8*״O|K~8c=6<|S1m<հ[q#0y(U' O<â)(v!7^ *0æ3fheOϡ8]CyqƋM[洞>j'tmSq}_:ߤJmz8 84%ðnP^(rp`Ӌ[ "n7裏FeHIR|,g Gk웹=hlz 5.Oro|qct3~΋o+}+Ԫ+pB N.s/X ƢrWn|zLz( 1r@/H1vi3<1{l>燵'}7w󝑇El'ӓ{oxh# Xdy0qXwx㍑l@8un|XD:p'(@oôKo Rab~(@uI'5VRz5f!X'*A5Y;Kz mo{[H @ՃrJmuw+.8 ^l›Q O^Y=@Vv/Ni}/xhQ+01G9o(\C)T'{0Hl7ouEMjW=cw'F@ƕ_79"%B@;<`3H?paM-idRH :Gb4렰GjB.?Y} ㏏눿$]_˜v\[%H':_u T+#cpAxvj( #A1&GE$+ކKtz! ,":E7` ȠpBɡ}[G@14\Xj݃S?{}R_c:xΥ hی|NP,W-t/-D8Ъvn_9b}" QgMZT%W-]c zE+oOVTjDj]wݥ-wmK 8EG  `MiKlEfQژ27|>j罀@jHB$~5`M { PҋAA6! ЅdJi#B1ɸKiܺU=Hq؄-E;J{ dt>'A T4B;B͜93 ~^@, -Hdҁޫz{^:,Nu3hM?Nij: ptY\ȕc :o! ,$%st^HIN!TLdׂ|X]V}_=y.X*M$P$80>jn%NI:&P!AJ$;T)"D? uHWmM|0X: nf5,qP 쁉s5oF#@A2>,\} <@Ҩ*7@=P<'rjK,& i*j/(<<\k\5/RA;  X@<;@b-^9xoN$(]Trw(0+!H yҁ#t*o c.o^uY@w@{K.8pHӀ pa._@c {uܬQu)'eW H9%W {zy #+i=#.#!@Y2AMQ\*zz.}@PStHEy BB1=W. I eq<MuD>ZkOuTG@C9{I߄OiE` Fጪ~I{/! ˍb8Kkx6^u35mGm-Hι cHP)<+bQ֞odTZW)t/͕Rj"(+{hy=R@ HycR +]q`tӐ|y@'Tr IJ/q&:Wz daM@孼'kEi`ܖhq_S @޺+-oR^ `xL_U~q$_W+bRǽgS4T\ц C8PDX&iZPA@z#i[yف $*oR0A(r(9l Kh0.g/l6pmlٛC=b< C(x;8xs4-7|dhN>\,:iN3t>X]v\oڜS7)8*pB]ۏnKMnzh c ޒĕogu_D֓sL98o'OH%G4ͤk#n@_`ߪ`[yo')gi%~yخ+/%جkG_VURfB9lS>-K(x]Z/etmwa9\ٻ0tc@@&p_2ee[s\MxV@tlj^Gb&U")a*e%XP&t-^@ AڡumtRTM^s!pˠqz ItYZMkg7~V>O78m~>|H~G?666sq]~x*x3)Sҍm}i4Su;I\ h:9Ź&w?3:wxiO)oA ӹR9 5]pxϖ5mj4jR܌g6>|Ӯ~fm1>-gvRy5Bl3(/{/99\ =o}}}?r`~A#t,Yt)O OlٲeK=X sO{l3I@TʫyW_mȐ! /޺uk=;wn0k֬`ѹ]ElUn'+/RdhNsٰamLOto:  Իp«&)o^Jݷ祇q(ez /pvBċN?t#FT>{]k](#FX3lذs8'/^VyŊK'P~-`Rv]v]C.if~xԚ5k/#dV,R[p78C9ذoa|ZN*Hx3<փWnY|b>5@%nk+h망dfpcINnHW l9Ԕ!)~`Nj_|^A<1o}@J>!=*/`gQ7\^\VG%=4ܒЯSNo&&"7xR6r6 .5+wnfu/@۟2$(DʈM)$ !}#.4iowyR"ZmlRL[/eAJUvBIt Ha'&+EllxR!xS6q& C/%6 0Nkg$ |K9sB /^ʐ>>xRB?JU'ԠIENDB`tetzle-2.1.5+dfsg1/data/tango/24x24/0000755000175000017500000000000013522554645017033 5ustar jonathanjonathantetzle-2.1.5+dfsg1/data/tango/24x24/list-add.png0000644000175000017500000000102013522554645021233 0ustar jonathanjonathanPNG  IHDRשgAMA a cHRMz&u0`:pQ<{PLTE4e4e敷۔ےڐڍينك}ןqҥoҵnwtRNSB: bKGD( pHYs B(xtIME#TLlIDAT(c`+;+$80$;'Bv+7/'06VvQ1q I)iY9V 0hST*%e*$Xԁ"3  q@-YhA%tEXtdate:create2017-01-04T05:17:35-05:00>%tEXtdate:modify2017-01-04T05:17:35-05:00ncY-IENDB`tetzle-2.1.5+dfsg1/data/tango/24x24/image-x-generic.png0000644000175000017500000000252613522554645022507 0ustar jonathanjonathanPNG  IHDRשgAMA a cHRMz&u0`:pQ<PLTE꟡WYWzFWsGWsEVsEVrDTqCTpCSpBRo@Rn@Qn?Pm>Pl=Olfs?Qoachq_~[{WxTuPrLoHkDh@eQoѯ뾁xurolheb_~CTrĶŲܱ}nycjtnjHWsʝdz·ѱØɖȕǓƑt}kuQQQn}JZuIYsѨҧѦѥФϢΌRSSupyO^wETn_afWXZpvUVWKYp7Gb=Nm=Om;Lk/Bb#6Y 4W'8T1%tEXtdate:modify2017-01-04T05:17:35-05:00ncY-IENDB`tetzle-2.1.5+dfsg1/data/tango/48x48/0000755000175000017500000000000013522554645017047 5ustar jonathanjonathantetzle-2.1.5+dfsg1/data/tango/48x48/list-add.png0000644000175000017500000000315313522554645021260 0ustar jonathanjonathanPNG  IHDR00` gAMA a cHRMz&u0`:pQ<PLTE@5f5g3f4e6g+U6f4f8h6g4d4e5f6f6g6h4e @`$7+ $5e6g9h!7:Z<^4e쟽ߞ럾ꞽꝼꜻ߿락ߛߚߚߙߘߗߗ6fޒݐݎݍݥ抰׍؏ُِڌًي؈؄ׂր}ywspmkjiihh҆جwssrqpoonmlkg֪҄ߠolєܓۑڍڊونم֚ׄݓۙݑۗ܏ڕ܎ړkҌڑk҉j҇׍iҍىچمq 2tRNS  Ҙ_*bKGDH pHYs B(xtIME =$FIDATHc`x`Dk0&5\9),,I`eeBllI`TocOVzG'6v8`eme 0\\-ݬ=<}|xj 4 {CBBB#"j6PU`RrJjZzFfVvNn^~AaQqIiYyEeU5V B5u MM-mmee啕U]X5wO8fr[۔ӦȘ9kX5!ֶ)y|1ǹtщsQ[Gib4,iR4,[ Dhb] ED)WY]kEe$p..T.&n=0rDԕdZDqV)aM7hi(uH`ANAY[MCYzFZ`+$pDLBRIFhx|. $%YY9 o@VL\\BBB\Q@%dJ_ZtEXtAuthorAndreas Nilsson+XtEXtCopyrightCC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/tEXtCreation Time2006-01-04׼R%tEXtdate:create2017-01-04T05:18:10-05:00(%tEXtdate:modify2017-01-04T05:18:10-05:00u*ztEXtSoftwarewww.inkscape.org<tEXtSourcehttp://tango-project.org tEXtTitleAdd (IENDB`tetzle-2.1.5+dfsg1/data/tango/48x48/list-remove.png0000644000175000017500000000236313522554645022027 0ustar jonathanjonathanPNG  IHDR00` gAMA a cHRMz&u0`:pQ<PLTE-i3f5f7g5f5b5fEs5fDs5f5fL B Ca!Q1q 11IfQ0 #و>>|tEXtAuthorAndreas Nilsson+XtEXtCopyrightCC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/tEXtCreation Time2006-01-04׼R%tEXtdate:create2017-01-04T05:18:11-05:00X_r%tEXtdate:modify2017-01-04T05:18:11-05:00)!tEXtSoftwarewww.inkscape.org<tEXtSourcehttp://tango-project.org tEXtTitleRemoveg{;bIENDB`tetzle-2.1.5+dfsg1/data/tango/48x48/image-x-generic.png0000644000175000017500000002113413522554645022517 0ustar jonathanjonathanPNG  IHDR00WWzTXtRaw profile type exifx՛Y8s߱ /x^(%RVWvvew!Kr^r,1j⋭w~]ur}j_nH^ԯ~C'#[~#gusu_\OcsV|2c.w[>N=}37z]wP:^ ⛍&|ݶ}Fkn5ZX5"_U,㱁7_]b,^ƛaYftv-ox2&0>5e=^75tf/zv1:?mżXi;pYMöR7:<3 .Z0_嶟J0i\`"L8<#md v2smx`Q 8qN26$`eG&gy31T ^bH!jtcLQ0&| )r*f}9s.[J,I\JA+]WoŖZnNtC=K7HGR#24P~gyY+ʫW7kxvk\Nх8 3Oof٩٩٩?qNkdv꧁OߤŽ77iT&|%-q@=injV>W8BWTOՖGeܰCZQo#7sϳ0;ٟ}/yHld0:=i7Rg^ٹ*V]WMYzkXƭXΌr?56"33\sPk%6fvT'Ӡ̠"5WQUk'\k0bf$k:H92/2PW'Zc񤄖O*.wsnsy4m6*x!,edۊT:䡞ka<L!Z!t狤Qt*ĺ,!R` DU/bVMƴMHW"muOX°H\˗cZ}fvoz%n0@^V!RGmobӗQl|Y2,IÙeg4Bz~lvrrZ"SGN&a-G 씩>`f df*t#AhޘO5f֪ "$;JK״E$߳*nFX6h_fR+*DM$F]ϝB-ˣi'Z|:4KXGOAکzI2"ŽU){(JJ;R/ lw:5Gw)Cd2Pt;!JzHW~*~b6ԇFomN/xL]Ka2p%Kp%2(fqA@?AŒ4؟յֺ ح{aG.Z1CLkO7Kȫ4h"4,Gʴ7|^u'5]G‘rD"~.HP=6 > ]pp^|T:Ut>g[םwvo< Ŧ"/@OyGSZ * ^Kg ,bab+.J=l 89z" ֽ/SyH5Ї(nr}h]0 t8VpG86 wJ+:! ,@-9գPNJC }W)LK~Z`@7Kpt ~d%F# ºK.qo Rt`5Tm.%3,h.4wK@kD:E Q<*n\YXiaxHد!0<*!Ը}aN1HlC9qI*,OZ꯬e3ԋv\;%%"(!pAZ̵kD")[Μ|PNC vCw' 0wiSG"^ @Zҷ'7OwSpJ [|s震! ٙP|( n0FUypsg3ؕϯ>GOmg#˲}wpc( %>D/z6iMzA:V9F]B ddE"HPAn9ks |UbhO.m0| "\rv[Z[ϭ\4qhϪ<>Ai-+c`f`YAl3HP~M4XaDFd=,"YYa1nFD29IV1DM%( }.T`4i]xn0 wMj3) T^$[r5ragˋ78Fb|L0~]q)ݲS1$5_S} ^ܸl^!af]OFYNܝ斴){,x26vosq#'ʖ l/Շ({ "1㲺ċ(>19phL~ݏD&0r;~L]ۯ889' Jat|bZDD%4"e+?:Px0M!2%dv˟$(ռV],lֲ;szf Z !;s&&:a+:E&BFB̌)7 `B*^byVFpN64} ";[D̐NyX h-'6HI^B-:]YJr6-%krT H"&C` gtl+]`V5$TQ;7dZZ" a& dB@ؘh$4xHd"_qH~ rtoApdlKR{PjQSPǞ. 86Mf@ Bֲp4FXh}P\ Gyͅel^DŽ,0}䪷\d"lq&;SԷjb)796>we{2{GF k;Ȇs;@?]։5"0$;DXJ( JPJJg|I2gr 92T> uK3uo&B;"\XJgʱ)2!Ldu}u U\#+g <<]r9QX)EXle);%TU>UeӃ`mgPԴ n6 EiUYQ< "1pPZB"KhY-A1%W(̒+S M )?fJ3$-|+NJ,zTыWϳV. P')F(iz"'`nw(D~P{ٞi$-ᬐ4.Df H,q{O])^}BuR[p7r?p&4ΤH&E5EI9W9niC6OP"Clĵ7^{&" j8kfY(|ާfގ\Oo)\W:s?M?ԏV~Rbwi"TD(<$υs( u8 !5,H#^ Qv|Kh{%!!C:lɇ ewU T*yVO }RyM'73D.i2xo2杔tE٬|4&iGX,VP9KmXp &P թRY=WHقL < 'Vk!L&e(Kr(xԸl偹s<)0|Ct:<ruѶ*>~]6C 'e4Pp2#JQZM$ٙ~!HC _,p \';yhdLΠO”P(&Rb\kGaE ,=zsE]&''"}oX@b0 y ! 2znrzI Zmjxkni~u#瑑ERuwcqm+Sz1lg;^ dvuvn𥉉a/}dH>d05bA}~ps2)3S>}ߌ믹-!Ki-"]eX=,8r1#)>TNT g r$)0 cp 8 }I򗗗"G^"/v4=l Drڪ_ ~HΘnW7#? o\myd__x5ۋToj>F-h.Cg৳)sGrN9N4pu>i/o#0(.+]c&,,(2:ۗ9_dδttȐ<)gQY ve/;?}'V˴:PAu^ebKGD pHYs B(xtIME  IDAThMG_;;;w8bD)'"9 K( q͉CA 'B"X8qHHqlGLW==ݻ]?I骮WW5g{gצF7ov<ܜ~NK8/*~9< K>ѳ_{6}1S?"P'`AҥKurLP]3<RJII`YKm.P!>*2Wޏ҉͛qG9*z "em[76&~- b{cwm+y/0 w&0b8('^*hX+K f~t?nSLeR)E8v^L:L5opC~X;+,A9!Dv@('>M_s/z0H&ڨ YHջbU#͏۹$D@DPJ!b <ݲ]!ڭEfzLC픞+^#3ޓ(\ HI'DhL&޸{+gq\ƾ'@:F DV~RqYZh8McڲK]ϥxK2yњMp~OŸ9o1՜/(Y[ZY頳 37=!Mn9Nj1!*,eh?JÛr߬(ʈ]Gỵ`˫-6R\e1!q JYT[۹%I?tVE<45w,u 1EM9U`RIYY6$$33sLOMW,ٞ; @hަ=˕g-V2s{kמjiI`R&0bL@|pٹ9?~ly8ss"@\i "֖$͊R~e-t:@sf/sǵ1q."B5kw ڐ6c 4Å;?"BE}nݺ`0 T)¶*RܷTlXkYYY!2,c00 0VTw㹐ԁd4ަIf8,т|Ư~bKh?y#} ltL0Ά_w\tG'sa7v$$IB#i_㕥U@WR*}vtn'fDqd8Z^=打@$%[#`x3&""puvzk?{ͷ~tb`X&R!ƩܧGvtrS\{g{gId\IENDB`tetzle-2.1.5+dfsg1/data/tango/image-loading@2x.png0000644000175000017500000001626313522554645022035 0ustar jonathanjonathanPNG  IHDR>asBIT|d pHYs$$P$tEXtSoftwarewww.inkscape.org<tEXtTitleLoading ThumbnailtEXtAuthorJakub Steiner/!tEXtSourcehttp://jimmac.musichall.czif^XtEXtCopyrightCC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/\IDATx řmco\Xs9V֋Y dM+لM8{ + kvs``.yvM鞙gOI鮮_}Uy*******"[Ymmm O[zzzOK_shl ~?bĈ̙3g]Y!]bDb<32Ag ÇM/Tm+CǸ&x5QE}O߽w}W|Aw> ˆ2?@0`w'{s6GqwEy9f5|_}„ !V:::8@?ՌwЧN8}/}WFZ%W$׳ 84hPEѯdAݸqWY GeeZ)ˬ];z_O7Kgٝ_bEC5j6d"ի+WfI&m՘0yll(,Yva Y GݫLi7۷4y\6D3I}-׷0V0@eDX@n`8lD6cع4 P&EG# o$ꕮJ\/Z%~_%"$;,# 3d e%ڵkI5W\gܡC&޻8T7u* p?.Hs@ߘ}p@i&V_$}3 0/q _jH0\iR""Pv[oĉ&/f f!QI yw>a޻,(-6MA|W^^}̀#]*:x`Jk_tT駟z0p‚ >f|VKH`Q`yvUP쳏! +Tڂr )``ȇz}ݍY+)k KB|O@6t-= "nt~30!c . ٌ}?e?b=ygΜio{-iKKfKO?}l*nbd 8sɓ0jP$s$2d>t!m9h#TLf #"4Zwsڌ`.sY_xsOp|7 0[_j~Gsr?_G =>@}$ 0]wzꩅ(^w}##@˗Wd7sQ5V!ҥϘvVgBQH&M4>`x)7&JK}M^^qN%e(H0`~tmmA$P61oܸGV-!ThV 7gˣ !D/[,o2I !<;b3f\;[m&:u'o51; r1cFUn%KhC&-]0ptyPh;"|3!"};O1ڏ};͚fns𡾧vo0 ̉Ob<Sy¿eR0@Տd( QʶڪSh࿉T߮w+j0vtP+5JA{|y׏F:9gH{ڠa%v.' @򪉨IIƺ_'tj _~E&w >W.c:lFBZ¿z gk~7vxKyS#=_˗`/ KW_}w'z{aH{(JK5Dt]w@1[a'f!JH7L "}:l4/a {@&޺e^L h=;l'ڌ-H=&J5XqR%扫2;^x 6q={+0ݻK5'N2V0@yʂ`SJ6kӪm8t]` }n԰Vo;;眳[gθqK,ޑGYlf? RRn01l,P%X?YF+Ke;gϞm=)D 2?΀@\M7{sy%޹mrŔ??mi::*k bk1d--OzocKlcNR6C{yO g_:ӨC/Z/#`nnv=7UGj$8qϒ|@HA B0,܈f׿;c a?i :>iU~xawU{̟?ߛ3"(< {!1Zǩv@$L(8ď8| ף>'? :@_3,{B_uՕ>@<ߘ̀vE,  z8eMfG .}@;vZ5gkBLo% g?{(o_9ޭj#=~afC1uVttCk U$Lq48UnSuB]}L]UIr;z(%:tX 6T[Q شq VؔpAayhC6Tv 9̳ %=Z_Ub jy{e,sBtu\tܥPpN1p$y!4$׀+7vA>pf/`Iw^d#FMe aTqwBRL n/lUa&B! SIU9jӟڌZ$#}-9j`;$˱BjᴌДn`7@Pf ; A!R9MfD0Y*H?f %g &ZKF.x}"XU3vڱÞVE` lDMkkeaÆkF~ض:i )Zz9]uhۍbvvV^K 0/c Bf<*3:6u 2@PpVj$<N[dɒ nҼlsޕW^e(FQv@W)5\jSEI#Ro$ " b)80q[]xr 6+|&a~`Q~ f*u+]/?cuEnHq@[UR})~M0 ڀU6_8WH_j_@]wXn iKB?ږ!*ec9K !`( QM3M^%zWmE -J! l""Q펹h>F- RAy[ PWkyq\SLQ<%l=D5kkn;t"smblQSk%`Q%lf Ȯ#p@Oi/J- OZeχIENDB`tetzle-2.1.5+dfsg1/data/tango/64x64/0000755000175000017500000000000013522554645017043 5ustar jonathanjonathantetzle-2.1.5+dfsg1/data/tango/64x64/list-add.png0000644000175000017500000000450013522554645021251 0ustar jonathanjonathanPNG  IHDR@@iqgAMA a cHRMz&u0`:pQ<bKGDC pHYs B(xtIME*J IDATxYKιU=nje6Ɩ(x]vM+KHY?`d,GH/ bŏ؀gW=9,n3CBnU{<-ZjZjZj{(4Aʘ"D<h7_ܼYb:!%Q* ham2FS߯,1ÞVhXW ܞżfF 24Z)7IW !t‘úMV(@Vê٠%N(6zn :3{Gfl%}aIHp(@4} %BSo"Pt΅fZ=] 3ҧkgsG%8* `XKTPpժ<# b2\~m:dYE*󓈙l݁-h^]Z cI 3/#(5` +rO7<[cF hB'ØXFVr90m=Ls.XeDϴ| D҂hڣVF{qKBqĂXDq1C +;kqU*"A,hČգK쐹 xA|p:['1ac 1xG 6< " 7C-b|X7g4}l;L)|Q)bI%|%pY& Y#VF0 "lDF]Dw[F,n#Pr&ω&sJez!o %Nl"ؿjTX:O: Z„q Dl];D5)Ghu c-u1D*(8BMfۄ@<0 WT x+ityH QrⴤjNER0a ֛8.4y o.^%b[ 99Kc1 o>@dDZ;}V֞tILad$lu gGğx/_uKO؊Z7Cpq=IƸCY}`nض!lckc6bL4yʋA4 l .c +]nqc&025&<)Fb3k5xϏL~MKWA%?j}G\{d&; 䦇TWko]3S4'5vB mq%9O2]<~ eXz+aߤ}n8U^xFme#I D !tW 4АÑCy*1(H,E @Ŧ$\WwvN'/iȵƙaQ^ m\Uůj"F9XU4(mFt0T[9Kal Ș n *\SJ;y_L)ū(1= }C1iLnk@DHX8U35I$+ %d$ѢgV}f 7zw> ,)>T!Bh{fn5)1"Ѡ"; H =従!{.GowQulRK-RK-Բ+- gtEXtAuthorAndreas Nilsson+XtEXtCopyrightCC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/tEXtCreation Time2006-01-04׼R%tEXtdate:create2017-01-04T05:18:42-05:00!W%tEXtdate:modify2017-01-04T05:18:42-05:00P 57tEXtSoftwarewww.inkscape.org<tEXtSourcehttp://tango-project.org tEXtTitleAdd (IENDB`tetzle-2.1.5+dfsg1/data/tango/64x64/image-x-generic.png0000644000175000017500000002373513522554645022524 0ustar jonathanjonathanPNG  IHDR@@iqkzTXtRaw profile type exifx՛Yv$9l^`[~_:=3I BQQhi\>C8w+O{\wݷuqr_ø/\?q=}1'=;u{n^ޖs?KWD3;9uO%Wn炙T}ٗ|!aT.^cL1ǒ\O!ŔRN%a>MN9R0tԳzU_C5\K}| -r+=hz깗a4GqGt~gyn?[VŮ\|Y1>/aX<8)^)fG> b5ene1,x {i{YfoLa9#ݖm/Vee (N76('O 0Jm6MI:Gs |[t~6omͧۘO17o>oqi^IoJ泶>]\D ΍U_AeOXё[y(qtqw!z8tі[1BZMfL1TW-/6{ ^Rpt@s(Pl;" ~Y}f} Y0uR:g\Y qY-M~~Y@9 ^}JȂ4+$5sQ5^3?{CO1h+ 2?*1_E闌Λ+[NCNnn*z623-~}We?=eSqkNس_mݶcK6ϡ}f@X&j+a .FeJ8BRK >b_XJjQ.̴V{$e M>k'TuGeKQj26U7+kWqS)ٜ 3t9"'7"t?)k2|JgEiu~.աnv!qT}<5ԠMqͥZtl4ǡh&S$Eۧ~˼ ){|Hq#UA1{"z{ci;u Kr(;0rrK~v9>^ʺc'PDysA~:C㫂n^o^SaY|%f=s1vP}))G<-m1X⒨iqn&# VQ9!@5cZAj4LbڒUiY9HSJ2`i[8g"i t@ dD ˥+V4K+UOdzQM9]I+ydw\f8W1BF 7J݄HZRUNB%r 5ESC:I RkIb ǥε$ΓͱKlY9㮅ECsx#%T 1=Ppj湢U $z.dV|('2o]ճw Awm<&W+~Ǻ WE^V _My08Z&WsP㲤;<;ЊWY^4گ贆Q{ .k9B͝OfluEeat3*_(|c ŽJdPjWT4c6B p!靣@])ܡ*4*F=!́ 4,K^͎;lM? Ys/1)"re`n4U.? $5Sx bA% RIcD\rPfLqEp.dXLWH{@s*w I(Duf,PO OWΔ+ 0%@oZ5ʰ'3r RD$1}/dɨ!jp,n#g_g2r[l9g%Yu`Bڄ:j?4~g|vo/yk0fRW>k=:k^xX-}Mnz(vupC| #CI+,U EժXU"={BS@H}sݣ{tPPe RovcnP7v߹†+#c~f䀹A%[K"1b.Pé-[OCrqM;N唡c1 r-'Ofݔ]{*1@.].Ȇܤ꼜`m;tI)qbMyV@?ҭS9t e|!2۴ ͚\RSiwwHY3䈘sjê~U'+D5ِt?S^Vr=L9#yFֻwUqW3{h;:{,Qu?n?n18,^q2U?D_MG0䓬ybk`ȝN̺*r}#|UکP/(fF]Y}5=LI:qԉxJ!& fxê(Rկ#t cY+{3\]$|jB01TR/n#cN5Թ QLr>% L7\_lN"f'\%(N:nN >W .FuJ_)M-!+;?RתU^;5SˉBإhۣM7i ] X2c,7!W7z؀tEa c$;U~MR8F"uv6QvJ@$"f?joC~kCB/ހ.UX$]ɧ!qpO>!ARGԡ2 ԈS`BbZb+ ! a:83ՑUW=S涰>/tm;quDDH-Kܤ=]H[+Dsh=>ԉEYp"`2°CtJ@̾ʔ\kxcЉн}ew/k)/<6u'^C2_r-؇\0:קC K}Sxy+|~^uhu(am\NhZX5Fj#^v%fu,x́!6KP+V { R(eVXcE~JM`Y5y:ދRG[jj441uD5.Iz.vO2g`ssE{wWA !!VQsJNCzNlQEvOϿ>-߽e^|Eub0rzPTR`0 4.vUO}O;RVW납ґ38s>!fnZU~-XzWVULe!3xsSi]Gc ƷEeչXcƼwg XF1ө!s+2((* yVscRJ|W,cPӀ34oM^D1(" s`UEep{} 0;#;w)籪1`!]S`Zz=aOd^P2L GQZڴ5_Ҫ2́dypnyWKrџִ8ߎZe٪ݩQp:FC(bl:nGs{]X0MrT_4Ox17v}:ggk<Meɔ+ħ,ǎ-"UZN`E9֙9@[A+YX,z1Jk[o$\΍vҿ(:y Եg4dN9kU`(erBa 8%]xSloDv0&CQk#b4QGCUNsJ$a9+<1NH TX&ϕ+FΠMaLoa1n\}efddg:k'g\da1$ mqf/v* p,(78d`',LȽ%%,N/HHya 6ϒh65ˬ!2\ZT\:I@ z QՊj$)pk nuᔏIB,IϐT#$m.-7IQO=E) c )!1Js-ڙ,Ո8;DS*pmiYp@;BY2oiEʬ3`G z#Bc>ǣ$B)hw" u}Tc\SM=-ϖ!Cs)΢ !l0)tƘJi3 Hisc;&rB:2uE==`6MJBj3bLT1ܾΕp>CU[uY. ˼oXy݀Ya9<ԡ`0d*X&t`Ls%W HxpMN&8Rj6d3>,w]n1DtXSӳ2P10rbOkmuK]19eUݹ.ks ]oHYݢ\(jl>l<\(~5(O?[{Y[l:AE#xaP&Dcjrz`<ǝ[dtJ˜&w00Vi{bllݠwyGÔ2M-]#U5nQ4ABSFp!)csHiuH+-eXx#"ڴ"$>DMY:DUlgn}GnҘS^v-frJ"S}d{j&䵥>ֺET150PKpRJH0ƹPZDU9J8!l>U9kb$)qxcRjsIڹaDHDu%BSeݽ4_lԡMI:0+DB&BD){{ CBϬ]@ꬽ9[^II(ׯ/} P .mr.ٌtJlJr!"ga ٔgolzM.6$fU$M#c@&H\kBKpFm[&ivUf3YIUU5o[_'\P:qhuPSfSkʲ(c=vJ_Tw SM=byqzG '!Tu[eYRV%uTT?U';PUMP~]i_ oWLjP5ʗ%U$z$}wcR۵c~%]bL\D&]7xGT7)yAu.ܥ];9hxDU61*bF+ܛLo޹{^o=TR1c|(\b!X'cx2* 4%RLeIQŬ7:9f@b3;_eXO鵍 l[yܚiVZ7*!HqZhVn}|W~r# X'Ó_|w9Xc!Ǔ_7?[:cl\_U up >hSJVE_q<9LTU,ʃO: 1E7Uo7y>hۢpg,mU߆|;?HGQ 'I{Ҟ'I\_xNbIENDB`tetzle-2.1.5+dfsg1/data/tango/64x64/list-remove.png0000644000175000017500000000272313522554645022023 0ustar jonathanjonathanPNG  IHDR@@iqgAMA a cHRMz&u0`:pQ<bKGDC pHYs B(xtIME*JIDATxM\E߷{z`P! Qt./(".\?\AplGu;cLXm>K+` N";$Ga= D"׭@ .nA %m ͷ_G\ 2 B r: 璚/bڜ$q>tdym6$noum7n_:|-r/{'[J'M/1l}t~6[UumأHDNN89]u6H*brh$Py{{-ٮS;~Q]̄dE4mȴ-(V $`2$8[Ԉ!Щ]V6Y}͊mY~ ocpe1bELa Xfug+Wm`MoQL*{Ln~M@m$&T`>S@l ɐHX[_67+6@(!7)Er 0`pMKBU'\?I{sj$h#eS#^ㄵmYlV==L?Q$K_w=@eͯ>,(AGEIcq%&OQ*!D|G{fC*|y$$aw(r>9&f/Cfq5$ yvMES B CҀ#a$9_| dw|v1k,@k˲!sYFW{߂+888888?# tEXtAuthorAndreas Nilsson+XtEXtCopyrightCC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/tEXtCreation Time2006-01-04׼R%tEXtdate:create2017-01-04T05:18:42-05:00!W%tEXtdate:modify2017-01-04T05:18:42-05:00P 57tEXtSoftwarewww.inkscape.org<tEXtSourcehttp://tango-project.org tEXtTitleRemoveg{;bIENDB`tetzle-2.1.5+dfsg1/data/tango/16x16/0000755000175000017500000000000013522554645017035 5ustar jonathanjonathantetzle-2.1.5+dfsg1/data/tango/16x16/list-remove.png0000644000175000017500000000036713522554645022017 0ustar jonathanjonathanPNG  IHDRabKGDC pHYs B(xtIME ;"\IDAT8푱 Pi:+#mF stԶ"DO!ʳ3w&H6暺`?S-FIENDB`tetzle-2.1.5+dfsg1/data/tango/16x16/image-x-generic.png0000644000175000017500000000105613522554645022506 0ustar jonathanjonathanPNG  IHDRabKGD pHYs B(xtIME 6IDAT8˝MkA4ݘॅ\ĢSɃ@g(1 z @ ՞TD*C"&nٙab !{fgDQ[3ZyBQ3ZjQ31nKVWpf,µM4(HakM0؂33sZ$(l~{?CR@4yò,.1SrzoD'S@)_@JNh'-\̟.@:} b}x{_ʧ|=({hmh9%_}z=oj%1@usIo?GN7.nքaQN&x3iv$ĉqǨLdk&|[Z? Ƚk^CrB0EJXᖋBIENDB`tetzle-2.1.5+dfsg1/data/tango/16x16/list-add.png0000644000175000017500000000050313522554645021242 0ustar jonathanjonathanPNG  IHDRabKGDC pHYs B(xtIME DxIDAT8͑``rҺ`6[;tqDdZ &g7Z,Vi1v`9=0+n/\ϵUR>.009xrbD["[-$mx\9XwV2@@PiAkeRjt&Rȿ&ROXNOӅ43kgO=TrK wIENDB`tetzle-2.1.5+dfsg1/data/tango/22x22/0000755000175000017500000000000013522554645017027 5ustar jonathanjonathantetzle-2.1.5+dfsg1/data/tango/22x22/list-remove.png0000644000175000017500000000037413522554645022007 0ustar jonathanjonathanPNG  IHDRĴl;bKGD pHYs B(xtIME ;w({IDAT8풱 a F6n` w#8#aֶ"]Y؈ Gx !$_wnN=Tzn?Y+FMIzWvgHi\o$p.009Ʌ;,pp$ݥUIR Wb1OIENDB`tetzle-2.1.5+dfsg1/data/tango/22x22/list-add.png0000644000175000017500000000060213522554645021234 0ustar jonathanjonathanPNG  IHDRĴl;bKGD pHYs B(xtIME ,+IDAT81KA;OPl,J4! I [-,lr s!1 Xd`af=vVc>jf;q`iݠn0V?575)w)C*.O2"1o\P@Y&v xz~G3agΉ„l=wzS6_ɽUZ}ET-cG܆f%Tn7W5Gؕ_F/-[->`|^4le'IENDB`tetzle-2.1.5+dfsg1/data/tango/22x22/image-x-generic.png0000644000175000017500000000160413522554645022477 0ustar jonathanjonathanPNG  IHDRĴl;bKGD pHYs B(xtIME 1)IDAT8ՕOEޞޝf1D#Aѣg!G \<+xYL uuE#nc&̄=d3;{ig2hbCQUۥN, ,cX91Qy>M!F١z@: ,VGgÂI>|?Q)[@oeXGm#?Œؽ`IENDB`tetzle-2.1.5+dfsg1/data/tango/32x32/0000755000175000017500000000000013522554645017031 5ustar jonathanjonathantetzle-2.1.5+dfsg1/data/tango/32x32/list-remove.png0000644000175000017500000000047513522554645022013 0ustar jonathanjonathanPNG  IHDR szzsBIT|dIDATX!NCA}k8 p pE3 HȈRҤo+7$I$g_>~r }绋ugv.^N@)5Ng= ^HKc/Jj{kT퓦{5Sd L07-Mj%/^^g˶o^UFCj.a&c?pb>RUf/I$I2odIENDB`tetzle-2.1.5+dfsg1/data/tango/32x32/image-x-generic.png0000644000175000017500000000221313522554645022476 0ustar jonathanjonathanPNG  IHDR szzsBIT|dBIDATXk\U}2I26MlT G/',>7 AKQJhhK-VK[L~ə뙳/ˇImCA^}{7^Ź>xߝf-"xhpNNuNv.&Ja ϥ=8voLԫ\DH,lu~H'P $\{}|}^T*@9 iG_;[A) P:H.86D+@aZ=˩FV]]=#5]<ЭL:HJ-o{ 6"IeO^^* kn,LHro!K\6wt4A6qi6YAìy$7: mOP:BQ!TȌlɤnbi_FWI'e Betnz:sl:E/1t$pS#$Ą2"1KҿMvy]aH2Bq" "!?z}uiET֗9.c-Hy.0@kMP bAGuPG8gTKDi`L*vzsc,Ze<aL-9hFRp|qok-Au;C4[+k+9wf@)ŗ_;w/cZxժk̜319};9y0]]^x܅F ^r~AR\~pff~ ԁ -NK 7</?nײIENDB`tetzle-2.1.5+dfsg1/data/tango/32x32/list-add.png0000644000175000017500000000113113522554645021234 0ustar jonathanjonathanPNG  IHDR szzsBIT|dIDATX햱kAH$D+AX?B[CF+AA\aai#v"B,LD"hlryMv݋Zx ;70cDU۳z?v{:d֕3vO"ae3No3A d홆9{!K|=Swz"(-g˙Z|w͛ܐOK1ђ<'!${V3K8̈́ N΁u}'l('Aq)m/Ǒp0VLq &o3 s R7~1j>,$jt mPcT&tlV%~~3# jiw] (0[@ 4w$H^wIH|4N rZc'2Se_T0/]X&΍-OV +0JOhC3o? WLvIENDB`tetzle-2.1.5+dfsg1/data/tango/image-loading.png0000644000175000017500000000634713522554645021465 0ustar jonathanjonathanPNG  IHDR@@iqsBIT|d pHYsttfxtEXtSoftwarewww.inkscape.org<tEXtTitleLoading ThumbnailtEXtAuthorJakub Steiner/!tEXtSourcehttp://jimmac.musichall.czif^XtEXtCopyrightCC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/ IDATxYlm6Lf$jP!&)MB󌢨*4PR@kj<0̝:*#;sg?-ZWǫ|]|999++322#_&~pMߙVZUd_V"233W<|ܸqbp?vL"aD4 6o߾}shJWTUU ԣG :w}XܥK5}[V&OVX7innV 1 ?L=̽b)F˞竒Ocܹ?z YQA K0wMI%BO$zj('aؐ(n$@Nt3 ;Drdw?w2Ǐ0 hmmUϞ=<3SEҞ[ o\O:T3 ޳oVW\QwU>T---r>;;[RUQQ T"AQ Q`^I߯Ο?/daa*..Vz77W#pzvٳ۷***RGQ7n‹: aaƭ_^ ?1kx-))/߿@\xQݺuK,++SGwڶm?\!:MLx͛ǫFc޽{ #GVV_OCPyӧOu#'OTgϞW:pZn5k\0 H&D&G3+<`U[;[1L5?vњ 'Of B 0<+զIhD F]򛕯(WS*n+Y"Vm3J4i3$[ fy *M19v옸 )S!C ݻ}Ǝ+ *>0I;X .HCu6z :aw;MB}(t`ƹs업M\YV 2^$QW 8K+65Y'ܓ#nwMV3>'o&iXeVo!ya1-yppyh:1D&F5u[ QǼv$P1MVHfgXfE9X Qꢢb.޹(\7Tv։ /qv^0 ( tz_d2&A"յҥV;v|x^q"޶R+VP?Y¨2ϖwyWD@ jO6 1 j s|".X@Vf T ./]$gdĞs O%?[dIoMKhu3"f_#߄ j_ kZ\F|Z'.p̀ L?!Zm$Xg?~(,ZvZx'N?cIR}_%'7 zC5Ns tr8Pfmoo DDOƌ6}}_OcP|r]}"]1 Љ =WǴCee:tP<>06??O-[Loύwq* *{nPD0cm )JuPdZ7&T^د99]t }J;mϞ=>!G"<j]vvhh/8$ ?xh߿Gi]WW'@_EҺ;f"洱 l"]"3}/fh|7R'j!{ƍ;J9.vZ9sNjVӧO,\SL^D}6;::ͺ-qLo:z1fPvМ9s$4vSRa#$&3f̐6L@X1hpmڴI@cS,4<`'𾶶V =ĦHtܹ!&Ab 24p ftDC[lVLD 5 {S&e ۷O?~\VΏ,laF F`"Nq0'2LbMO0F@!6PT0Jx<תWbC $ì0Fz t2F hI --]b…UeݺuC\Gܫ&U_*@t .dYI  `%`.tl/HHia[a w>Ip.]kS25 ;N䐂3t1">y9#; 8<@#q 꾟;FXnb9\H$/GB6md=_r㷍huFs d:#ˡL+jD}BlgdY2qĠx8h"Je;lm0tiʚ5k͛7/Y(YzmzZ-ڂ0>`/S-\TyIv=]̱Myh@3r?thb-" CFBundleInfoDictionaryVersion 6.0 CFBundleIconFile @ICON@ CFBundlePackageType APPL CFBundleSignature ???? CFBundleExecutable @EXECUTABLE@ CFBundleIdentifier org.gottcode.Tetzle CFBundleShortVersionString @SHORT_VERSION@ CFBundleVersion @SHORT_VERSION@ CFBundleName Tetzle CFBundleDocumentTypes CFBundleTypeIconFile tiff.icns CFBundleTypeRole Viewer LSItemContentTypes public.tiff NSDocumentClass PVImageDocument CFBundleTypeIconFile XBM.icns CFBundleTypeRole Viewer LSItemContentTypes public.xbitmap-image NSDocumentClass PVImageDocument CFBundleTypeIconFile bmp.icns CFBundleTypeRole Viewer LSItemContentTypes com.microsoft.bmp NSDocumentClass PVImageDocument CFBundleTypeIconFile gif.icns CFBundleTypeRole Viewer LSItemContentTypes com.compuserve.gif NSDocumentClass PVImageDocument CFBundleTypeIconFile ico.icns CFBundleTypeRole Viewer LSItemContentTypes com.microsoft.ico NSDocumentClass PVImageDocument CFBundleTypeIconFile jpeg.icns CFBundleTypeRole Viewer LSItemContentTypes public.jpeg NSDocumentClass PVImageDocument CFBundleTypeIconFile png.icns CFBundleTypeRole Viewer LSItemContentTypes public.png NSDocumentClass PVImageDocument tetzle-2.1.5+dfsg1/data/mac/background.tiff0000644000175000017500000044573013522554645020706 0ustar jonathanjonathanMM*@4& !p|JC3PyZ?$r4zYdRcәD5/cT)a&Nf]3AQ 2ENI*5ֹ_XlV;$A9ee  v¬4&}\RˎႨKٱW;+xW\>vfNOߴֽW]yl\؝MVo%RJƢ59ͮ<=[Sq+cϤ9W{Xk -j>OֹO3w+oMD 5 K2/MA:ڳ,-+-T' ?pi 5! Ep%3TπJOL&oJ(rRlȲڶJo-)"'OC+K0,?M3q|B@XNMb20[>@3aΏC4B4\m/LHRoWJQL $.yZux|oC׼IhZ4=쾓^qPW$}צN,77PerL5e|ȳV[io,JkUD\JoxJ94y q%r٬GK lb3.q/Mn%&riZnqNxQlCZ}wv7^O5Fl9Ĺ5Ăs['fCc9+˶/7c'ޱtv}n^v--E.d 4et0JmMuj#N.XAыȅ y|PGU1Vp,V^}?T8qI>US[G(ΒqgN{P?_֓+V+QG (er|F0]4y>Mnj`:T8"ҦYSaRL#rm~GMǎ :Vu]MBdwr#ҁՙT:ZIm,UR(d*/:q-r֐RK Z=#6NȆn RJcb͌RB6# E6c@fpJASt{6kXmjDKh%;*]ԉv>KU.Er_ܩ+5jKxvʛ] .OYwM5ެqz^ۆf5ewjWg(E}T,Ƌalk+]- ]aK]m?"8:_ZQB6X_if*ƙd' |y68ѯȶxlN"rƦxOV&SoVLۗS:o8FJPs rF8Qq َvMW+dz" hl}diޑwH']@iU, SSRo G޺-']{#sٳXfSڥh/ﶥA(?傂ab6%ҘAǦ/?,~Fryr(Yq+Ҕ@`"JxJսb8">eŽ;7ٱ8ocl۳3BLnvj/Ewm+ 6o2=F܃ oj&PR &Y_PjWyޙD7Չ*=DpcՠHa(s-וȍ6>~Qn^9r<'3&Gy_@3ub{˨B[8>:KzX~|_HmWʼrO{| oP5HϫhZOTx.pm뺧ƤBE@ f,\(Z;LȰp On,*H4πm0kjVLjo(o*9Zwn6o (20z-S kX缩/T1,ގ# 0Кn KfJy J'lЭХ)*BtvZiE̅pL0Nvܦ/#No&f|?[ ? |ԯ. KN>Q -|= /AP4hRC#%,gu1nmO r!i_ bM>qSOvnq'gc t:)qap 1n!JSR& 1$"2@ǯۏTݍPb2b7/?B&ʙKW(G/e(oQ=' f*$.)+) m++$q,A.mo-R<$/ko52a+lB3 226cА18Iqh1S:H)]:n 0 rqm'ΪnpBď,'q6G-I6;1 $S`[  ﯴ2^ 7(K@V3Qp'/VOF.%DE q+ RXM\Oo>4y>j7- >23flHW5"@094-%@)@W$A8Nq%T "5CyD|ֳ1] 9ӿFQFTRoq<=RwP ȵ40NtɕSsLAs4pYмS}8rF BLb-GKNNPf~SruM3TWr{23;2jqFH^ҥRUh8S4jeD#,{TtQ]Vc82tTѸrQ/W4>BJoTGtKNgEFu')W(\ Yw(2 [a&QMԉvh;\ےR]7+u*5E?ϹB @ @`LGUT//-q/T4sWO lWv 6%OW[Yg ;3 QNZ9 RZ ~\sTvbDŔXTSQ#UII4B2hRS2LxQ_ceVt$]56c6ZvGEv:#(QcT|4 6NIZrT~3)s׎#*%Z"y(PoTTJtPE-lOUUml.K488e8 7jKj+OX`/5'Vc?cKw÷/ōڛzO{׽_KZØŵ=1[`UsQsKռjP Z34^}P^vA>ė*ׂ{<-q:9s}H[[žվ\ (_^j}a~\/V%tY>>DûtvtAxooY^M+or+zќu5Ags] 9y4_?!_ouSX1(<_+I<+?6~ C}f(I?#>={L  PXT" ?D(6+B9 :Gɤ-$|K2H1(bM8S V7[u*j|SUjhB[ª5{._٬_Z+mnuTֳ ,Wmcnu5,dar9< Uf/ 5躊W.ܤZT_aӧm@`ȧ c4C'[Mֲ7Ӯ'Fm?w>Cp8s˲+F+аK0+ )kC4>o164,  $\F2os).Ȕ/ bHּۤn(9 \8{y)ԥ.od;sa$I{%lcбdQ #0BStp2ДWAF$F,kr5k6,rum+ a# [JW06\Hc^HrĞHo|e1o[63< t<2,AMNRtO1< SSSFUEStZXakRR[œ5c'֙&K\yD&XWL!X|ؒ5(R涍aNLƇkY\uןf-~a+WH-݄kf7R PNU[_V&dT>Q?B S[am"wT d5Lreѕhz\yKs ƕjW&Zѣ^:fyqaXړlؽ]r}ݞW:[nU0rDPҙb9Utmd\O-LA=!&Klp պ@xL d[1=vQPRBB}a^;OgLݬζ5tn9wC@{z)-*dm}y~WSxm}=fz4_Fe2.uq͖WY{ ZiUOf뙭{w\zvNuʯk`:8cOj5OJFgfPZ^sx5һ~b> Y뼯)SG)vjCgk?T`vPV<񩜒5[2~F'51+- rkׯ.0u8$QF* K?J ;̩iྡྷ־#r@"i>k0& 9#C0ᬤ2[43^ pJ5;>C܀G̱dzOEE ʬ8#k.1RB ˙ÄYA NNč(F$`NيjvC{?$C<1Iƌ>Ϝσ<G 5;CěL Ą@^1ʔBlO1:ckwٴ4B/DKS< | K,7R7@r6θ~QЁNR%",!BDrAqãE"ts63VQeRV#4=hP޻k>g<]G+DZ$ N8a0HMWYUP|| `-pwhtdzxa a6S6S6NUaU>^R@~) ZT95]VlZ;'ٺOelMa lS[C5\'t ./UMe|B?GcKCK}EV>מ84CȴKwMRSNh N؜˱μ ܆z`xH*1*jXlc(@e@0h6X]X6YY} M!iZnc3Yo %f3q;Ƥ--^Lj+ھeL^SaM$~q4\-M?37[FP]9e4F<ŖFYa5m=SR̒V-jN%޴Bj j~knIݠF,VS6H2f˝\VأyXKU O_ |ʽyMuԄ}pKN}chRU=S NoU' XJX|\yyp+(= qjcVi`mmmfVWav]Yu &<Iu^S-gb̦%ꍣjݪּIjG3͜Z]o(hoNE4g^w7xg~8#&6A.{Wf6)~N}vN~#VFItVM ɇQ0w6!dgpi`8Tma!$݅&6$ydfcfBlfu-F\gnbVd^vAF+6En]s[Q6mKT_F_S[2=CtW#l1줎pT UL+p}^XՎ{zw;r2`t eY0OO>S] ,尥7# ,jrfRr),fڠfe2ew-2զfo,mha+Suegvp$Wd$.sH[m@g#r} Dy_O} tN1 MmS6Rhω{ܖIܝXptnh6N/hg/&XqO_%p%ՕVmr_=&E!5r)]ǫ^<5.j<0+ļe؃{w8gCoNs_80B|F AbP/c(.7dx6Ge1IBY2g"$s({?~S_{{>_W|鏪[Ҭ;-& 5iR]{TgtrKI^7-u9@P4 6X `@ h-&G@  $=sзqkD7<eˁn8|{nnOv;Gz= gmw~nw7w}>'s}O@-FHs$RK'6p w $  A)t) APPCviG )UEqRBkzGڹR   *Ҽ,L)ny\ @+8L F BS`팄 #?oc?89tu HO}Q/AQ]9@.LSUHO+Cԭ ] E8,@<_CtFHqՃWѝ0l[cG,UaCV|kgE%p#[7dױ|Bh5ʕ?- 2i9# #>+ɜc' j32L43tN;Fd46WmNՎ;H>O啥RO]%K[>SN9ՃW< 9kFW0mnzSWu[IZ{b]VkX m"Wqm_7tXqE[zQr[lQ[vm_ȫ<.aʡxg%N]v'!`j3l2 S{Bc#Ny+b"ޙ;ZjtE/SWjM"iNnCi]cShnJz~V{T}Cy]r0_+Hг&1"p׃xo y"[CZ 8 DLs7K9A>0yotC?Ʋ`*vIri@(d&Fx=羨+Cjqe=&\WqXQkgr1GC2}/ūaKy/썛yC(M@!ЄoEGob vlqx_\SRJIac> wBrSdLaLjbvʙ@bgؙbDH`D"-+YzQgeOwXt_}ɨOʥ2|OZjwO=艻r@D'%D 1$lmbi$d{wl!8FM%YԺBB#I%l$r)bxW&=1#) 2Una2LHMWfSy;DUg1A@OF*'B:oDiCTLZ54׷`}j.Xd಴1YFE2'ڟJHE(i0bZ8 -$R:SQAGsҲS))*`:AӥmH@r JN/w:dZ]Ɛp e& I8ha$As9Χlah4P D5rc)"gMxoWA{>OFf]&Z nZ=6L-hK;kb;ˊBPBRjNJu yY_,0a;81W6.Lc;V9Mug5:|7GCzO7_f|zBgmZ>0Mps;l?.[[K%ӺZHFiTDlkJ's$8 d 'k-<~B+.J̎;GHV ,흴 cPr e13 %6;LˬIJv@ԉ5h?P-Gj JPp -P ' n' Xpڧئ0儓lEKyoO.~+r&ؐbR.n `qYAhLvȃ>dwuSiـl?ًu \ 'AY%zB58l/R9 Img?}SlL#)3VI%bg90#U'DsnϠ Z$33N)Iq!2-4#^ՀɢJ  a2agI341@5s#X6%j&5:O475vn62%[(bSh6sssaO/S~ނuHkhİ8oEW/8+rӧ :$.gJ7˖-;&.L=E-> X9R*¤8 f jHI LM͇8vOM}e[?ə{k{0NZ{ kyUz迷4!5ɧmأ$7; 4!{34pԷ7w~*[ͽ~d#4A.-b.,ː JOØ7dK -Va_\./ʚh$2|KLcC>wNNxI#8u4 1Ƿ};lGtwtjsGC9{m nKʠ| |7XZh"]͝ԍ3GUtwoyd{ʨ7= ď7yI)h)lVnm$ ÜAAAw\vGhM8O)×x {myC}|sq~MSE2R&|C6 ڂFײ*xe]+ӍκqP=ΕGj}b"Q];+-j|,+A0 "6!~2vլMi[$6*`ƙ~"k64ҷ1{y|wuQ<;[mA~nyt?U!1}@ ;9:ͅ{Ȩ׭|$rt},;dtH\ $IIr*²t`rj P0 @ؘ@`( d2)0#J\DRg9Nw6N(4 މCz5"B4Y^KU'Tba֪fV%D_m+Ճyo~/QaPX<. CЈdRDQ.!y&-&d\z1'#2I [4LD+!e3Z;"N1*4J%ӊ}:VVh*VfE/M `Y&u h?֋~|]{= ,` q,< bx 7h1z9Rmlhխl5}~gmWw;M+{kimvlKC ox:{o^|}GvT\jT5I2Ī&Ikbl J|@֚A**^ZbjuCk\/A:EMF)Ro3*QBڢK^,I |" cL̩*JBJKP:=s;?3t!̳{oL|OjO4ͳOTC4&Nl8Q+EI)0D3G1Tn@`U _m]mgWWռ5qSa,; BVLb؊XrZսu>U aO73.4~#I2(rԾű=-M+@ 7\mkm3җ%%?3:5QϻvJ`=;JL8Xv;S=X[2%qEA\cT cB0 X+P[jÐښUSWk9guMTGٙDrHts N42I!0MraWˇaef3'rx Ls#Ha/v%>7SQm91f纺>/Yj6Uz^S[1>=eo1l%k[irκn "/—izu'0͙{TuvB,vN59wJN1uB \Y.@p}YTb}54a,q0arciaXvLCJB a+hJ0!pZ1W{Fj n)bLl16/ۙ5HrC3,pG͝4-P:-LP)he \}:@o2rNAduLB(Q+-*@N> Љ*ĆЕUh=wޫW1acE8h{oY1:ie)霵SU-p2NHI)B>´(|鑩+%j"{ΘKs$'lе`bftCD~\Qi,&*T'&nȇNZKPIW&sM g\UEG\]H+MI]=5c`"\h| KUE,yZSJa0e` {'S-DUe=h Uu]#u̢}։;V#{dJ0wGmHJ+g)|T!!rK)8j:_MD%kWL#e*"c x# ՌboWJUioe\1FW<pmnv~: [ aag2\(S BB]Z0۸2ڱSH&.ǃ[3¼4`Y:ZYg5Lǧ#Q婑idZkDčͼVN. [3{g Km#hYaiX]7Z3u|9r`< l?Z'%pgܮz+ngsh/mR ,~ʚ.ϰ֍dn,iohGIxD+䏘J-LːnZُ Obe ݮ+} P+QDϦwYi? ih֮ <.όN^r0glXM? 4fM@𐺩20:POeBڬe8Z{ ; 20Ȏ OY6̣.)p $(N&F,Q ̰nl,̌Eа)BQJ/0qͿO 1BhqZڍP0 YOp둄hHqrC p,{#L+F|̷%pi//˭ ҆| rPo[*)\r : !n"N*MBC#mI:pǑ%-ϙ$J@fܙ2j¸lrq+vq+Q_,R{0 O*qTP1]++Q!C,%Rξ$N7>˲KRoEm ӗpHr2%m3O s<,M"S&+O,FBR 3/ 2*2ҥ QA5SgK+Z6S6o77I7G7=.ӆQ$!B2i8P/Bw![n""/0eE,G1S,,oc2LWR(T88)Ow.#QwM$˳1#s!< TPj_FP#= u$(/ËTsVU=356h_TTS[Jb2(nyUK}L1VBTtN4#/`758RO+aNc-ZK';7[S αؓI{=Ua r)HR lP?p*_A?Q_p5t@uhUm77CM43bP6#aObLDYjrb?;6G&Rseq%?+5_9 HuREIC\f153G7 ڢi+hIjaj`bNkv6M@tPv=Wcd7g-iwW%Z5owp1\5rpQpi*^t47]#^3{W:׽APecK6s t6VMKX0wsXVZ_.Wum3Nrd7YrU0Qbxvy3exz`o t }qi+[׻U7T7'Ru;Wg)t 2$7Et 8l!fPWuVvA}aE5l'm$lZ5 mx%;Q}ro5G7JV`snF3XY],{)T4 ^!5]j7|22 b/(kVǑ~4X+Y;.OB/Ls -.È}WaA,gWT2[ܚ9jU>7WW֝xļb{-V93m1l]Q] d}"4|kSSOU"1R+oXIJKiLo*U5Ô̳3m`G20ז3Y_m$6dL-bM4jImlT:+BK0 3GPpE@AT\ w,{NlBߵQxX%AO5X WbqTָmVVԭKeu^utH+*VGeSZ?h͒|1ӵ=rq58̽7u+= y]~I%AO=`zk0?\x&t|WnQ[׊o{S qT}eZX{W<6qaGmWrJr[-c9yݩe3n*Q`WCrjߔC]x]nΤQ?oT_Nn#︴etOJ%V<չW9[YZsɲvv#ỏҲ@J4#ҝj.ʹn}] zsCڏ,B+llU_m| +SR=Ğ|,Q>f)U&ķbq.U^$X_H鉝2E e,@eK)ɺᣱn RyMz'=kbs&@X&GFXc"؋3kDk|\#h-_2XE߆GV!SyC!O xiB"+jp7ښfq P{C'd/)D{AI8$wh:֖g3Y12uo, Ձ[.hjnY3fyj;ɩK$vVhNv#8^9 ),9H[;dCI3>jQ6>눬2X95?SKޒVu1;nU?.&-3J&dtr;% &΄*EԙN,|ۧmƙ{5:RzH\؋Ց&}UdETF-UgVm`ƭfCKu#Hbn7@H]+uWKՁ#xS[%e=s55$EA,0 WeOVn Y;9j} ZTyLyV^='kbuy`櫨R^et"Sa69n8rQ@0Ż K5Z _‰k|7j]yi1׆S{ ؽxpdw!>CjR:/2 xKʣMH`Vb}67)n <W}Ei.g\EHs`V~9#l Wcu=7H %.T)5~9嬋v(kuU4^jN2ܼ;E6.rgrnc;Rt9cRut> ޜ/c(nMQ|/&X;ە%Z90~rZMp$k Uw"$l,Ps,ط^C_To@ۗ1fr=Mx\^ݓ?M 4;+(Yu\[.iu/Ii>riZo\R6arOck⎶autկn!VQ\-9^:xΩ%ldP0xn"B nWO}gKzj゚xwK,ɿ[U4^\7*43bV"z9:,[h>49" &L K(qш{<ҜqIx4N345sz9:嵄B=2d,11)[6lY+5A7.C=AȬ295S?3$!T/R+EdBCdT[;B69":F$pJLe<-$4Hc+<ɁnCY9 D[IqG+I|P{Qª=^ELV1$}G;'6E!)CD`=gE<$FHCuƒAdG#8 8K) DDk-yCBlhA'}DL!:Yɳʄԛ2)#dܭlBl,;J/1kkCVIlUH$ AJI2{FKf9쏦,I[z2{A|c\KӧR֢DrGTL"Ѿ)£6|LEJV0=mnjLJnDaNȘCKĉ̕D9ݧwAMTƤ:S6?Q@S9̉|CsHr3!MMD#T&Ĝm 9m ](SUL;3Q3EU5L"2*>3ϔ2=7ѴE^4 S"_J>L}OR$%zFDVjTRӧէlУ):}0I«}@D- {W5]=ŋӌSM,U^Õ:.V ?,sH-ԌԼt?MKK4,ңVˁӮR1Ot׵4$'\)M 7]@T6U ;ʍ|+{ћLosMոo[\cP[=FGD,%R3A;4M$"?mP=,NMwYۮS8WBĨYWb;:_̽āXT{erUUAZӎ!gUHkmOX$Xܱ]AKR}YR]C\#~$I3r}`׻;ylzU9=fC|5Z]f_mV-F_[T\nmŹѸɕtW\ w8^N ?&`D5׭ǝ`^^ Lz4GH=J eQ4]Jߜ[KųBWٷK'+`YeK>&Ԥ@Х:d& ^]-2fQba601T%tVuf=c%_գT]SU^RHXL=%%/Cf%b P(}4ubٶq\ `sb4B@;_Wc]܅+B8lX%\faJpi<=ed3&aZuuj˥VFK:f|bt&nCPO).P^.(i5\k2&x3N_ѽ32ZBZ5E@ZeT)(hUHC( pTUG/Fj]jƌK^FU`4Yż>!b.LfI8NY Pi~&vUUN7kԂӴ5]|cc{evh+o( :N&Tj_sN6GI:~EjfzH:ߴ5/[xiN*Ζ뮙\Vk 6Υ:5l+"ElDE"lue&.쮉v[|AhtD}n/.kD2fӭBLk8-mskqSvi{՞|kn<JNa~]_V cTcZ߆j1/nܕ?>duHfiRV-nbN݆dM7oDr={k%̆wNhZ%GnQ~pżmXѣO,8د kVdYu]Ɗomk["'fLEkFs6oT1۵}w%׳\Dc;Ke~zaE`9.j-@ 6^n'^qaHjh%Itof&R mmVmtct. LwUG|NZUnE_ZhXG-No1j'S=Yd.qޫ]P:nghbfGtiwoCϛvFR'#p/tf>L^3}o)kQQ]7 l70)6(7us.sUDbm mαUK~u8Vf^fOX0x[ޅ_ v&nfy7jetkm\]B(f:t܄Q@RQVmt|wwYWN]uCkvb]B5$xg@/f36ty.gr.NVSrcw?p {gT;9yƽDase"GZqvysjqvMwfx෧>O'qvxLze/hO|wcϵ}m#Ywf߾}a罈@0X$" A\:!CpZ.D`rE $Xl~U%I|51MfRILu;Ob%>Bht#?R4*}R*4]BZT"aRV!GYjedիjխ-g,u EoIrcNbw3r٤7?,㢒M(M4tI#x?U 6ZɴEQx{˦^p\]Ҿ*妿osy:vOnt+}ߗ[-ڽ l+/űC*l 2Д-ko$A5%-w DQ b8pXELtBq;r lGѬ~G*r3)2z&s<,ʒ'J$+ $Вn/l.+S<ߣ"ɷe>7̃cFL3MF tkETJ(8UNC1>r%YVΌUi5Jj3)HKl:l]>bA :V OK 5Y#1fAJM4SPipU^ ]3ہ{74-c~ ${RԸ$9!~!umXW27I9vU5J6hO9-iګͻ/6N5DO ,`FR6w1hD]!{_SKfU& O9>%չKvn;9UbW\d={fpgc4b֖dq8 ^M@x39'YeSf{<PB=)PEʭ[Kl>W{gkAfAk%Bv_scA˫'ao,?m*p|?7O&p̵$ñ~],QzvelDQn:] " #R9j+!Ie"uT-jZFr򧢇C V ;K!fW|g;t _l"Ż˟!ջANf,}C;V)(NƲA;ħR+owL̎گǘqi=?~oksuetޗ bYf,#^SWTfU숺go7/hcߎ@uODWe-{g\=v_Swj廎 i;490qru֝nkEN*z/X{a>vQ+AkvIRwkK˽?yNs-Ί8ם֐~O9~⷏QW3oQNk}Wˮ(MP=_OV-%rVBL X koNwp*ʏ6lVIjjސ2}<ÊҰC&&nόkDpq,ό7NࠩbHmɮ0 ǥW^/ҦLЮ&Ͼ%xnŢ   P & CtJ DmD290 YEB%ѺtR&* :5S'>6ޱ]êzoQr^~Cuf~1޼ǫBſLk+ =H A,8mkP*.ZD ҩʖEN> z'nO:#与Z-JH.Tgjh6t'pAk @/Pk4/5*B.D4L̽;R';L/@X}='8/ W[ݓ*Z&S 3-yks\ۜ?@~?PAmx`چʣwtQ%HO_F̍wr{Q]br{4Yփ+fY7hdӿdK^z7K-'{ 9Brd}hL4rO?5;GNvԛjA#T؛s`$ &+<\ ȰCn1BnǞ7%G+{e*%^|,> i_{E>7 Z- De$bz`_&ɨqŕ \j^vyB]tpR축C w2'od;sd+P{ΣʤeH j؍PJhȗ) VZɘ0:#Y[浱Gk:gpc9>Mgm<7DHb,IR'iyRӹ`,m>|8L&E+:,֔?ڵnee-_{[]mfʸQhZ)J}ד/qBR2~Ũ$Mۜ@,XZ')!yb}^Dx,Պi%_+ɟ_KG/ 2L hw:d[yHٛr+]4ƚ'vowkŒ̎XLWJ<,x^_Cnm(aI8wT}ViT:ʻىrW,ΙxQL}ۮC9'-Y7CӑRSHh]@L-hP$^vΌ;5ᪧN~:zv>l=6^7[04ym /i%hq}4z3N8[7VbR4iζ(fX~_gEeVo/F~tF4\C^ ؍WnOB젴J/lm: (Oh{?)|$p/uKNz !ڀߊiN06/"n0JI൏ lrیt쌎e P*@ܜVW$` RO(/ p ΂TF. o+0[mPQضo ?W0`ҿ7"L$h N|q f9:yO 3qPqXƪOL~lpl~^g-Z ޅ vi2ѱ({J"j)wZbꎍ+bЄm/ChNprhjZlQqt=1 p,-P֣菧*'ѲPa g k"9$J$$ʭ %j/T޴WrR11NP_qQipb)/+er g#RO+-2)+4qDG2 /$U%J0ymq(2qJ'1Lf^M5(ZS" 9)N4"*P0P?;Rr8+?455s%Tذ6g.;0͛'pq7Sm.R%3 =)Q;W) 1+R13T&IJ:[4S M=*lC=rPRQgp6/Ik0Qsc4tg@pL sIL%:ө3nv1JT;9;s<*D.4ğF/4PH8mSZ S(*)EeR@s u/g/I1O{;гB2kK0 6Դ!Ii,KNuH*a19M^fKeyF?qؐ?y2 "&Ԁ Ӗ†:Ֆ2V(琻GlQ*˗0T>atESUGLKTT46ڵa.G>}&Fo?Us^q7 '`/щ8,uZ;RKm,#!S~6F9d4d=U37YE>{>TgXU<.%P_O a*v?QT/bNqRQT%Z:M\-7){cEt٩ ,mF%.9DǹŲv[ 7X`])AZi,)b9uXNzSˠ9ctMˡϰ8M {mO%5 5~@;/'6M}\/E.ݻ~6\yw7zq3eU{ۻ eٵ9[|ќykH#`<{܃V˜u#x|Zяg;M/<)Tw9imWE; <ݹ[(+M፛GGF}- 5c[V\~]yx[SI؃¶BZt:5}%Ř<_l]?\}]Ke3q1c1fs4êS \$A!yZlQ8Y I7J PV<[zi*E>5wuKGy=|mj}JNUgry(;?d}R T-=#AѷJ˼]ƦGMIoLY[t[Nٱvun"}-SBʾ-|Pׇۦ;,<<~7x?tv[{}UvR}W{)]2B .K}A~'ڛ̲kޟ:\I^tc[ۣumw |>>蛻*}9~。\4C+Q;=ݓn'?3!7xMXvqh}\!OMOӷ+q@+7cڍ  AOD.C@,J! E":1#y EbhJO*JarL'1MbryԊy%eĂ_(qa4چ@]JA*n!P+u\X4j]Y)վ3^Uq{YKn+eX/<=cl%(У1L75?yZK]&-<t=r\ >[L_qWʭ k_2:Wk =>_ռ;> ^G^?еLXݴP:}AFA*L$5jS9; C= S)֦=K;ћJd=ϴxΤsȯK ># I(?IJ<@#+2 30q<ı;Z467;6/ТU? $Tδ,i%QJ*EƻJ)0J6ITH>O1\-T}cVT 1=31m97rI3m %8Mb3-oaMD͆ie dʜ=XHe,Tq&SCp9sEוK _5eS)ɯ[}֘& 0^̻AWլjaMM'bLf69֓1Z?B)-l7ڿ\e!ݯ5$]XzޙQUMx:6E+f5f V8RSԱlmY1yL°}9DgVXѳTg{ݎe|6zփtr<>xG2N*j||[޽כ3ibu9VۭY)=wyيP]l7D;ujsrWz~jW晪Rѯ; VoQk_ZG?EZx쁲efKlQ CW/ t:R+y_u Htnö|&CT~m.CZutṱb#y' <'؟/@3`N)7GCP%3]tBhBQsf$ltc"lKl:'k06FDYBsnM,3q§ i|rƸnE}a;NfALtZ6Hɠ՝\C OI&)Zn@W ,,dxWw<|M%BhNeQ|/Lu/' &c.fȑTM9<כ@ g쨣rvj9J" *+ygcSJi@h˙HRaԹsn;L:PDzp)#T@*-YweS<$'.K@b{P Iڥ*Jc[dtFyyU)ɍh H*4ښ*ƪ(^j='b mJC5iLnSgl)mXӦsDSKd݂+J &|g2[C7e}B !Ygl<º>Ȱ;'u>%h/ՀziZ2:9[_orSkg;mi#GpnVu,5͖*~j]]{1w LAE3Q7"cyWZ]% 4xʒ_0܊krd#kПuò:e|C40ĵWjA٪sKy صvuU]&~d eə;+hjɶ2VYvM!m\ bsmVZMW+rlzVn9D4/hQ9z{fgT&W4Iua =vd9Ws0jVlySIg8$loN]8ql㮳:Yw͛UΔ`kN~c]p)xcka %^e#SZ[nOcػ{ĽrS|,)*tØS:Atђ!񊇒(?pj(Y} QgQ NiNp"r'cҍ׫y^j_4\xkի>^KF𾳸F}?^z׈wVTnW^Z{a#&wGy<:newk^Se5yb_SN5hӴӚ;?Ѷcoo_ÑNܮOuv>K{G S[xox5AK#* b]<ۦS漊#.ϲS>м.=Z?"!?*?c+ حX-s〓+A'#~C+29@+å.,#;E84E9 m3M8&:A;Q.3)"C+z=WC#ۥ"B8WK;3»pDCI۬ *>I@+s?!=A#<9S2;Z8{;܉CUt;sy|>4@!s)Cd#&, 8d 4Č*<|MBtL)DQ Oql&D+*AC_"E.[qs=C][2!>;DDlHF2'ML'D> $L&si5ATnTRp-4?%cⶫ,$%FǴ|J<)FKD ¬k@4Bl;"ȫ=D=5N peJSC;޿Ail{|^\~,g1~gJ"J,DÃ$d3V!JvACLrG|ԋGLJ9SK?tKL$::,F <;4#E<Ĵ@ӫD<䌫 LrIE[HË{LuLD%,O1M,2GBD0جf,BȴMB ݶTJDJ=Ó?dvϦ7lۖCL̒G.G|"itS¬fσMϴOkNLL05SKP3rsJ۔&K ͵l_*R|4J7 m0VdKF5 GKESQӖI07C\5%@JuY vU=1|C.YU.4bWE|fTC0ӍYGԴY <͙Š`5 ׿$Lc"NI6~#8 =PU)TSE}|~<ܚ4DibQR mʳO~]]Iy\\.(W$YA]ӰF6U%^%#e]ۆ!]` :YUMQ GΤe;l,ɕNIL K<eL-֕eT.f8h楂ȤZ-ݖ].=bUcĎ[v>]_VJFOGMu)f(` ^84Ji7 }ckeM?S?=^X]UMN݃RNCM$`@ *m (1:=S$s HJ=HH?4%?tbackground.pngtiffutil v301.1 HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km  L2CbxN ¢Ѹv9ģ1~E!CRG,9|'5F$q=Liށ9%LMd]J\"ieSEBmKW΅t^oW07 `x,27fV2Jdlu1gu}.!sk5u2{M&']ƯykUx>FN0w~=uM|H JJt B Bu' '0.2/IJNsum_k܆/۷znX$pDM;5b_˓pn,[7,$ L \΀  G 45>JY=rՕB.2^Ӡ&"&c $=hYCA ^Q=P⻴*!7B2!" U%eDkm=#j'k~p Fc3kj >0 M-?r5+VNCyrx i3_ ddl~(iBbg/ ;i+X60LK"|JP]Kb,Mq"OKؖ^bҜRRVX2(faq/I #Zrr69or Fik}R!>KM6'i DxChIAHcrjN2g'C'cTiarvVEG/řt^Zâ.)thq)I)ǥ L\ԘJgb4Bqr͙SXr=etq~ʅH"!Ýt g3рNckJjeeUDIgUunp@k~ZSȴ麋3B BX҆wJ$R֜u)K%5MԟjgSji4D;CO%2ȘJ6-EBAZbjk:˜ZMZNܻ`EϬrFq8LZQ7\כbXfUK蔨mvn_b*=(A?\:o}ORKi Zխb[upbtSN̮?m:I-ΝOgefћƲ ϰB$Z vop}4_nE?Tko(1~e)G\m\띭uWZ".]oؐq ]i>R9ϲT.Oor5^cnm=\{JD7CbKalҎSwkqZ#| eTXx.훡Ez[cc"婸uE7 w Ǒ\>P9kvՓy=_<ǖ|Ȧ]} 9>X_ASdΣ;:Ӝ={Ӷ}/Fx դ0{|Q}E|ZC~NOLY r [V׉h*.R匪PPp^oL oꮏd"JΎ.؈0!l.XP"oF`nOFn$:v⎸ybB&|jPvԎY} oOq 'Z f0̐rF+ɬõONٰi8-,C(7 N5 A0΋&ϒϩ&B$?lp :Vϖw5 nwCʐgbkH% xpN1-5| rE 1Zl#Ѡ85*Rǰ pL1 Jqf/?205 Jtߍ4WPY-(Q!-;4Q?kV1ZXp0 Бw%YPq&i" } LQҊr )HПp% r]}i+P.K V2>ґ6Qp+( %SL_.q%R&Qk}?23Lo4 AA%BY+GANoFq8܏(5uOTP6r~oE}QRr1Oj 2 #@Hf->T!f Q= 2aJijWS? E@3r_W0T/9&!؛3dr4kG DB-o0,̯r2?*4ZKS{^2l*N,3y,l L9bISBeM1e.5!Nsat4“/5JTJX5.S; t?Ms3@T2SZvqEˋt[/(*7NP-|,AQg!P/O5F6S6_O_98Reho,K8i`Esݖ)3mĵ]LdGm{fScpTԕaGkKv=I3qWWWYg&P\/g75N/ NP[TPC[E7q]VlWC\֩5QuCp ,?\o_^5w?R֭(t9vM" UnVEomNaU^S#-;ci!uo0ՔRw { 쵁q-c2ye<Dƻf7iv Z t6)6olj4\w)xYQV֧O MD#i 9ΗP"|LG1r=jwmm eW2^zxV՛b(b5=rs6sZGD|xtOc%t )OehUv^s+vrvPv3e+mii^/]^j]r "{v.ecV0Undr 4<؀Xcpt1n18v'd,:XYi_:kU檲Ռ ۀ/lC68pl_ه^)CowqU!k\ FǚE`b|W϶yUonN{bS2:Lg}Xrz+~om#7qØyAH_Yv[ͧ<9 5ٹxyVP58vֳ8U uA>*4~iacUUI~}y߾Kz0]]θõ]i^̸ER#c˞X ^-Z͙ఝ_Γ["8f>U5uX͸ AhD, Ȕ>!ChdFcPX.I#YDvO"Kdp4W3ҩSQJMCҙIKDj}UϪjuf\W`Yd6{M+[-7t]׈evQw#yq;j/؛t.ُc+7<\ij;^ItA9F Rtis=&'l3l5E5S*n:Bk7;s?Jݚ)4^r89Jz^7Ƈ&L{4ه?'O>Cʲ,O>pB { 0PA:tN^ĊKF. ۊ7LS͸hnHs7IɱvJKe$Ƴ/ 3W)Jͳj쾼8L)CL/ <,4ONL0Ol QO+=x-!bӝO]_$}O$vccy~0cYVk pi5탧^ߋmbD^k. pඖ{sۂ^%\S9pk{v[}7nysAf\#f;ijM\L}aEb9Njg<ICh)WDsYIt5DbxoMNZvu5 ;=XhjOˏz]ƭ{_kG_/!/ˮJᄇ#xpw 6f{~}N=@djmq |#Py5 2pr`rNtAK:O+z(q' 3(еB;F~[h.} |VolBt)v+7")'ˑ N_(#c#Rne6$ g6A3 b8?[od:HDx{}F87 o 0iAK:[ ,Zr*xr(DqxvBT,'OW,gj.Cɕ&f-dwe4YWȯ&ܚkNh:CoA9(#\GxӓJrFG< 쓲JcS\(I7Wt4@}fR~H$e脄)h6DbS  *{ [U0b{'ΙG8{K3X2aM-N#E8 y Y8sҚ*dӪ4Dd,nk/PاQ΃\}K@`$3CHBzzD&r5a#ZX+%Icb1ɲ~)Zz;S,#p7cT丫hr- 0k]l[6[wUj9ue\xYk{Ub5kOZof/~X;Ǵ |1aku]=l/ѫCI#/ڑ٪}<Xel| MtmlKrMNԶښ)Й MQ:Jqٻ5aLVKM4MX+!ŗA[ڝw&Ŷ<(dd/>={/N=Ѿ`C HB/Gcnъ,eoBK1dzW2_zg0,:h(e{MM9w~2r3k1 6 d?sU#\U|"e'qd\ϲqYgglۙknWht?߆S4`\նIj{\'.5 3 HߙhWvrd2'kIMU5,bdYmf`yVFwS"-{{qyv`ڹalzїjm͵m{s(;]}0/7l}.;ftf -#x}uŧp%9&sn8=CT gyI L! }hp7w*7j䈃]h[vwx>酡GհqW۳ow:߰Ӯ=E}m`!~O]{5P71ӸR枊}e_G/1S[;{쪃?ֵӸ+%i9[=r05=3Q:3|A |0c{ v[6i);>7+wꀰ k@[K;qAJ )]< Ӽ4ʱ9R[@R[C!{Pbr51R@36=89ɿd2j%CBBI8D$)$aD+I7ɃlnC*ܸMIԥyGd4$P8KWbCy@dMNһ̻'E䕜`O O# P,%;BJģ%J{1lSXҔ мݡ޼1̯NiN" G|GmNn2B,Bet=] NF˵ ${: σ\R;lOTOc>H) :="̭,ȵ1HB.HD#t?#oF3j 9+ 1R@?K-Š9B$G%DdzYHx;/MX5'N1];-3St\7UEՙĮQVUXM:_ά3eDZu;mvMg}`pW p,+*RbYF1#1u-5ѬM ]&ewP\)8+{v|.O/en;\8x4 i]mJ冽]oT'/斦A*‚IgBE-)A+9Bʂ ?O /s°NFjDsDz HrȒ Zͺt{I):*;{һ5R;+ J|;.lLһ/d༎:rI 5Q;25\N45=,.hFKTCQ*tM\CW?p )q2CBTdhDqAg+IXYgelٱչo E0UqKGsϷUMnC]D7ԍ IM3-'~M@Or;85 a/SyMlvnEtи.#~aaثя^*63u%idGم/ecqecSV5cb&U=mMiWgyƟֱD'hg/ř_k{ӱ#W$mM!wܷ]3l%`$˟܆Qq-71X/`!zԜQ-'-\^O?G9^lG\9ywx镬#P陸Y=n6G>zkchT?ooݸ?uos7&L5BqvJCdvz$d9d-+rΊ XXuZ \,*}tԃf σ~*6&Y?H^+&;֦'VMjQQ;ۄ`|I>6{qER9S!aJ^D as} rj07 !tY6I^a~Ԓ C U+$G[.a E?&-vuWTifڸ+tfݹ6dA&Xn&Z=t]e`[g}Ӕn Ўs\.q2 v?+FngG+.^5' ӜT)nΘB|'m,ooɦ/ U 됵1ⱘ/ P9 o.f0bON/(qcNTD-TP;Q pE/s ,`h>5O5aOV2{FCAG5Fu# S8O1)d ' bC+5KUPFu;F9LMbPTSTV:;1IPyK/ tKSY.LI?)e#Mls(fHZO]61t%grbjh OJ =C7,m_I_u_ a4`_.]UVVVs4uVlVGv9l27$dM&Y"J0[/QqJ3g5;&t/0e71s0SZeh4د3U3svIirM%jnO(r)lE^W l`C_u+lm 17n*Hx R%DU)7cVcDVB71+WtfE!V[}Xa0350u1svxT4U#OWT{@S/uaMw3 %X7J˃Tw *  UU)BO p5W)+_1P[EP3TwaaSp37 |a3b5WW58`8~Ww$Tr//WmVcutfsǵg8'Mi&fxEuSGwAu015VC~Is|kw{myqY}l._bZծiVXGB27-=`xȼnWe7u՛"UO8mhWC&qAtY9!?J[iÀt!SGT #BQ WE6%߄ב)'SU{tl*FRGQ}oTecQ#׳_BpFޘ6KrcY|xRX2hT={/4t$ǜXwcKߘ=M8㞹3Y ؖ8a65Skof5W7k8x{`3VxYU+0#dߥT,fTuWoA=\}*յs}驸v N݂$c[zڪI{Gx1ߴ?k-Y9QZQ;hmVmk_:Z9:8j؉Z `]їMmaDN?YM#[YfGIV[=sMw]vۺX<3Z[k~oMWsNhcĕҐ䡚V1xD[%{( }In[*+>OM|!7Oq6\9y.YDU:ip  `Ј4 ap|>hƣ n9##)4~CIɄbS3f\m ̧Z F>Jӊ,uCJzFoJiѸ=Wk2eY;Il[Q;q\.{y@Ѽ A7"6o|ay<.Kt܅9hs7&Q-w[[,UiQ|wGlw]:{wlɽ:ܫSS8͗ZV< .sz5mOc/z>Jn(< =b]oc;b+0PCT8I8$BdUCR 'p3NpFG ,!Lsֵ {j2#:봒S-L۞Ҕ.lġ$M2LĿ#G{V^c,#ypuxQ |;yB3oV?n7Wԣo@FW 1(ݒJfuFWLq&-{/ /.9 ꋔ"sLIѧoP]B4ra!dA(C Omۮ2TEg@i`y<[ {3_"<2iA"ũ劯՜ 9$C·W9Uh5@2(d@W_t}]5 !ztAhխ Q+5CۻeԂN(@e4Za/tM:l&t39,]Nu8ڇ1_ċ $]s.Um](nȣӥH+`I[++]+󢍓F]絠gkpk2OLzX| Y[DkСs5>0ZEoei\9o4h'naʻ4Mt VkS|G:#!4M@xDp;Yv*1ez_h*F`:T)cNl )~pvlx<;%j&ာZ թV1f}TJZ9{"7=dCim7f4~(O02GNN,tH]Fz|[-[9T..j7>X2o-l{.G|Ν7-źbPCי5?U=}56 ok>m3bVVg ã=yƏ׽`${p>ibPȿħ^,> O W|;ӍoA\ %#k CC2[,K:S9=(AӘa::ZR,;B0' 2ż3+!4Y7c m/º4J>Ej%Ϳ=1/B4;|> 7;7}Cs(8Zl.46kDD,HB- |@ (Dt3I1{KԹc2b=\f57#ޱa2ijCU)\T=4VEK$-g"$[7!F<> $6L2 -t?TEFC;cJF,l\bGyDxICH8$sƻ4lh}4LƜvDl ;Jtz+7Dܯs/B3W4,N8J 9C$-G͔+ˤT<@~uYKROE3&dRυB=. [3T>s|Hc#̙LP4Dʢlt]|M 4HbP9m?3#YD}HpB}K#QSҭJU 5ʢUu?J`?"U4$aK[$E#GDcURV UM~KS].OJOМHc2 IM4䙒RvTW7SU6Sn@DCO*B&T=u•iYtTIM{ClY4XV΂+044KQ͍UNu:8,p?b\GJRk-(AVC5+dWO10։/VX<5Oե-p۽DEd̼%HwP]zɽ@PWմ}^u/e[33X+żM҂D?R;Xԯ^KcXyRX[Ŋ\U\Ν`%Z]Iݝ]-g%Iu}^tLev"mZI\7%(-S]%B,EolLޝ-|S a *C1d.%1H,*/Bd+㱩LZU-d;6)ĒY;(R٬}Fhz:htC%ʻ9Ji ¯_finVj\i{2}]8 & N30㰙(.R$9l%A SIN|G QW[mUnGypeOؾ7xgv:\/Yrv'[x?5(%䯦T%pj/­$PԱƉ <0.ܭ,D20 - %qL`AQBrPt-F|Gqċ ?#J,Dh;rM4>.13+:n4MsMӺM \Mn|LNSP>\6P{yK@5mTS8rr-+t- òL W o'k]V,)őaI%Yg%YFVyG ֝fݖĩwEtcx^iկ.tߘ ]7%+902STĺH5] MUVO3R FLx;F. QKS#SE,oW.gNwPӳ7=^9cF?k"YnX^k=e&갎wWzBn<]Z֧r^׻nQзi{Wڗ xjZ^/i_=q=-`-7ʳt~~t:lL ۊ9~Mezs;~&-b]{Om34D[\Ӯmbk e8_\s鱷W.ȫy~ R@7#Pa\X!aA4s.YͰf(_SKf)p;i/;n󌻺x.lL}N#E"؊:F74_e>^Ev/2<'{j|eMF_VбsY2I/9R1 DLX: YPM?W \r~I.Y\KBx7\R9m"䚆L8ra䀇# LuĘfsf 5akM4vOMc7TQFtq^ӝ3dqp)f (z4/ +eqJgEf$(BVܷtF\ɪ2 Z*tI"X% ԰nW_%® 얄U R [.K)ja%1=Q, LvYv*D7YA)v#cUZ&1vO'ubd%F U'TT+VJc5jyVE-~qڇ)ݥ^z{3Iݜ\*+hCQkT%Ҋ-*wh56[47ʉ'mBEI~RM`MU2c1rPDjϯ*f~yydUaP*:^mdӂWb9L^Sf]dQQvURK1FL#n)ӻe, V~J{j)-JmQ+q5#gn"_B pzb4㻢K.VcL5tёY$ݽYw-v4홯.2g!XcVqSWȢ=-Xa}d9L*ZaI>M[=A$B\2KX!Q~'K}Fmc)hQl7"H}H2n,ʕk1uv؛k,۵`cf|4^hA2}`էKn\VXt:c7WbL,nC/܇ta[Ͻ4vRw'ijϗ/䒧孷Yϻ|pۄ<|p]}KVm3޾|6w O}+Wwgk|Dϣ;7}CpK4Aݍq>كMĜ(?\=y~~}lڭguYt(ʺar=qЮwZ{r=[bn>%gc:{ג͔3opҽxeWά{ xSt}C $&OO JfO؟j# BkNO; @20v`QBpb>;.q0ةm#Ro zL,͡G/2ąӘs 8鳛",13s1.s]%?O,Ч4soqrwҠRe4022gOi1{p 6CM7S,C1_/A:u+_31,;,}F> @%,_.<-"*gH=0Ϯ4dEIS"ө>tA4 CqB) 6K?5 i@)S4.o*2C5)c'l Af6T' T,T5NnQC pN8-}tkg,NETZ(Z4.R)-,sT--470iJ*8-Gu_NtB=T'//5Қ3D 5Nէter5OAU ?(\'ynvsKq[ 5GrRa;\pSc.2`/R3`eW1Uf/)mbq %Ic@%/Uy,?J v'>Sr^=N (.O-ZCPzii oCTLC'3Z)vYOM`a_oi"|Г8Mlb=v:s<:naG/ISMnИE5StY9RUJ6 Sa`W%e0m?RMhu?|2USi%hQCNk 4A\jWL KW>i^?]wTL j{8GG@S".[{ p3{z,H>&KacwXicHTֱYalTwU 5'U6}'`TwkqxqQ]fS\V6EYh2t}pfַKU2O /amW;roXt@;pqWv5n_'`CTa؊wya8q81Tw8rz~x$xoSv7Zs%f/g+t(sfw3sxi^wm'w֓l1xS]kM5o)Bv  8q{SG9qDث{Fw9|{qu}YuGet~~Wsq}ٍW0r5|VU٢(2Lj 6SYu7GOvg6h|0Y vqu#;wŅ7k,.ްx  YQ_GUmwzx80t/].Q91XTך#:6-EkcˏV4m6_QSE5KxuaYC9yipڇx xv݆f7S7y[3iב4.6Vc -1y)Mxv &8 !smNyN;nR1`zYc+m8͗6X3:'VkSX0{E"5:MWGCpV\N2C%k swAI6ڦTSNT&yuYV{fQ:Zhgi3i9:^wQ L/fGYyF[#%{x/;4o ZoG{X_F7QOT1Mn[t֛{t|8BA[i2ysɁ%D;rm4uhgɫ5C{h#BiGYӷ ŵ'{}?8wԫY3@z И9\܃ؼ$UٻA' v3tp#:!`!} Cn/\ ڌw|k?m{$ /,y uU=>vΝ㔜3ݧVC>h#a~1 #_ľ1e}eY䙵T;=Q)EgXY=Pcw<>,֯86xQP(z>鯕 {m/6r=4Um9Svzgݿ=Ŗ!p:3+OߓXXt  ?OC~CotI? G@@8~E#dѨjU+F`ti5MZs=M so< L锊|^wBjtjVWUESJelXQ=K׬Xe{Q-=ι/8+ |r5Zј1ӊىL& |e8-g?n=O|yߕ2n^uV~7kN{|Gxv~fYy_m>Nk>* +Ao; )J Gi:JOq?E DPHQ ")52"#/<%HT-r\J63ξԏ,+)2/+kƻ &8MRK':,ڨK,r:,3E;B/L*@ϴ' SPSHAqSM?GQ8cPVVUғ3NXʉE Y$eL,Qy//P٢-F?9 şǫz՜RY?z:w*tIR-pٶS[;i<qVJ{YV%~6cmoCѵ>pRU𐅹_<{7)E[pnDA)ڂZ)z"fq@0 (v `XF4e[Gu뭘Y^Q.Ϧhy։&!\@m7>[}-T1ӼKTk-21w)1j_&VSI6M[i\ιѡCoΜ,7umQoB [rΈڹ!ۍhDTga3OJj9˷LIy/ŤBf S|Y30d̀iy(hA0TqQ)]FHޡgpK(F7;T47Ѫ|JB~:l>R.APJ)G ###*Khers3Oh_@ 4!>]4wP cPf q1&II&4ye= HXdbPKkWJƈlSvhW$:mMA:MiZOqWBlEx>L&h-6, 8#a$4ʬQx M#şeç=G T|ŋz4PÚqod-sJWtn]з湺Nhk\vS*Mu( )tV$*m! J˕1d.$>w{Q<Lj !T3?3@bt9\ go~,EU/Zڸ8<>LnSE7Sk|l~bC ^Ky<`M A!5h~3 ^OQmtXq##CkZ0خ8b뭍PIe -8׌fj;$nϭ 6A)f d>( >;kvZal, \7t yQc(pQpN5Pa%WcaD$ZU;Uo恋 [. _l{o>,V@WdV7\/\io+`xD4k$dg]wP9s@;Qo }/ѪWz#-Ð};ywjW>.(ĥ8#~5ҡ@ypxhu1*`t eYXy0*0iYЏ1ҳ3)-ӬKy]8R\< K77!B * %&+={>C<(7; 8[2=B,cв> k'7>C:sG9?ikzۜBD:0=4QC"a]GD3๹h?D땕7>11%:\H.@PWaw{z@w8t2LJkxbXb$AR 0Yji)RE*2C{skB{2s&+7=+8ᠽ#13ȥѸ C*ǫ9Jg8L4, r&d #<33=ùi>kD>Q(SKH'.>F:霃dO?H4Q>qS?ӗ:JDU\c5$:DcE4RɱE D82*S8:Ű;+YڠAytb2U zeu@q6@6Ce0HMAy mAD:=N3JҎNAuE]5yۯӳ @ v@+8>Hnf8AKd= FJƪMCmD2+dsH/s>ޭTz”3zQɼQ#B ڽ̼Bl~&G|< ȓի̈Gd$|89cM翃ACIO&I\}3/S>ΌD26NJTN\cʵ=k JR#LJE  ;H\EJ;[PPt4 ~g8\meˣei« A67ŲG;uHU*L~Q"ǒԲ 3M0!֕*7ҧTK*҅!elW]+CW=wH0d<3r.$53'=OlNcNF(}CS4DXTӣO4=-ԵD]A;O8TɘO(J*t5 Z\A`A@ƍ bM邶l m1(s$zLjRel[yRm'QR)=MҬ|WUj։5Mw̚ ץ})M&4&rWm}ې-/ٹ9*}58qnՎDCΔE:U >L#N.]MCX\ٜ)UNu;J5C8S]:LK)ErE%5쯹i;<@ t6\e kpb[e<6ka 1+o [tۅq}M t\+]M`GԲѲRZ\`\m#LkW%W֥Hp&%m=SXeD^#>u*3]L OݜO-:E??>T47I,) D횾śgaِ ?"O?d5[VK @/CߨXxhYpp0Ce;ۿ$HMK3̏1:q(-2Ya)LUۦ"7Ϳz),}|\L۸\kavf&\RRfr>%wW5 "b4࿴V&-T|(cv*t݄<ӐD5NKԝ2N3?-^%.gc>E[Ͻ@4=h@si*39^J=  PV%KeeE١Mak{VݽSf=~ׄR\Uv[R^fBAhej\(e &qzu־:w9ݭỤ;HxAT,M-?9O8l&5Bcih~NG\=* ;ũڝJ}/xxu(;E];iUceaiV;×3ūBSveLr^ܑS`ȎjƺGnM kFp卞. {aj&LF\j k͎7.tlKyfl)O>YN{gkC9͐0@g5烬^Tg%.6g4Ke\\#|hEH'QrmiYyUa~$ [h5Ln}`td.C Z #iFQ,nFfd ꦹp. O +.f]ѕLk Ffvm\Yu'CRFtu kAFlfwbI3l4bvcF,h^bE'l>6_$N(hZM'?uN`6GU6^ןp:N*v547:'^n>ylG"tNe8ŏil_{OqŝgfƭI]9+&/@b=, E| p}@ccmf-.+/zPչy/=Yg7dKOI̾t H9ߗ;WFGXFpt`yw̗YyFpW)1~Tfu?az$ azvq_cA@$" ¡0<ĢxOzĂKap|F'p*`l 3p&t`0ZFUT*6?7M.܏?{}?> ?HcpD@pCp=nhF*LE)jʄJn(B+jGQuŪ~(qh蒄rʬH ]%*Qz#Jjt R~2lH.j|4LI2MH $Ǔtrֶr޸y# #F}!HIe|1rqF0PLKH4uP m[R5-pַ-h71wΫ @/B CZ.1XE~Du/`0լ$+YwMpL5v]a>0]Pn_rð.m>};(Q  0<. áP#ĢQLn3G!'Ad?,%Ԧ/1F$9)$ȧxGh9DAQY"/UZVGSg5ʭv&Z":֥V=e?P[`}/xY`^fsYw=F%{@pP0  @ m{&[ DT2 %=.R֘!r)w7"_9ǃz<'lܪ?30[@o*<0S/&B1C0 <<-Bq iJ&˲G"q↕ȩT*r|'KbhI ָro,K̏3L1(+1Jԓ4Ļ4JL5+"'r\>Oȿ/~ь+ğ i{2GuӔ=O <yk  kdx  +l܀ ހ` 8KIEZ?l i?ŧB{j=lķ ]Bj=ݐqSr1m^]]omu\ea-ܑ^S߆X;{ho1)D2rn?JӄՎlTK|} wz^oOi#ޟQјnOZ}sIvҙDdY_gHQI9\PTڙ0'MW]mC`Qclc5Cxvo"DX8bdYq 3jlW.Q'0T`Xe,\+9#c[c.-&|Qz'py^:ڍq^ЎW#]diw&r3iX t^rU/h]{d1AX CG>h- ea˔ DkҹA=1T2@W3!T b&Vǖ9{4RjMqMS %P'E?{ce km5CGTPR? Pp H 5d@ `܀S~X(rf}=$nwr# %7kA#)Q4m y; (dӺeJ>uڈRѝ.BMikԪj+=26OI{p%;wJz[Po3ޭlMr2_݋"c_*H~ bJХ_[lVOYt$Xu<.p?r-w g=m=2c+pp3FiQR Qp)XUh"ʫW[>EO .c7ƤߗCX0бUi 5ٻkOuZ9gqjy{鮜]MH,yyաGZL6X& Zv$h )`>"[33&RcFcÌ g=pl45mS=]C `LsPG J}0E ͥU8p8@ݽR.Z5S MW޺~LhyڵJ9 9<7h̤ϫZ!k9W^Xtyz"n [~!L["lĒ%Fnove6mG1x'.1Ҁkt0a^ـțl̝irjZ}=w]ݿXz;` >]1,bd\IYj=FU㑺^^"t_Iš uT}7FhyOt-VJ}p,v/a[դ>V~ u_/S]tz>auǛ?Vd4ڌ|D.~,_/"H-Еۯ,+ON)0*MɓP<ۏ6& #POX0p"!r! +CpGWN<Ϯ>姐`O.q ϜLrʼO u̩K.N ,({-6+b hKliWލGMki6 ,8p?Qe Nxbf0,0Ao$ Ћ!!5L6eb%f'&D!h󥖫 ?%+篯N / AQ)!.ӥʫ'Hr0- wM7"od +Y$D*&E&LftPpZͺf|-q}Qv*nM'MR:I<Qѣqf1-ͬ4n6%b67nOX%XRDD 0HޕNN1|1iW3K3Gf>l(/'!E95'!{S̡2Z2k(S& N%у(H2-&q)k1*2yҒk- RU;O6 &qQ.?\ᡘaja"5 .Vej6R8%j0$ǖ1B֒ s 33s6pDI)7G"03#%5k)-6_.3x&}3=2S&H#;4*$Mܯ2@(Li<fݰE;=(t5O|iԹ)s_RNSЮnpAo)m҇+O9d+,2ajC--V+c9szRaT/%llXeNHsugVPZ,uOifs/Cuz4[WE3N~mFa "Xt mG5VZzNԷr)>jf-+k;Įs)ҎٔKmqVnlvR|i`o: 0>VL[a+'`,`fa-bW3bsEj/Aa +(vRs5H#*f6fq5nUg2IU WWV׵z2H jvNQwL%g5|ݐ<\2LWZo~Tj]MCnn3տt8uO'O %O.-r3rx6G58IyH1ARaqCreV| Oe-jwcJV{ط6|4WWvfnvՁz#2?Xiwxuu]x4$Na8[XՀ3ҫ\X ~2W}7~onː|`wo q:  &Wiym氝r/>A?12۔EeBR!!e)ںH3v'2k YfcfNa9uٵ 7UyVi:wiy}FJY5GZ0$Y+k:7l E|l}s Ϣn3pK{^/_KXKW:*ɐ2%o=7>7,;Q'?zC= c8ZV_BÍ9k33CUlh7xbiyY{ݨ[yJhɛ:WWX;eyZYùہl=ZǠ!չIӠs}X7ҡwYD߁ԭo-MNsܷ[+Zk[&85o19QA<4!!AH1wOu(ukrB %oryUwsv{UgeFw-qYXi:ڿ7[pl׽,k؜{՟:x˫IƘJ:]T٬l5OX#<$=w7})<>6=dEAJl8u@s;_vT3qR=yt:փh|_iڀXy{!}{Xu|z<@<L<<ϻղ5ۗX';se]  Mܙ#^z]͋q|`P'<-}+8ER5'R 6Dc\n*/=F8uD$[v]ֲU:o[f}{X\}u:u;0s%"}giR7ޏ=׹6ݭZqYk}0c~omQ/~6š9k?߼NP5E_!Q@ A4qҹg6+h>.P;w13{J1I}}ͭ(\|?A~[| !$CaT2#Ţ09?I"~?_S{=ޯ7v9&by=OEQqb5 ` `T@p  c@0 mA. tb1@`ؘq6^rZ&G'frW RL^!iuVpuu_Y;A"~_2XP]~}y Ay KQ>_[*/'>, #l"P h ' p BP4 EQBN1VF([#$L%GX& h' ҕ'I)JrId꺲,kbе-ܸ!b9i R1N"|8[OYA9Ô2>NuTCwKP ?Ѵ+yBR(J-?7C:nEQL8Խ;є} WueT5gMQ1T!^t ïj1]dVeGpOeh\O<F5eYQt^5pCqƐ]kvްͿrt$QE HIJVxY, 쭓dFSei|)ppF J0j3j6P N3ނ3u;_9ãC׵nCX3z63֚/HǬZ~vR3mFqu\e}o--GUHvW8]t}>\F.UsGO۝v%yC7gw_E?Esu8݅x&OȸܑdI}~hnrxPWJh,VZZ#G-i9414Mƶl վ)em!oAP!!m=+Fܡ.捼B|aU)WQ~YJktKFmЁ9] ^%> x(Y7^Q](k4 eXC̎L ݽd:6uS\:FX$BzhbAvZqRHQČAJe#{%<+p%ԣʑ2!@ |J>*L!ii9؝fyp  Rmq:% l1n͙ՌReziovH)aҧ.xNi!j;&ӌpQ #IDX<ů%ޕaV2Q:c\zsѪ7oV!qSaL`;hh]v$dM(Fź5Q[bvOJ D?%$vA0{ՖVyhGNz>X:fU a|0`ilY=t*32+i[5:7챖f[\wn]k ubթcy2B#dAMnK{rr^S :w[>mVےo|P;8M4q Ei 1.4#;u\J_{{9Jѵ)/=v]'-wF~to5+덼K5A M^^RrQgu)$R~ǐ):;,@ x`au0q8B_1 @Ze S{p8[&,m *H3@".[CC߾s4v>5[> >:[JC?"*F3J>3)ʇ$}?{:ux.|E@9C#IԇC;đ>슝E/|C>B#5\>S,VK0,K뫇Rh%4LJ8qP`૦pE63 Ji6٦r06GLuBkA-',,hAdzFrF,PF@ַí *#3 ۼ{Kq!WGxFds-} ߸¢d/II䯪>GãDQxA?s|<4$܍>MS*lc9C򯜌N4IkT͛Xɨ~C5x"0JDOb9HY2T@16Y8t1aA$+/ACqKB<"LkF!Ƥ%.K| $P83$=e z{lvP놽YL1"kD8 b$ĀLND>CkCʕM9ȓ9dHCHDR{,A;M>{E5SD)\G 0IZP;0Xz@@*%l}&$҄QNIQkMhRR(kV3+Tք n׻$ N A#?ӓh| H}%ɲNPǰN%:Ta$K):zyI<"\a.Pt%J`@f 41T `@F 0 Tw\,c,Ks1UQaGuQ%XQ=V˒zTyTռ)[JGE P-KA\cCCc=erC P9@:j9EkHlD$WSF$amfYb}^*LɭԤc CP dgXEwX2H!|UŨJLKDjiܑ8!dmVQ&He56mlYڕL}嫽NHA<'ۆVUǨVle]Qf\` [f_(`[gC~bCJN%#G$ W ιlt4@-qfoARu[BbV[wW/cF4 ]V|9 ϳ=;4* XC:˭9S۴?+į,1d@ΛiFZUߣ2+sԬK 6F|U.U\KXgNVum&\\~ak|Hdӛ*Nkg"UzѬ:n#o4x]|Xf(ݻ&!Dλb׉5vH/xC@D8qOPe٪eKtoe5ZdoM`j[cm6dis&`! " GnV[oYKee>^` >`| NojHQfgLefMž5oWfaE' SBEpU lR&dRZM?BulUq-6x!\֯GSzQ k]B6"^}Bخ^^ i5D6ɨ&>W.sn9Ksx=7fnEs j@w6C5e} rWAOBj(?FG?oetjf~&֏GP?\y}Q\̈RQ_OHZuOu[M"bI$^)"5SNُ5w@,H@, e=JoctY7_m6+/Ppxzw\w|Bo3BZx6nwߎRxLgʡnLsg';[>e꿍t=olkYyQ}aDy'zWdl\GTuI,.?Zϯoס.slzE_5 MaL⋩:N{vjig.&P @4:" @,\ FQ 0+L_+e97瓩T.ڝ> >/=<k+ #|Ի* [(î% ,'~~'{zGqv">C2Yn)s@ PJ0`2D2J$)TД%#޽+ȵ7̫,91&5>PM1LgB4+PPJ DٰT?S9cEm8 ENՔ}=Q4͵JV,g\4mY)N Ӎ>q+dA(YO:pMOYV]lgoEd =n$hPgEQMr<NZ]v^Ven=vܑ%~>׌Mwx]}C婄5`'y⨰F[dGq'{e'!i*Ԗ`gQq,6:)F3TИM Q7ҍQ?BR]_VusKT;>,=3` 鶯UM$k{vͰbbQו?VF]sZ\NM^_.<~Xno9d.v#yCJQdk{ATJ*['&?8g!S@F=#nUйA <\*1-*Zs^)bcΆENXB;x>/=dv?!Luك>WxHǗ!yɅ\M2^bU&wg YNOc~@uRd#@Pxu#A0cćĨșe.q!%)TOo=hgc_37C"S`RKKMLKTh ^SAmɈ@!#l e6R1?jZ<ؒkpB'3Gp3b[9 mCB6 ڔ͵GvtPZoi8>\0Ѯ40t_Rnf,ebYFYz>T~Of>1Ww.섎opH ݒ0ώlRK$dt{FIʩ,ϣz-eD\h YTgm05?K§:PЙh"BbB=DUߛQF.4jвvLx\`p,n¨1,ř:F0~7o:7Ucc~hæ8lgBq5r_Q J|%~>DK:OfBc3GMQ82 :N;@QɈ1,Ʃ YmExN38qMo"\/lTj*.@TUzTXIZqZ"u>ݻ̍4~2rOV!L]ث;0Q]'WHJKUDJRh̲ 4k 83d" VN<r@8Kcp3Gfms\0G!8k+ϻ^,kI)F@T1>w;TaԜ mRJPojZ0(ѻ3ʩss̻OZ|%-~F[RzzU*srQ]h#Sf Ռ_6Y^4Di8d^X:N;v Y~VI%V 9u}]y뭜pD n0kóYCZxADTdJor4^Wv{ٜn 8g;mnїUCϛzS1>;&Vзrfh:/EhOw|m櫫jft42zJ NX#$KSj}YnJo+r{[V|E4N2IX$5@ {NU2C u*0:0.v2)o(ї6.lZ4u9Iq<έ YGQQ'+4-AHl&-2<ҝ/-ޔ)BħT>ICS!2e!M1o!M)!:cT0Mqj>̯i#M5TOs+B+4>@=bhm9ҩJSt,3;t70|~IN0TTSJ,PְN 4sT_TsqSqFX.b/T:1KYSY'@MN-0MC/{E42+.& O4M # rS!0N?u[03I[1[ B%ZA 1K(!ԡT7KTk- bv..dUб8T s <Vf8XԗSuXqUYqg6uRs/K!Z Qu?%MU U@x \uԤi y!OVt-&gOGhMPSXo `w2nX-SFsWsfWf/\66ʯ4{ HUUyJu,STpwtwIYUitt]0 cwVQ4;DQpAWug!p+O_cA]^5s-"P 3Nmk׌ !O`YKw( [EПHNF/tn bAYwKVPVFڒFӳ|Ww;<#}vMb c*Чu!_KwIv'Z#66^+n?uU0T'RJrY"8*u yt)1 wQ˕jxc WUU1o3o-=IX03Ym75 3's6K|tVnSiWꟘ׷!|'oHoX8q8gt P֣xiLֳN˭[W]my8L]gN:E+w@ui6z+vxˇ*g\%Q A;ryf(RRQ/} 0zΝy>Ҿ=˫|{jbV'f)S{8({e >C upK׿ )Wv/Xˁ?#щY ;*y\K=eҽ$Y gZ~i\7ފ%A~A%y^=%H].&NQ]1~*= TV5_wS?%?P{>QvAb AH<.aPlFE"xJ9ãX|ɤRI Q,@IlB_#fxnk/#^EQe41JiʅFUSUj}fW֫ d,%hڮ*;M]ntu_ZX.i+>i:@sؤ>K\DP ?B\PDZ+ cW4. 4M>[0R}2 GSZG Jj'32rݫlvJnF2d*;O/E3.ƍT67b5S,1KS3Nkh8n,,?0COET :Ԃ'E42KIDjNRnNh T}J'IZ|1T%X?ãFDu\AWWUVE[C&oygXrDÖm32D3$6Q{93Ow$nF4 S ˲%Io^,1w~ oL}\4aU_8]|]NxNsKmT%+KXukWpL<ϕg։SW(7cVyAѺ{fe9T5:oYVŋԪ.VEkaE;Gv:麝Q4gnYnqEXn;pطM'rdn\avU-=LqܤSQȶMv}==tvOxK.V廆_lzglRVDrYogUhͺl iwŴYӫ?Cν;=GJfLv܅3z{MG`co .yT\+u).7x*LF4Xq0m§N0)2]iw1v](u!u*h }i!)!_cx^Dx)̣R$.>gTt:\9o,K.IdKyS2Zy!dJ1Ml$ӕp@Gk"E2#42~?!v(cc͝WIsIGmel.y }s (Co7%d k/֌JuGT攴DhnJٕinNRS[LSɇbWU0i]Q)>1:e})PTP\؛sX)ާ9-η(hYE=TU?Ϸ]Mv=L7;#bT*Qh{(rjJI c||tX@6#TjT5(l6 ٚ_l`i\1m5ʾ)6 B`幽yK-ڽU]J޷U:S<=t0 КҮ۩aS .jgkKѺÄq$kޮQ$k,f5ZZ%IXkѬLz2Z;QBo٪&9H"읏g:pj[FalkR-{ݧ8Jpe@*欼Ork Iȗ>2HݴBUk4i7VƮ乷"MPW#_ QjG7,'A(aҹלLxuljqrZjz2%o:l1^[V/kpEx JpX#\՘Mf7 \7W*2nv({̎Vbpe I.cݛ]x:mqYpH&sX7 8 n H =YCR{E_x#aZQW}?Itu!? q qbֶ$kͮ|;KcۜPjGذt\e番] ?yfs:ΕZ6]Ss4vPr1?vn#wksU=1Vejg0e+ { Y?zC0?oGiEOA\/(nIT<>B8ưK;9?A;#Ÿs̿28[C\!DL"pŌ,TĜKwxS5{Q?<90T0#1C|;C34$5+$PCyǃQ<.%,,J Ŭģ2sbE\Qڵ^[H9gEE| ["3{h2,E2I'$_: OD)\+7,eqt? /0ǪGFu;)pGT6;L,|Gt>;ZʄASnj62d:"E]:DĘI[ IT#|e3fIF~M?/2F̥I,\1$J4MCy0̴>K VdНv;APT^[- ̰5F]XͼCM>8A[UWXGRR\|]%cҕĺ>uD\LLLL5;{]\L<.eBjrB]]Bu=,cщH%3^EU^T}Vm谽G=-MbIM|G)4F>mBhZ(4 3MdڡRZJbu De1HP\ GMgT庿K5W^([Tv"jJ%_VTn*&ai,3RN/܎dM$,`9>5l\]rHlETV^q2nI7f1gRrV:N>QHr Jö|,g/dX&%[agb1[͇N[CQhlJ_& .^.1eul߲dftYS18Đj}qjFnݍjdRdp]gcjjTM Ba ,*"0x>%B1Xf9C#2Z?!#x2Y$!r|J)NsNqCCy:=ѤTiHfZ2Vv>)%[fVʝekv`pX<&b.&2d08+j1XxF;Y>[E;>붚-{oڽZpN'k6o9{g8uWzU s$«$ZAP\; Pd"/ Dғe5ᔖӓc^U5H5R};>8EEfT>duF qo( CYzMqfBZNj"" Y5XEΙj=Ͳ%pD2!Tݣs66hi݁{&VU]^\Occ'aa\z;M2+v){噧5ٷ/eɔvW+dW-ݻ'aF kdMɲ9lSjfI6RvN~ջj޶[歳\$ev_2:lOqߕ|鹾_I+7ד_,RH)Ĭz,Z"DfPLŸ0C@Ĩm}L7-LJAtZ5*lwFsF$_,eKWd{]R*!d2o4&}x y#QId0JOI ((䡛m&B.f3bcK)[4*^Ӹo4LYӽ>1K$ɍUI)y'E˾e[ *n9cmj4֡kwTś W[RcaQ;"ͻqF97^e[k2kpYxVLvgIiˠ ,Ԃ<`v PkpTY P%t N3k uV+*,+h}%YmrSTg9Ր:Oy%.I7 -7*\usmź6]n:3i-ջQRӇwv̏4ߧn[w9V*1PZ'+, Ep0yO27}{<=ZjVg.G!UW+8V[ U1c_bd-vebnp,Ude3%ȧ4ǨlmbfoSN\r͛:](f%Ћh&GO8Nq~TRU,o"i¯'ѩo*#~5įW)CIyY@&w*'e}ج#U{+RѐB /'BË><oIn9PdjnLnv#D.VnNg&*c({9PL"=H:(1jwNۭR\θ݅ kM "C P0Cn  K6 Og// H00qpH%8X1o` m/JPĠs3̌.% /-w 1ڑRVP \Qo+Α*OD l2AQ / / 1h FO 5 Gr0kK ?հP^,ἠ*.g!6qD找o+ekc˃ OtrQ!R{"[#q_#ihKm*rE j[ 'l9 '␭0A(p(-2})uo*g/,'p',2njYJ*7-O.2˲=Q04x*܋%S #Qg&#)/ %μ1у?O341?.4I6sTp4W#)Bp3!$6k)SwD0Dh.1ƺҙӫ+oA8+.Q/+"g-:M͚'O!-lLQprګ</y=d9r>?>.$HLC$Aq4p-22Vn ( 8Tc%6t?>lQPEQr}G Y8+oEtsQZc䢻03GDHTsʭJs-qsEɞM;BG/EG>ܫK2oQ.5sXf 54@s7& t #4PoO4*}ѨsPSFR6/7/QTNfsR,]EU֕,KFgFQtkq;,rRR eHCZE.M9Ntx k/sGWuJ KuKY GA u Ny&u]m)Zfpc'ճ?MReMO>dTг_PU [y%5⳩C^U57K/iCS +ְ'=7$m2teg Z/hvh-6T\ ]4#\Bb6]of,Uk7VH)SR3"o*6 U1,TL.O9bwb;SI .idzwofX5XW!jϝ>-Ot?rsvoM=K4pU@euqA't ֛1KlIw# U~r! Wl5{U7<_yǵ9I}nxxj6}T-6%I;ҵMVOn2˖=_wpqh;~W~hrh-1m>X[4&xNgatOA3AчhrMmgU 8xuxO^QyolL_˅Ǒ v 9n3_P V'c47}.d.\UK}/}Q~vT vGˌ9qel eNMyXu*<3XvuhVak1[y\wGkWńo!4a9y+l*yU9^?f~գz:܊IXӽ<tet v2ႫS%4y\7EI<72׍³Ѫ&|[k`A,7a׷-|zm9s'yW/:+IY2Ї$˷ue|s'Ws|$[ʘLտv_Y4!}"X#Q7\qY_ŝakcE:U7Fy/9W[wS:ΕzŕXM] f%\VP-b+[YXXA!O7Qsߴہ󌹷o{5N|uWJ| i\ձ ټry9MN5*EMaݹ5"Zaw7zz~]8=B[rw¥"g]U[PA#YLSKw>GH}A7 tEܹ=*k%cg1c:ĘWnQ_=VnP;'s Q#  ^5ǽ^M~ZOٕ͜i;V͒^ݛXc;{cFѝ  ?D ¡|.!ш4B-c/ԂC8^O,JQIW)D9-̧sDf (IiTjLޟ TM}%DV k5t.֋} j^o7%|vˌ/>+]`sk r|u+h28M-k}Nr6ze#o{ q+qsgQCSP;9پS?_wkj[*siBT㪽)OjδoLЊ*0@/cjn L41[H1;v7<7NЈkoaE\FѼG"8 JGszȲmI5KQܱ%I4̳f̳3lMΌg Қ9Л Ot,0>ЉK:/F i Mpʋ ҉==UEQ/$=XCUGZ>T+R-X1v/4rtJ#7-te!̭;#SEIvlvcvąnWc[̛(YN*vҤ.N0Yw{o,]6_s;axf:G4+?Et?P5uj8V5ND)cC,eP5VCM[OzeiT?vF (ٺi|`,FY:_N8EZ~ZF]zĤnUl j\>ѦLF5^:a3;fS-y^AC}/EiNt+eYhqR4ۗS=7b>>wwׇgϥi}p?7bVZgf7e_cr0:m{0h ˩Ƕ(#rA\#D˞[t,^=΅óV3H^u2Cן^3ym4nJN sS3vD%oaEu  g`w}ˁڵZNJ3h#"1kA<ܤ+ ' `w! E8t$+(땓>BiQ*NKNLN'4kyLle*[I_# jQVZa1"#cg.bl'jm(řyOI臯N1F(^F5^U26Ʃ##W^rV<ILOće!T" Ց& FA\# 475E 9@6@eU+4T3͗32QTpZ S!~zZDTe>>'̒,5@Ae`1, JT4Ut8#(z@c8ȚGgN@Y5bmsMzlaȭ2Ү(nJU*m',M fUVw:V! C5bԊlڦ~uE Zx-_h]BݪpJP!`홱mvAKg=w&ak4f0 I-[Xf?Z]Kjӫ=w:* ֌u{3mwe˛xo$z\y+4yz3ѭ~nm-ѽ 0&eI٭,׈5u{7g%V&Z*j(V JR٤}$F,t{,iZK 14Z?xE\*|z.5X1ƣR%qƭ;ܣZZU/D=RJji(W .<ۢ+3t7f{0nXc?'p,hmCǝ#}s(>7׊U 2ƺqۧNuimșޮ\lyr2ʈs 7YKeݖKiPl8տGdnwls_طVsa=OB@^xWg|a}席 3O@lIpvWhi+|_x}wo %Yu5,:= wwڗ%IỎ.;sW='->9%Շd¢:fۙP&j_Iu߃F{Ӿ>{4o̴kwNt_=Iֳ ĸ[IL?.9e<=9I"5 9{Ϲ5d+"-K&Sc@{2 8k& e*.:h:{:/ 3@7rѠc3yۉ8s@1?d<$8zOL?J>CcC V ?ȝkǡɐ_@J.Ó̹<㖵,Ct 1 =1 [6Z3ٹ:)ض=xD+.֢ @/Po4kz> 3\N? $+vS'h7$$$0;[¡arH>QGE`M?[qAw¼[1F$;%597*[2*C\HA>+#[ѽ "22)CD 6C*C QDk y@oA3Vb mDSOEPdQF#8ECutVAh;V;L"ýA)/WEKg-*#(络ɢ(ƢGK354*UrA$ Fq4$FRdHӸU>ǯ?+0lһ#Ft+u0D ,$SPTMҘ} @lC:+ӫJ<6M5t8%1GI=9=M9фͬ:%DMNQ.TUNL=1= ;%'|Ȥ$ɩqvӀº+L;>OO/:m6R1;6A7ӄ˓k=SCУU,Jj5CǜGБ6 OML<\)GN"&CάЪ(Aii@04 /pz P/? 9#,sEocDq|oFq} #깑%<2;'p @7҄)2/3r$r#W5IC2399.js:Kk,M:;t6El:0 9>HGS/t/nA\,pP* %C܂pD8׼tpC(;$*c J9\S0>(OcNCVd9ieq=(j̉rK{:"hc F6w"V ^NvlS^:Myn~S;6匜~r a\ Fe(G?,RqtB'Ęa1);HP^\/.jVi*atvZ¯;s-,/;w@D=8o$YR-gF98ќ\-OWg'9NSq:$WI2zz#>[e2CWtIhw5>ԌRVGCM$tRQ ("v5ٷšm|qPW*xU?jD6U*HLginҭMNzNICpwmb")VV]oE鏵-J`S]wyP*^l%63/,-՛g섓trYS<%|,b*BX`>^;khŬU6k0g; ܆Yۺu+S].jU9Q_ivqN}-:o62LEޙWQ^;y_PYo-s)<7``khַ8h吥gCcQ>p&8ngK!s7>L1EHb܌#,Kwia++.mA5!ꖫ:V9Yt|y"8E߰\ysffL*gfɥMHkT[Ch.vܬp R~:Mh?5Ajy~*Lq7jzfhwxeU"߳\֭9:,kTu!*|Vbs<]ܷn&+d~Wqf3&歳 x&58ygO؆:ޚ*H=bp[;A z[ 'ZWpu.+O:R4X7djY#.xbx}71w@]N_X2<#[>kN=>~G#Q{Q!t ={_w ߛуg;dO${kζg7G:lԆsv~p)>{Sћ>opo\wʈ؇nKVgvZO3,\U tEɥwٛt wglLY`#jvɽyś/K>5-KEz|˔9'MvKX]2':>CEqüQN Ϻ7'Mڹ5^Y]\2Tt#5Sy2>A~yۧS>1F 5-5K>wzi"A!]_Hn1gY *PCm/զwK(?+B7!͚ǹ~9sZۡwx]}Ik[Pޙ_ܹ;_ɥ_AU APHD. P<#Bb1X> n%I!9DU%y6aiD(oepZAhM&(C) ]QT*jXիrJJMXkEGZzo.{=H^-wWpUU6&L_z6kD<{I4ڝLރk:ίgL96q#ΤymCK7/U"?ѣ2Gfq{\s[̛z<ȷSI鼶"Ͳc(,K3CJ4@/l @4+2P92,0l?1#-ElKJ ƫ,d4L$A)MS'ƑHRTI҂m"c)J)?5N73.T܁lol89S{C39P*s5r5yt1DGpAOaREEN 8bR;GэY# 5 ejXՍ1]DZgMLVmHݷo[*wvLĐO{V]#fN.GocEX >K/wO<|[ꇹ=h'A[UuXTv;U$d6ASMX_eu]fټ!dB6}lVYh9GyMjkZU\ñlm\K{WFنL3)RM}8n!{^21;Jώ1Qϓc<`?b'Tf_{\w's|^ޔ R;^B ahZ΃]:.Icv ٬[lwOvYiv헩EO'36nhZ{ðo=l<<]!$_$Ϲ 9='(;.¿uJ#** ;ϥD HP4L"iؼ>^{ BD!Yg,";zace- 3 ӥWC#YJ&=DmIMm_[u>c`_RIM(5ܣT%:w.bI e`Dm`ԉqFqoE?KdP#÷ax0HXKJO؎YBF+m ǖJRRTr\IZbB"Ӛ&7H"TlI(Fxs̰\S~3x,ڃ3):c`2G*`flA%I,ӈIHh4Pi̝|feT+(IX&$K(p΍Lr&(3/^OKls^ PIgk)jG( [LUy%XjMθ: lR:t3H1Yy炄ךm[삕q'b%6c,D**]l&h쫢)-ixdS+mJ61|5%Q F&Tˁ6DݎuJFwַ`W6ըcs_sF*4_}1 u4-7rs7F)$*VNZD-ue;+c& бPY[R,Ѥvb2PN'_CnHmv(ۉj&sBݭpnީ{7N4¸jx^'dRwϏpMՐ/dWBۯuV^N['[%dn#hp>(e{aH귦,O ,ahPf&L\WK4DEKR1eMLkt3%ànq s];o.HڳߘmҨelq#=G3&YGT787ao酌GTnh(%R[}g*Y%J1itHYvtz{J̝xk-=w. rXʺQd8yNpݾ7Wq3뜟r\R;9}.c t+=!6 GhO:"(6$s*:+v}Z`M0"XFoG~t҅o8O oUn6$e'OYqkS_>s{YeP{6rM3PZ<(y=bvMNt#*uXD.AoJt-̿yvm}P}D(8P3t }l"m<[n\KLO6^U=go2ddV~Kǧry[+gB82\ :=Rؖ =ťk 3{q0]:{;!;Z;{z=:2=c>ckD!#̛ @:s?G8k< ?s"+J5R?۽2>r?4Cr2cq<64 \ JRpc &\?aC9m0- D4+v>Bs>3 ;P>{# "ِ? >1DTxDMǫG>-~ECgU>y;TV[% TZۻ[YE<^F# XT46 [lŌi9;9dI21+bt)?[;JHDܯ7O!;TRdS˃&\$#*F;?E=#PH<LJ|K qHLo}L˓stஜ@DNN L]#I#ŲkILcȗy.cN5㌿̻@zɘ B`ЈT6A8B)xr5cШ̊GGt.xW iLzy-OpMEJTIME N%HG+vON2,V9UdVKw+_,a|V# 24ܞ2<ܱ773+t:,u[#gm]D+7sH6]k Ki'jMᴻω}>vǥt8x,\k)hK,_lXk 7̾#obot@zT ژA .PC? t?DpLGLTZø1r0mtː/q4*GȎKG2j&92y)7T%rt4o1.d#6Mc9Cp³ )L.0販 L-0;ooCte(F+C R CR/=FOUEIXu&DrV`ͲY^JYr ܯmg27̖i eXM8s=:\}\cgRN.4NU_S8#B•[ U*5Q(]løF3- <&A<^Lk[dx;09]Xq1y~w{s6aź ld]-4Zr[,&h5wk-/ؗM6m33vzȗš}j`uUᙦ+fYU!UmtU -tXWCC]a/?i}y{8X[{/鲿mk l0:>n:rN's)ꞥsxۯ||#/:Q?IQ9WY/.$.> ;#uYR$}]?A`u͙9 .u CAy#Cj]Od|tko$=֍޳Lmn&?Q{}7%Xo9f:~.Ɔk2(N},p(U{r9ǓDsBS'eWuW |P B>͘+iJ7Eҩ+H9p%4R}xk.r҈E1c]EE0_bjO<ˋɎ5D٠fٮzq\h \}+LA H7:R.O] I$qɩ옠PO%d0nIy %dIOI gAQE<|:ty<9߄pyM#h&LNcK("l]ĺGy2т!EXl/Js4 +"9F 9L>~G%F INKܥgNԥmI[s޺8hg6X ]*UkO촚rK`NE!>_yU->65HS:XQO-+խC+1I^1 Q ۽2:joWNjRm%*Y-?>mh. 5L3\EḾ,\n+*-ÑٺiEHxc(Mԫ"*9 jH;Fr]'JXȬL%_u$<͙aF/_)njfFyY]qJBZK'n, ¸[#.MU߇{s60@VUsYuܫϐnLzHQidP-vYE̮taf,sP`,44V_~Ojb,tx>g:Y-.9a 3/-54V`LPΆno=FSDu]ZOܯ atFS)c3@xM_7ˌkͮc_q*v9MS_Zk6S#΂x;l6Џϩꮑ'FGk:Wwv]A4 :_%3f exFNϑ[ȔԔ oU;.W;$Rw˾Ίǟn:~zM~?}?S&JlGjD~^)ݽ{z|];eH^^x%'~.wӻ޸=$j(v`-, y'kQlOx\w*.EMNOA+lꦢE.Z\jjG&o~F|P,H)-.,:!OO/ LMP$od毰cN8ll nhALbRrNB /5gwLGKp>ήlt*-,[iĉ![.1C}nP -^$,ի6 /OǤ p0"Sl/0 0FOQ'| ν#]OLk8nk8 o!3[xFr2PSA+: 5/Qt55,Rgn5'E5O`l7W?sU!V37Ai*L#44 YUM4'Ҋmԗ3-bqcm(߭{R\P F -r[ I'Q!9ufbJEU3RO;t[[N|Sw(;[W_Րc3sy:o@;?N<4:UF;YD9M9#rgkXguu+Z<\=5/½{X[}<\Q|?|C ;yVjEmxH>kQq@-yx={ ϳY}=Mv#;eE{^Տr]%W!z;ᾱ^~'_ՠZ/^EHb>[_U^!_W%R'}ރuT6{={AK2  AH4 tBH,j"1>-c2iG)I)_3E%щu9\5L(tY.8Sh 7;*LNYQ՚"Pi{ElX_Rs][xo{01`P}T Ltҩ۝Qi6n+ZT{jot|gV;=s>Ҥ>Ȼ:NP+AD P+ A .CNJ «>5?6;E.XEJklw73Gmo 5t~n<2R"GCҷ32dF幯г*?)kΊ /t6> $H 4p={IAP}AI3 8SBUIq1SÍlE1dI+s"2-ƱW"]&֕ܫ_H=xV՛$Y{*XM_6JH|/9*>\B3+sr7@ 9ӷCO\L)Ԅ,^ԽQWҗJz`XSӞ1OITACTNVP[bGU,W.]]pe{f5X66Xcp>iəuov{cWeR6qhZğ/S\Վ_>O:17wm.CvSBkp[sad!9d^-QhWD6=.6Ց˺Uiguuݧ>zn0v:;_6`}mE;P$~{?5XpX7تC9B;yr гdC`xfӮ"|ѕD[\XqquA}\lpMsp8H'`N Axz!R vr&<6d[ n#Hx?jɘxRK× dNI,!8nAP]~V 3bF6IS F⋒G4{xѽGW $R*g;8<1w9 #]rƮ2ݦvt { lGg,]RP#Ը9{k\]5J F=avv\P[#RoVǛP zIyqqV+T0O,-A%+e]yx~ď/%ޯz^QzB]EW|Dj6lOeR:|ٗ4g#6Lj?amO6ۛk8O!q3JJY 9x]:{m;t˙"RcIaAǹ(=O-۱2·D{H_d9#΅δ誃 M8sr`gͳk΍5IE(%^ޒΠ;)Q6HܷB5[U C茪\:4o]ȼ_}&G:lKpg=fm1Q1&gg9KI3vt)]j׫BM5|viG$:1Zk^jF|7aeMY,'_xk(]_ckvܖr{!7>_U#8m//3[JhǠB{[8mofᇹ9[O']^rw1pZػޟeX^ƍ=|g$5㸝Z&kϫaG'O9g?P!z=30{cڦKxBὡLӻ@ y( *KTÇ,K8Y/K8|(Ӿ#\,;#;Yk?;ɩSs*[9B9ж4D(*4jj#3q9=oL,= *KsBGت&c4l:=9>49$گ@;3N8 $Ak粫~]!n><3';k2/DJA  8 A0\& !Ј2'"QXtƢ9CId3H*vߟ\9Dʺ>{}7Rc̰t%xSw0r-!T,\Zi(D0p-~C4QT)5WXR=fE^2őIZeekf]QmofUͅYu쯑ۙmזr؆-ux}\lzޘ]twvlm3Otw Pn뗆Bs{ |5\o:!wz~kV竟+jx% Gf6t29Mhm}6iWxf*j̛e=>>f+<Nrl~_hfy`GQp_ _L59S3<ó.2SE!g`ü6R;hHxn T뙳0 4NKƂewrzm< PŽ=Ca.1?~I} P@H[zS I?Dic5+r2.@+Cı)%}gDJ\T}WoTrF+$$ӬH{ŤֻZ녔q:RFR`\B$Jecq$jόExIGDU=mysJjF5AX8Rd#*J;mH9dHSH8'zU<9&ajKH*r+J"k%C>:[KG0tƤ ]0Kt}V0GJi\r,l^+=~ &ej콱+Mh&_@X b3wҐ5rbj\mm O`|u Bu=~WU氢Rm$rDe~wp;7P(KlIbqV #!LN(^N6QQХ !GF ')!# ,BeΒ+(¬" #=iRXH&pM p亱&Q.莒1nVzMҳ)1mAOSϵ*o r*ܾ5I, B2p3q*5#4e3%m1I0N@3r9y%N&Q<rNcm;W"0.\1Ƣ*+S{/'u+7m}6 uG/8'!C 93e[.J#$1Q:rCD3=iVro&;Fγ%03P=2S ` '3 +6R2*GA>n* 67++QEO5#BB!CL%Mљ-tO s3 aDQ}:0@I0Q%O$ ;EPPuEb- sFMHIJҚ5qhnK~VWt!SXtX09\L[Nՠc\9E[IHgeU[vs;O:c 5&Ե*jjr4'U-aA^e34 oo t&6iWMVQc6O5tNO{FNtnZΓePIeNb%'RW& 2wq^j)w^ԝL7pU?U?uVV@A_Bu0W-*5iA87kW7#jw#xJxTKvQr6QE TmoTU:x(:Eζ/}X&: SRYJx5\wJ;}[zؓi5KLͱzw {6: Ǹa:w}լ-:)#yf|8]m{'0ݹy޺Q{ve1 Bg[{VEĐ{&{zy[݁{iu>o{A_BM8bcXNoʓs<'qy˸=]Efm÷̜1Cgs9Y=beWZuNF1(sƐn{uڧ܁cǝ%Z7;[MMɇ!yv;<u|+oWy5ͻ˘c};0操]7ԇ/w}_SֵZى[ގ黍}sѯ/"^'Iw^.彗6O^lz>[戲 /ҧkm e]똼Y[ͼ;pVM Q>}_Q4[0!?QI y-* `HL. @ؔ&Dh27c8D$<+K!2Exs:ϧ-}3Qi)5MS NUU\Wo^YD0}nsڬ3봢u_d*ŚM`!= !xc8fv_4<^gIehsu44tj/JR1&G̪cExFSsjT)jdz}^̲r;{{s}4L/ Jl00{60c4Al*@pSK/CHδ- 11K!m[Zz(6k81lJv2`4y$;D'H.dҵ&RuasYݞuVtN73ZٖccNS6Y{(TjLybLvoNe!6߫kl*b7CC])Rۀ^Px-EBm D8+]FGp9'ӿ>TWsdI9gZ丛\9:dƇ`sDu /)^xV볷ķUOܿn[~Ǽ鄯OtOw<[Uſ|?_S}ƽOuNm@ 0u.| eּX IvpQp;e`Wsj:!j}4AT1<0=n|[44zA?W|5>hE|1wvXCE'\Cu10 "XJ1w*c"45 F!:gUrL{)Ax5WvvPFxM$f߀+5bw.{XT۵bn*7vuرbkh."8-L\lU8Ek 9Ci5S D`cʓgjn2neϨ;m]`|8^z!&R?^7К#h=wnd'WɌYyQys ӭ PD2 Cap|F- Ģј,r7#7%G \~MHe $AM1lc3gPp CQ*NMU RFU9j\Wkv%EYVekm;svK׋U~0[alL:y6|Y2Hf9gwSr׫!l"}+"`-~Cn"(%fOIbzl^bҹq;%cQP9=N_̙K,һ?jI4M߼e֮ޱ ش@P, m4ҷ3(2TB0o BqCg;&0N 5L[ 1s~D[z2 8FQ{Gnoԛ'*/9{;i?O"J)9ˮ.@s0ϊy4Kr8K +:6M ϔ=.1CrEt H1r,CO9ьE%#0=T)Uq UTiTHQOQS-7X s`WlUXM&P+=]ڪkٓBqK5]‚[k*s@۳KPݷ%mN7s `KAE]t!$TՍ\Vtx}S,#dV%AZEGQ5XY\Ӫic ~7]7%US9Pg)s@ȟڎ7]Vvjk2Z~;6O߭|/ Wd]t_WrO`g̩J.Y:4<` rՉv-ﴥZ` 5i]kp/%^wRB[l-d@Љ=AnD؝#oE(p_Nj,m1@fM("rO)( +FHs(K󲃰g'U!c_prGwrȈa$#͈ô d|l>)CnGFeDPR+g $u?*1 zģSN&+K_g1=># }g1bGäiF#4&V@$4h"OG$OL!E!!JW\$!?28Ǐ;Hj*T& toKJ-E |/ lTk@5X=r}iwgCj& ζA nTF$@*TB%U$9-dk]c|*ъHU,P2lj(zFP|tޢT'A3歁thkqeޗSgQ*Tv?hRJ{U9R4:y)CNY&MU8s-\B[x-_HarJ⸖t-<8U]uo%OS"]=w2phU^+Eo .%}1݊EJY!@k/Iy5Ӫ3K/y3We іnh6Jzдjl f#leWRԽ*7,}t҅PyRaN/g(AHewy=J_{ק﵇*&eCM+SMC9n(vgSs~ƚ?H(qUaJcGnQ!u}-@(2涞 ,q ǫֿNMԷq*~xx>F $v%ۭ7 y//7C(m (6s CUAv힊b<}#zi%j h5OߜYM:vR{em-iW.n#WwVW6L !.}zxh<+m+^c%1wls>'ѼwP}=ooݮz]?/zrbJk;7ֲ ]{ڰ%uw>˓lȤγj ~:Rz":6[˧'_7)LΏZ-.OXKDDa ,OxՎKlz8{ lnI $.m!PdðH@O2Q\m k %N0&NR`oh, pܛp2 n#LM`zBF~~+D&FaĢۑ-O`I

CHү??9T4е+s?ԡ8m"qu5y9KQA8p#Cqh$#Cu=1%zP]6Ge}Hd\ѹ6 iTj |U2Vv]Qjs_9g4TJbTAhUkeq,ʹ[YvSYdZU_'wiOeu[pwzw4j5gT5!^6ȑMTv v`3ks40gUQhA8j7k9rvV#BwZIuV&&$.ntY:W d4^)pPK)olCf Cg(r|Q Tq;r8]};5iJ4PU{i+u+WtEQtp̖jM'w7w0QWsNx*NynP}cyjԺ83USx_usR~qu{rT WiKK8mUuA6m#+!u4wH98Skgvd xio99Y*&7mC KYO1Z<]81ooy=oX6w\qTsf1dxqr f s-m91i1~Bdgv:9<!o[s1ޡ5k67ˁ1ykwXy yy:yxe8SKyryyuwc-|~iI Ob5lvYX Yx7cPcc2yX18۟ӌڝU]W9xS7sM =@QBv4/B0ZIU\q)~9S؂aueG:Ds-tRM n8H7Q&*Dz=r[O|ɪڱףz{t:͆ ypqYWuBpVkY"cٜFw)m{w[!9鹹Z[Ղ:H[Ǫ[K2+1N˵|a[xs}!++'wAwm BYK.[z;G7Š;{9ƹS蛴.U)ewΉd| };_ZɆ]k5< 2ǚ[:;C4ӎh5z8".X!t; /{N5={wg2{YI-be3x0];?ڿ_q4}~IqX]ܟcwKT7~} PFޓ<єɕ)מݖpQ3؟Bk#ݩ>8  A@D. "N)hn9GI%Io\Q- ]1&iw-Of)QbD"KSh|JD*(:`f8W"6*zf*)6ڈFcCdW ǰ M4!ob`3<,^zK A=.MtKixT~%°GkәʢP=3vsFY{{3{<&~Ns%O>2"LKf۵-V($L 6PBBAУyA#4 E$TN3R'%]DitgDqӕD!Hr$<3>nɏ/;J-IO Nܝ+Jr3M'.L,6Jڶ.9@0P!2 ϱ}̵TQF- QDE%E9Bme!F MEծ57N.U+ZVs$]toT?M`Gҭ{16Y;ٶL:+vU>r|򮦹u8_-=[YY.Ϋ;uZ'/}7_WW\v]GEeݩ?ΐ=o ѴwDU՗!^Gp^ V[ }3nٳF?p usf.:v;]Ft:y`3xy s.T }%*F!<טCnl9>_ 0HϿ'Hp/1߄;uPbUs IQq!K 8 SkW;¸S3NpGy3j9b'6zh/%TZ1J)ŃuQo*"4 P1IЬ{/C'"^,h&\db|9*BzI=DI*cAHR$;iǹ4frԞuҺK5!LLPeeBlӉcHi|ڛBSL3x?gZ}Q6N) fzEZ=;{Nd "tfZ,"Hjit֧ԗ8&́X4I,*ݑTM*؊c#g|,MqZcT$`~Uj)ŶÈmrj= 2>] XrqL5Pu]uodrE[AKז^gd*[N 6$bW+D:m|T:M @0d6 C(VF"1XZ/GM%ȡM/J9\a-M#456JgtuD"{AӤJ>UmriUTņgZmVeɮ6{uC/x`/˭iܫ81LNNu7Ȯk5vgiX6W^r@%BOҸ:t xɔəqsDP;TSEWm5nUֻ^mcv?g}_ SJ6{ ZcT5BA* C0|*C) %t<شC!$(QT'$,o6ѬSҔ .|ȳz24Jk#KC.08#s:+?R580$ʷM;oO1Eϱa@FJij @+ 6R44Eұ/DS44H5u-U%;EtCU_͏7#V(}ZHnZIHQrff2MnX>yf~TÜ|;J7f`;9~^XzǗ]B>^G씬]aGtүl-RUYUl;dcVJ]Vd.fVqjhy-7ziݥb8vHֲfE3a bdgwtR;Js8c@=n|t-3Ջwf:gD}C5.ZKz[~U-" 3?w_vH[j˫T5s][r03kvΖlvnlqݺ5iw5ko49[$'Z7G}C0{cbH4'/:wMZzq)Ӏ 3Wήq-ۛ7bɮh)3>{ϰ{{Y-l5\}֝D>O,eR;exVu%E<DePkLՄb`aWgqQW/gB]|wO~V_.\C$[K }<{ß?GɲFު?z(mX3tMN X.&*nzKoO!&ot+Oۭ<oʲrfw8R 8ӮzGj%0n}n$3r駠&:-,~PS :n PC 0,ϫY.. d|, K- .) Ѐ ?/ȍP q8l}/  I"0)0HI.8p h.Ew] 0|p~gNi wp-1  8T. nǏI<PRzVLA$U(OJj9q/niQ i & 1.j0ɢ 11-U~Qp&p6MZ0%[ #2qp2(z҃\125Ϟ(j;!P$U"0KUC-3"WW& %R0k*  M ҎQ06raq-1qK 172d2p*IL_-qnlLgC,Q$RA*MR0+. e&ѹ//&ˏ;( 19xQ[;3qI/&Q3R)2v31Q 3 m SCH Np\"%"26>ؘi!27-dz{D-8Pw@4/<20w9:0C'=Sڪԫ3<k3a.D۲sM@]( @$"Y@$NtT-c$T)?CtLD;&([%}$lTU1419N-Eo/E52iMSl9Ehu3H 5+#TpYR15u*pQSeOK R5U/L4/LtV4MCӓ)[M;A;QNs: tOq!NnF uEfbQ5.U4E+'55--t;@%J-/ IS\cRU!(8B)VUJ_WPLDRGQ4DYs3# XEY;s7X/=T<`5u>KUW^UY2euS"O6 \]R8TkT5a6gc_5uh 9/MmQOUn{[iU3GD+Y6+j%(lV;G~ Gԇ"t-Q{?2!mQѐVf=5-AAUYg4KquU֓8 r,Ww(|VBx6`;cv PY4L#XsOP'in#W,%zv!pwqrΖW6ZMǓ6w^WAmTf,^ r,׹'{cmwbs11cV}_~ wl7]v|Z/q6krwrB6Ug5ωpYo2o5\wfwIqtwzKބ4I|T"V?Lm/Dt7Տ}} 朷k+F5чG9&)@x neeReO8@X?6SezO]Crt!qC$QՅaX趿ukmFai)RFTS=b~ω oPa-㷟YY?pwxryJxhX_aTE[ٓXᎹyt39w|mXqusCWVs%:jcWXtwvֹؖB@wYSYafIPژ/,pwA7ϚQ*055hRokT>MUyMؽܛպEYc=O8=SYwal5g~~Z.Y`޵ٗA'F>ŜUAJH훃ܣޙ \K+}ߞ<ֹ?<'/C\~e_v׉B^ߟɵ7> ApT. pH2%EXb9BPy zI$ǤXA*Gei5My=N%GhLzEB t"ϪjfYSU]oݬ(|_4)*W&FvJ,#%KfS&{eY$_Gyocbzso4qqW/s:BR.KMSo@/'cZ+ߢ| 5O.!kģnKnL~KgBp.8p$p,0>ǧP1 ]BͪrAʛvFp %lHGQ˟$#H댊'҄Ij)L-K-I.4P2;0+̹AIGͤm14,B- ]!UI&ti1EIqbPtkPU$SuJyVcXKΝe:=,[@O۽W36=6 웽R:سzf֓~Y639KҬm:3ӻ>S _?6Tru]57T=QxUw"Eu!QxXvR5WѥwwbX~%VVyn9Ғ[ccyJevm3ZfefpmcW恑gVq8=ɥCL1B_4z^Q6J"xix^F^|_p sa^:{Wɋ{&KXک{pg3L9g͜|[9esϤfS7OSѫ۔#u{jѵ'w}]jvRuQ9ئ{Y?N]?p0?~IV\=[8DT޻"m( z<|cl,<! #(O91Xz7OzhqYL:7 V;e xcJ? kQBD_W}mLA(0)W3QKKW;t NRzܯycԧ)w2ȢzS^<È8]$Aܒ:|jw=O^<ߧ~bzJf?8 V2BX*L?L4A0J@[4Ф Eqk!M9o\fƎ8J;ѻ>NHjDr;2/Tҫ"Ib-*ܯ 4KS<5͓l0 #_8>t΋|E+C1Q>(00>4EC?A4єLuK.7$4<2O!T]kT2e]TUWNyTKol2+j4[W|aYkLlLSv?;tdQBt+p4-LtYOD-w Sn[+EД~=Edؖ_U׎կ!͍G]+ZL5Bʏ}a9U/׍a_cag` &̓>lqޔKi ևP4^_z6%㦨Q?k9ݷ4nWW>eY/Zf>9*yKfQq Y{{_1V2YDFyg$Q/i3+Y>.fq?(b[LjHc…QZF/l_Q]F ZS2B{"!̨dR1QUiuqUv3;Yku|`&D*N¹YzUrt=WZ#4d۫e;7-stKQY.XN!&=ç4}Uw]IEkJ'מڨj}W{WUTLׁſs2^ \Qhj:IEM v'8[,Ƹ2be2=Slfj`+09WA % kMӺ2]ymqxb=^bH{/Uj#brwz+{ B,,˝fhey2^Pzk)dlk'`MK5Cwa- dƷ8jIH-/ꎫ֞Cw',;l7]-v Im<꣟'O_˙w:ʖɫ:?&v;\j߼lۺk7.hĶ灖m}qŔK>-*ܙ.U|{pfS6#ڀdɛs\>+:[̷V՗Komue̶֏Stsԣ cIe )ͣiK@f6xL>}֗usiRmo~(ϓ-MF.ro6Oo$pB3E8L4B-<.W,2=ESH-A62r3G@9H7i@-&ABEhH*B*1qw'wB =!c!?tK31E4G[ET-G2sb>tYNDSJ0H P@mK&) jME9790OJ6MB:-HbACL *qMQ44=pJcP11G%UNjYCH]PՌ\Qk(!R4N{R&3ߴYAKᔒ=MX5PT=TMtqwN3n]^mOu>?X uU5:s@QVԡ&)0(U0C9Krb%S@PP\]2'WT{3yU UEvWT]V[,_]uUG_g`g8i4acu?IIեboJMoJ1T5(+\f>h24Teȫ.%UTe=m=1hQH1 WѿWxm$vO`um_5c&U\QCԉ0'-9IA)ӥS W#lVvTufQAn5fogW,e6wwPma6jjW@]r0v)ikS//@-[[6!3S35c7WwvTfِwhv{jf4w}_W78lvZkvdHӵs5GLWK9y||[}4u-pt_xv߀i~x7ux]A}xwwW!es.yad/07Zx eTLl5i7ba$b񋎑tiMVہW]qR-iiK+npYFVYW4knM8{nqpQW87zC%R mzԗXOVCc8ƣ˄h8+PHo%w^v7y<5XFxpUO؁~wq/bUzx-1W[hAc}r dW8˹PVg6T=co2~Yi4 F},YyۙzRY7/hy%ױ6/wH1uQ}CZo"˝4|X[5T~8Z+Yw٦ق 9:r'rGDG-r9kz ?d3'JQU"vGgMc#Z~uVxYr6r_XZmzS9=%嬄78?J͓ty;:cZE1{l{4Zb}:aI:i箹Dz_/_fgy:%:D qZS[@qGK[ =Z/)s&i>ՙ V0 韧lռmWϚ)}}HZi)ۛ?=[7J;Io  ? ?n ?86 ?>>(1?=S?hs H?"$,2k&#b!@,\"dMtGsW*background@2x.pngtiffutil v301.1 HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Kmtetzle-2.1.5+dfsg1/data/unix/0000755000175000017500000000000013522554645016123 5ustar jonathanjonathantetzle-2.1.5+dfsg1/data/unix/tetzle.desktop0000644000175000017500000000411413522554645021025 0ustar jonathanjonathan[Desktop Entry] Type=Application Name=Tetzle Name[ca]=Tetzle Name[cs]=Tetzle Name[de]=Tetzle Name[el]=Tetzle Name[es]=Tetzle Name[lt]=Tetzle Name[ms]=Tetzle Name[nb_NO]=Tetzle Name[nl]=Tetzle Name[pl]=Tetzle Name[pt]=Tetzle Name[pt_BR]=Tetzle Name[ro]=Tetzle Name[ru]=Tetzle Name[tr]=Tetzle Name[zh]=Tetzle GenericName=Jigsaw Puzzle Game GenericName[ca]=Joc de trencaclosques Jigsaw GenericName[cs]=Skládanka GenericName[de]=Puzzlespiel GenericName[el]=Παιχνίδι Παζλ  GenericName[es]=Juego Rompecabezas Puzzle GenericName[he]=משחק פאזל משונן GenericName[lt]=Dėlionės žaidimas GenericName[ms]=Permainan Teka-teki Susun Suai Gambar GenericName[nb_NO]=Puslespill GenericName[nl]=Legpuzzelspel GenericName[pl]=Gra puzzle GenericName[pt]=Jogo de Quebra-Cabeças GenericName[pt_BR]=Jogo de quebra-cabeças GenericName[ro]=Joc puzzle GenericName[ru]=Игра-головоломка GenericName[tr]=Yap-Boz Bulmaca Oyunu Comment=Jigsaw puzzle with tetromino pieces Comment[ca]=Trencaclosques Jigsaw amb peces de tetròmino Comment[cs]=Skládanka s díly ve tvaru tetromina Comment[de]=Puzzlespiel mit Tetromino-Puzzleteilen Comment[el]=Παζλ με κομμάτια tetromino Comment[es]=Puzzle con piezas tetromino Comment[lt]=Dėlionė su tetromino figūromis Comment[ms]=Teka-teki susun suai gambar dengan cebisan tetromino Comment[nb_NO]=Puslespill med tetromino-brikker Comment[nl]=Legpuzzel met tetrominostukken Comment[pl]=Gra puzzle z części o kształcie tetromina Comment[pt]=Um quebra-cabeça com peças tetraminós Comment[pt_BR]=Quebra-cabeças com peças em formato de tetris Comment[ro]=Joc puzzle cu piese teromino Comment[ru]=Игра-головоломка с тетрамино Comment[tr]=Tetris benzeri parçalı bir yap-boz oyunu Icon=tetzle TryExec=tetzle Exec=tetzle %F Terminal=false MimeType=image/bmp;image/gif;image/jpg;image/jpeg;image/png;image/x-png;image/x-ico;image/tiff;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-xbitmap;image/x-xpixmap;image/svg+xml;image/svg+xml-compressed; Categories=Qt;Game;LogicGame; Keywords=game;logic; tetzle-2.1.5+dfsg1/data/unix/tetzle.appdata.xml0000644000175000017500000002162713522554645021575 0ustar jonathanjonathan tetzle.desktop CC0-1.0 GPL-3.0+ Tetzle Tetzle Tetzle Tetzle Tetzle Tetzle Tetzle Tetzle Tetzle Tetzle Tetzle Tetzle Tetzle Tetzle Tetzle Tetzle Tetzle

Jigsaw puzzle with tetromino pieces Trencaclosques Jigsaw amb peces de tetròmino Skládanka s díly ve tvaru tetromina Puzzlespiel mit Tetromino-Puzzleteilen Παζλ με κομμάτια tetromino Puzzle con piezas tetromino Dėlionė su tetromino figūromis Teka-teki susun suai gambar dengan cebisan tetromino Puslespill med tetromino-brikker Legpuzzel met tetrominostukken Gra puzzle z części o kształcie tetromina Um quebra-cabeça com peças tetraminós Quebra-cabeças com peças em formato de tetris Joc puzzle cu piese teromino Игра-головоломка с тетрамино Tetris benzeri parçalı bir yap-boz oyunu

Tetzle is a jigsaw puzzle game that uses tetrominoes for the pieces. Any image can be imported and used to create puzzles with a wide range of sizes. Games are saved automatically, and you can select between currently in progress games.

Tetzle és un trencaclosques jigsaw que fa servir tetròminos com a peces. Qualsevol imatge pot ésser importada i feta servir per a generar un trencaclosques de un ample ventall de tamany. Els jocs es desan automàticament i es poden tornar a carregar seleccionant un d'entre tots els disponibles.

Tetzle ist ein Puzzlespiel mit Tetromino-Puzzleteilen. Beliebige Bilder können importiert werden, um Puzzles verschiedener Größe zu erzeugen. Spiele werden automatisch gespeichert und Sie können zwischen mehreren aktiven Spielen wechseln.

Το Tetzle είναι ένα παιχνίδι παζλ που χρησιμοποιεί tetromino για κομμάτια. Κάθε εικόνα μπορεί να εισαχθεί και να χρησιμοποιηθεί για δημιουργία παζλ με ένα ευρύ φάσμα μεγεθών. Τα παιχνίδια αποθηκεύονται αυτόματα, και μπορείτε να επιλέξετε ανάμεσα σε εξέλιγμένα παιχνίδια

Tetzle yra dėlionės žaidimas, kuris naudoja tetromino figūras. Bet kuris paveikslas gali būti importuotas ir naudojamas įvairių dydžių dėlionei sukurti. Žaidimai yra automatiškai įrašomi, ir galima rinktis iš šiuo metu žaidžiamų žaidimų.

Tetzle merupakan permainan teka-teki susun suai gambar yang menggunakan tetromino sebagai cebisannya. Mana-mana imej boleh diimport dan digunakan untuk menghasilkan teka-teki dengan pelbagai julat saiz. Permainan disimpan secara automatik, dan anda boleh pilih permainan yang sedang dimainkan.

Tetzle er et puslespill som bruker tetromino-brukker. Ethvert bilde kan importeres og brukes til å opprette puslespill i mange forskjellige størrelser. Spill lagres automatisk, og du kan velge mellom spill som er underveis.

Tetzle is een legpuzzel spel met tetromino als stukken. Elke afbeelding kan worden geïmporteerd en gebruikt om puzzels mee te maken in een groot bereik van maten. De spellen worden automatisch opgeslagen en je kunt tussen lopende spellen schakelen.

Tetzle to gra puzzle, która składa się z części o kształcie tetromina. Możesz importować każdy obraz i użyć go do tworzenia puzzli w rożnych rozmiarach. Gry są zapisywane automatycznie i możesz wybrać obecne postępy w grach.

O Tetzle é um jogo de quebra-cabeça que usa tetraminós como peças. Pode ser importada e utilizada qualquer imagem nos quebra-cabeças com uma vasta gama de tamanhos. Os jogos são gravados automaticamente e podem-se selecionar entre vários jogos gravados.

Tetzle este un joc de puzzle care utilizează tetromino pentru piesel. Orice imagine poate fi importată şi utilizată pentru a crea puzzle-uri cu o gamă largă de dimensiuni. Jocurile sînt salvate automat, şi puteţi alege între jocrile curente şi în progres.

Tetzle - игра-головоломка с тетрамино. Любое изображение может быть загружено и разбито на паззлы с различными настройками размера паззла. Игры сохраняются автоматически, и вы можете выбирать между ними.

https://gottcode.org/tetzle/screenshots/appdata.png https://gottcode.org/tetzle/ https://gottcode.org/tetzle/bugs/ https://gottcode.org/tip/ https://www.transifex.com/projects/p/tetzle/ Graeme Gott graeme@gottcode.org tetzle ModernToolkit none none none none none none none none none none none none none none none none none none none none
  • Replaced deprecated code
  • FIXED: Automatic high DPI support
  • FIXED: Unsigned integer conversion warnings in graphics layer
  • FIXED: Could not add images with Qt 5.12
  • FIXED: Window icon didn't work in Wayland
  • Added support for OpenGL ES
  • Improved loading locales
  • Require Qt 5.9
  • Translation updates: Polish
  • Replaced jhead with image auto-rotation in Qt 5.5
  • Replaced deprecated code
  • Extra warnings only shown in debug build
  • Improved Linux deployment
  • Improved macOS deployment
  • Improved Windows deployment
  • Translation updates: Catalan, Chinese, Dutch, Greek, Norwegian Bokmål, Portuguese, Spanish
tetzle-2.1.5+dfsg1/data/unix/po/0000755000175000017500000000000013522554645016541 5ustar jonathanjonathantetzle-2.1.5+dfsg1/data/unix/po/lv.po0000644000175000017500000000226513522554645017527 0ustar jonathanjonathan# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Graeme Gott # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Tetzle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:57+0000\n" "PO-Revision-Date: 2014-11-14 18:22+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Latvian (http://www.transifex.com/projects/p/tetzle/language/" "lv/)\n" "Language: lv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " "2);\n" #: ../tetzle.appdata.xml.in:6 ../tetzle.desktop.in:4 msgid "Tetzle" msgstr "" #: ../tetzle.appdata.xml.in:7 ../tetzle.desktop.in:6 msgid "Jigsaw puzzle with tetromino pieces" msgstr "" #: ../tetzle.appdata.xml.in:10 msgid "" "Tetzle is a jigsaw puzzle game that uses tetrominoes for the pieces. Any " "image can be imported and used to create puzzles with a wide range of sizes. " "Games are saved automatically, and you can select between currently in " "progress games." msgstr "" #: ../tetzle.desktop.in:5 msgid "Jigsaw Puzzle Game" msgstr "" tetzle-2.1.5+dfsg1/data/unix/po/pt_BR.po0000644000175000017500000000236213522554645020112 0ustar jonathanjonathan# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Graeme Gott # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Tetzle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:57+0000\n" "PO-Revision-Date: 2018-05-28 19:03+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/gottcode/tetzle/" "language/pt_BR/)\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: ../tetzle.appdata.xml.in:6 ../tetzle.desktop.in:4 msgid "Tetzle" msgstr "Tetzle" #: ../tetzle.appdata.xml.in:7 ../tetzle.desktop.in:6 msgid "Jigsaw puzzle with tetromino pieces" msgstr "Quebra-cabeças com peças em formato de tetris" #: ../tetzle.appdata.xml.in:10 msgid "" "Tetzle is a jigsaw puzzle game that uses tetrominoes for the pieces. Any " "image can be imported and used to create puzzles with a wide range of sizes. " "Games are saved automatically, and you can select between currently in " "progress games." msgstr "" #: ../tetzle.desktop.in:5 msgid "Jigsaw Puzzle Game" msgstr "Jogo de quebra-cabeças" tetzle-2.1.5+dfsg1/data/unix/po/zh.po0000644000175000017500000000221613522554645017523 0ustar jonathanjonathan# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Graeme Gott # This file is distributed under the same license as the PACKAGE package. # # Translators: # 高垚鑫, 2018 msgid "" msgstr "" "Project-Id-Version: Tetzle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:57+0000\n" "PO-Revision-Date: 2018-03-28 13:41+0000\n" "Last-Translator: 高垚鑫\n" "Language-Team: Chinese (http://www.transifex.com/gottcode/tetzle/language/" "zh/)\n" "Language: zh\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../tetzle.appdata.xml.in:6 ../tetzle.desktop.in:4 msgid "Tetzle" msgstr "Tetzle" #: ../tetzle.appdata.xml.in:7 ../tetzle.desktop.in:6 msgid "Jigsaw puzzle with tetromino pieces" msgstr "" #: ../tetzle.appdata.xml.in:10 msgid "" "Tetzle is a jigsaw puzzle game that uses tetrominoes for the pieces. Any " "image can be imported and used to create puzzles with a wide range of sizes. " "Games are saved automatically, and you can select between currently in " "progress games." msgstr "" #: ../tetzle.desktop.in:5 msgid "Jigsaw Puzzle Game" msgstr "" tetzle-2.1.5+dfsg1/data/unix/po/ro.po0000644000175000017500000000306113522554645017521 0ustar jonathanjonathan# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Graeme Gott # This file is distributed under the same license as the PACKAGE package. # # Translators: # Oprea Nicolae , 2014 msgid "" msgstr "" "Project-Id-Version: Tetzle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:57+0000\n" "PO-Revision-Date: 2017-09-23 20:29+0000\n" "Last-Translator: Oprea Nicolae \n" "Language-Team: Romanian (http://www.transifex.com/gottcode/tetzle/language/" "ro/)\n" "Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" "2:1));\n" #: ../tetzle.appdata.xml.in:6 ../tetzle.desktop.in:4 msgid "Tetzle" msgstr "Tetzle" #: ../tetzle.appdata.xml.in:7 ../tetzle.desktop.in:6 msgid "Jigsaw puzzle with tetromino pieces" msgstr "Joc puzzle cu piese teromino" #: ../tetzle.appdata.xml.in:10 msgid "" "Tetzle is a jigsaw puzzle game that uses tetrominoes for the pieces. Any " "image can be imported and used to create puzzles with a wide range of sizes. " "Games are saved automatically, and you can select between currently in " "progress games." msgstr "" "Tetzle este un joc de puzzle care utilizează tetromino pentru piesel. Orice " "imagine poate fi importată şi utilizată pentru a crea puzzle-uri cu o gamă " "largă de dimensiuni. Jocurile sînt salvate automat, şi puteţi alege între " "jocrile curente şi în progres." #: ../tetzle.desktop.in:5 msgid "Jigsaw Puzzle Game" msgstr "Joc puzzle" tetzle-2.1.5+dfsg1/data/unix/po/nl.po0000644000175000017500000000305413522554645017514 0ustar jonathanjonathan# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Graeme Gott # This file is distributed under the same license as the PACKAGE package. # # Translators: # Heimen Stoffels , 2018 # RobertBorst , 2016 msgid "" msgstr "" "Project-Id-Version: Tetzle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:57+0000\n" "PO-Revision-Date: 2018-04-15 09:17+0000\n" "Last-Translator: Heimen Stoffels \n" "Language-Team: Dutch (http://www.transifex.com/gottcode/tetzle/language/" "nl/)\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../tetzle.appdata.xml.in:6 ../tetzle.desktop.in:4 msgid "Tetzle" msgstr "Tetzle" #: ../tetzle.appdata.xml.in:7 ../tetzle.desktop.in:6 msgid "Jigsaw puzzle with tetromino pieces" msgstr "Legpuzzel met tetrominostukken" #: ../tetzle.appdata.xml.in:10 msgid "" "Tetzle is a jigsaw puzzle game that uses tetrominoes for the pieces. Any " "image can be imported and used to create puzzles with a wide range of sizes. " "Games are saved automatically, and you can select between currently in " "progress games." msgstr "" "Tetzle is een legpuzzel spel met tetromino als stukken. Elke afbeelding kan " "worden geïmporteerd en gebruikt om puzzels mee te maken in een groot bereik " "van maten. De spellen worden automatisch opgeslagen en je kunt tussen " "lopende spellen schakelen." #: ../tetzle.desktop.in:5 msgid "Jigsaw Puzzle Game" msgstr "Legpuzzelspel" tetzle-2.1.5+dfsg1/data/unix/po/pt.po0000644000175000017500000000302513522554645017524 0ustar jonathanjonathan# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Graeme Gott # This file is distributed under the same license as the PACKAGE package. # # Translators: # Rui , 2018 msgid "" msgstr "" "Project-Id-Version: Tetzle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:57+0000\n" "PO-Revision-Date: 2018-04-26 00:14+0000\n" "Last-Translator: Rui \n" "Language-Team: Portuguese (Portugal) (http://www.transifex.com/gottcode/" "tetzle/language/pt_PT/)\n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../tetzle.appdata.xml.in:6 ../tetzle.desktop.in:4 msgid "Tetzle" msgstr "Tetzle" #: ../tetzle.appdata.xml.in:7 ../tetzle.desktop.in:6 msgid "Jigsaw puzzle with tetromino pieces" msgstr "Um quebra-cabeça com peças tetraminós" #: ../tetzle.appdata.xml.in:10 msgid "" "Tetzle is a jigsaw puzzle game that uses tetrominoes for the pieces. Any " "image can be imported and used to create puzzles with a wide range of sizes. " "Games are saved automatically, and you can select between currently in " "progress games." msgstr "" "O Tetzle é um jogo de quebra-cabeça que usa tetraminós como peças. Pode ser " "importada e utilizada qualquer imagem nos quebra-cabeças com uma vasta gama " "de tamanhos. Os jogos são gravados automaticamente e podem-se selecionar " "entre vários jogos gravados." #: ../tetzle.desktop.in:5 msgid "Jigsaw Puzzle Game" msgstr "Jogo de Quebra-Cabeças" tetzle-2.1.5+dfsg1/data/unix/po/lt.po0000644000175000017500000000302713522554645017522 0ustar jonathanjonathan# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Graeme Gott # This file is distributed under the same license as the PACKAGE package. # # Translators: # Moo, 2014,2016 msgid "" msgstr "" "Project-Id-Version: Tetzle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:57+0000\n" "PO-Revision-Date: 2017-09-21 14:00+0000\n" "Last-Translator: Moo\n" "Language-Team: Lithuanian (http://www.transifex.com/gottcode/tetzle/language/" "lt/)\n" "Language: lt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" "%100<10 || n%100>=20) ? 1 : 2);\n" #: ../tetzle.appdata.xml.in:6 ../tetzle.desktop.in:4 msgid "Tetzle" msgstr "Tetzle" #: ../tetzle.appdata.xml.in:7 ../tetzle.desktop.in:6 msgid "Jigsaw puzzle with tetromino pieces" msgstr "Dėlionė su tetromino figūromis" #: ../tetzle.appdata.xml.in:10 msgid "" "Tetzle is a jigsaw puzzle game that uses tetrominoes for the pieces. Any " "image can be imported and used to create puzzles with a wide range of sizes. " "Games are saved automatically, and you can select between currently in " "progress games." msgstr "" "Tetzle yra dėlionės žaidimas, kuris naudoja tetromino figūras. Bet kuris " "paveikslas gali būti importuotas ir naudojamas įvairių dydžių dėlionei " "sukurti. Žaidimai yra automatiškai įrašomi, ir galima rinktis iš šiuo metu " "žaidžiamų žaidimų. " #: ../tetzle.desktop.in:5 msgid "Jigsaw Puzzle Game" msgstr "Dėlionės žaidimas" tetzle-2.1.5+dfsg1/data/unix/po/cs.po0000644000175000017500000000243313522554645017510 0ustar jonathanjonathan# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Graeme Gott # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Tetzle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:57+0000\n" "PO-Revision-Date: 2018-05-28 19:03+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: Czech (http://www.transifex.com/gottcode/tetzle/language/" "cs/)\n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n " "<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" #: ../tetzle.appdata.xml.in:6 ../tetzle.desktop.in:4 msgid "Tetzle" msgstr "Tetzle" #: ../tetzle.appdata.xml.in:7 ../tetzle.desktop.in:6 msgid "Jigsaw puzzle with tetromino pieces" msgstr "Skládanka s díly ve tvaru tetromina" #: ../tetzle.appdata.xml.in:10 msgid "" "Tetzle is a jigsaw puzzle game that uses tetrominoes for the pieces. Any " "image can be imported and used to create puzzles with a wide range of sizes. " "Games are saved automatically, and you can select between currently in " "progress games." msgstr "" #: ../tetzle.desktop.in:5 msgid "Jigsaw Puzzle Game" msgstr "Skládanka" tetzle-2.1.5+dfsg1/data/unix/po/de.po0000644000175000017500000000276513522554645017503 0ustar jonathanjonathan# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Graeme Gott # This file is distributed under the same license as the PACKAGE package. # # Translators: # enz , 2014 msgid "" msgstr "" "Project-Id-Version: Tetzle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:57+0000\n" "PO-Revision-Date: 2017-09-21 14:00+0000\n" "Last-Translator: enz \n" "Language-Team: German (http://www.transifex.com/gottcode/tetzle/language/" "de/)\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../tetzle.appdata.xml.in:6 ../tetzle.desktop.in:4 msgid "Tetzle" msgstr "Tetzle" #: ../tetzle.appdata.xml.in:7 ../tetzle.desktop.in:6 msgid "Jigsaw puzzle with tetromino pieces" msgstr "Puzzlespiel mit Tetromino-Puzzleteilen" #: ../tetzle.appdata.xml.in:10 msgid "" "Tetzle is a jigsaw puzzle game that uses tetrominoes for the pieces. Any " "image can be imported and used to create puzzles with a wide range of sizes. " "Games are saved automatically, and you can select between currently in " "progress games." msgstr "" "Tetzle ist ein Puzzlespiel mit Tetromino-Puzzleteilen. Beliebige Bilder " "können importiert werden, um Puzzles verschiedener Größe zu erzeugen. Spiele " "werden automatisch gespeichert und Sie können zwischen mehreren aktiven " "Spielen wechseln." #: ../tetzle.desktop.in:5 msgid "Jigsaw Puzzle Game" msgstr "Puzzlespiel" tetzle-2.1.5+dfsg1/data/unix/po/description.pot0000644000175000017500000000211513522554645021607 0ustar jonathanjonathan# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Graeme Gott # This file is distributed under the same license as the Tetzle package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: Tetzle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:57+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../tetzle.appdata.xml.in:6 ../tetzle.desktop.in:4 msgid "Tetzle" msgstr "" #: ../tetzle.appdata.xml.in:7 ../tetzle.desktop.in:6 msgid "Jigsaw puzzle with tetromino pieces" msgstr "" #: ../tetzle.appdata.xml.in:10 msgid "" "Tetzle is a jigsaw puzzle game that uses tetrominoes for the pieces. Any " "image can be imported and used to create puzzles with a wide range of sizes. " "Games are saved automatically, and you can select between currently in " "progress games." msgstr "" #: ../tetzle.desktop.in:5 msgid "Jigsaw Puzzle Game" msgstr "" tetzle-2.1.5+dfsg1/data/unix/po/ms.po0000644000175000017500000000310413522554645017516 0ustar jonathanjonathan# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Graeme Gott # This file is distributed under the same license as the PACKAGE package. # # Translators: # abuyop , 2014 msgid "" msgstr "" "Project-Id-Version: Tetzle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:57+0000\n" "PO-Revision-Date: 2017-09-21 14:00+0000\n" "Last-Translator: abuyop \n" "Language-Team: Malay (Malaysia) (http://www.transifex.com/gottcode/tetzle/" "language/ms_MY/)\n" "Language: ms\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../tetzle.appdata.xml.in:6 ../tetzle.desktop.in:4 msgid "Tetzle" msgstr "Tetzle" #: ../tetzle.appdata.xml.in:7 ../tetzle.desktop.in:6 msgid "Jigsaw puzzle with tetromino pieces" msgstr "Teka-teki susun suai gambar dengan cebisan tetromino" #: ../tetzle.appdata.xml.in:10 msgid "" "Tetzle is a jigsaw puzzle game that uses tetrominoes for the pieces. Any " "image can be imported and used to create puzzles with a wide range of sizes. " "Games are saved automatically, and you can select between currently in " "progress games." msgstr "" "Tetzle merupakan permainan teka-teki susun suai gambar yang menggunakan " "tetromino sebagai cebisannya. Mana-mana imej boleh diimport dan digunakan " "untuk menghasilkan teka-teki dengan pelbagai julat saiz. Permainan disimpan " "secara automatik, dan anda boleh pilih permainan yang sedang dimainkan." #: ../tetzle.desktop.in:5 msgid "Jigsaw Puzzle Game" msgstr "Permainan Teka-teki Susun Suai Gambar" tetzle-2.1.5+dfsg1/data/unix/po/ca.po0000644000175000017500000000313513522554645017466 0ustar jonathanjonathan# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Graeme Gott # This file is distributed under the same license as the PACKAGE package. # # Translators: # Innocent De Marchi , 2017 msgid "" msgstr "" "Project-Id-Version: Tetzle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:57+0000\n" "PO-Revision-Date: 2017-09-17 16:56+0000\n" "Last-Translator: Innocent De Marchi \n" "Language-Team: Catalan (http://www.transifex.com/gottcode/tetzle/language/" "ca/)\n" "Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../tetzle.appdata.xml.in:6 ../tetzle.desktop.in:4 msgid "Tetzle" msgstr "Tetzle" #: ../tetzle.appdata.xml.in:7 ../tetzle.desktop.in:6 msgid "Jigsaw puzzle with tetromino pieces" msgstr "Trencaclosques Jigsaw amb peces de tetròmino" #: ../tetzle.appdata.xml.in:10 msgid "" "Tetzle is a jigsaw puzzle game that uses tetrominoes for the pieces. Any " "image can be imported and used to create puzzles with a wide range of sizes. " "Games are saved automatically, and you can select between currently in " "progress games." msgstr "" "Tetzle és un trencaclosques jigsaw que fa servir tetròminos com a peces. " "Qualsevol imatge pot ésser importada i feta servir per a generar un " "trencaclosques de un ample ventall de tamany. Els jocs es desan " "automàticament i es poden tornar a carregar seleccionant un d'entre tots els " "disponibles." #: ../tetzle.desktop.in:5 msgid "Jigsaw Puzzle Game" msgstr "Joc de trencaclosques Jigsaw" tetzle-2.1.5+dfsg1/data/unix/po/update-po.sh0000755000175000017500000000213213522554645020774 0ustar jonathanjonathan#!/bin/sh echo -n 'Preparing files...' cd .. rm -f tetzle.desktop.in cp tetzle.desktop tetzle.desktop.in sed -e '/^Name\[/ d' \ -e '/^GenericName\[/ d' \ -e '/^Comment\[/ d' \ -e 's/^Name/_Name/' \ -e 's/^GenericName/_GenericName/' \ -e 's/^Comment/_Comment/' \ -i tetzle.desktop.in rm -f tetzle.appdata.xml.in cp tetzle.appdata.xml tetzle.appdata.xml.in sed -e '/p xml:lang/ d' \ -e '/summary xml:lang/ d' \ -e '/name xml:lang/ d' \ -e 's/

/<_p>/' \ -e 's/<\/p>/<\/_p>/' \ -e 's/

/<_summary>/' \ -e 's/<\/summary>/<\/_summary>/' \ -e 's//<_name>/' \ -e 's/<\/name>/<\/_name>/' \ -i tetzle.appdata.xml.in cd po echo ' DONE' echo -n 'Updating translations...' for POFILE in *.po; do echo -n " $POFILE" msgmerge --quiet --update --backup=none $POFILE description.pot done echo ' DONE' echo -n 'Merging translations...' cd .. intltool-merge --quiet --desktop-style po tetzle.desktop.in tetzle.desktop rm -f tetzle.desktop.in intltool-merge --quiet --xml-style po tetzle.appdata.xml.in tetzle.appdata.xml echo >> tetzle.appdata.xml rm -f tetzle.appdata.xml.in echo ' DONE' tetzle-2.1.5+dfsg1/data/unix/po/uk.po0000644000175000017500000000233613522554645017524 0ustar jonathanjonathan# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Graeme Gott # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Tetzle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:57+0000\n" "PO-Revision-Date: 2014-11-14 18:22+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Ukrainian (http://www.transifex.com/projects/p/tetzle/" "language/uk/)\n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: ../tetzle.appdata.xml.in:6 ../tetzle.desktop.in:4 msgid "Tetzle" msgstr "" #: ../tetzle.appdata.xml.in:7 ../tetzle.desktop.in:6 msgid "Jigsaw puzzle with tetromino pieces" msgstr "" #: ../tetzle.appdata.xml.in:10 msgid "" "Tetzle is a jigsaw puzzle game that uses tetrominoes for the pieces. Any " "image can be imported and used to create puzzles with a wide range of sizes. " "Games are saved automatically, and you can select between currently in " "progress games." msgstr "" #: ../tetzle.desktop.in:5 msgid "Jigsaw Puzzle Game" msgstr "" tetzle-2.1.5+dfsg1/data/unix/po/es.po0000644000175000017500000000241713522554645017514 0ustar jonathanjonathan# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Graeme Gott # This file is distributed under the same license as the PACKAGE package. # # Translators: # Adolfo Jayme-Barrientos, 2014 # Adolfo Jayme-Barrientos, 2014 msgid "" msgstr "" "Project-Id-Version: Tetzle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:57+0000\n" "PO-Revision-Date: 2018-05-28 19:03+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: Spanish (http://www.transifex.com/gottcode/tetzle/language/" "es/)\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../tetzle.appdata.xml.in:6 ../tetzle.desktop.in:4 msgid "Tetzle" msgstr "Tetzle" #: ../tetzle.appdata.xml.in:7 ../tetzle.desktop.in:6 msgid "Jigsaw puzzle with tetromino pieces" msgstr "Puzzle con piezas tetromino" #: ../tetzle.appdata.xml.in:10 msgid "" "Tetzle is a jigsaw puzzle game that uses tetrominoes for the pieces. Any " "image can be imported and used to create puzzles with a wide range of sizes. " "Games are saved automatically, and you can select between currently in " "progress games." msgstr "" #: ../tetzle.desktop.in:5 msgid "Jigsaw Puzzle Game" msgstr "Juego Rompecabezas Puzzle" tetzle-2.1.5+dfsg1/data/unix/po/nb_NO.po0000644000175000017500000000300113522554645020066 0ustar jonathanjonathan# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Graeme Gott # This file is distributed under the same license as the PACKAGE package. # # Translators: # Allan Nordhøy , 2018 msgid "" msgstr "" "Project-Id-Version: Tetzle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:57+0000\n" "PO-Revision-Date: 2018-03-14 16:02+0000\n" "Last-Translator: Allan Nordhøy \n" "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/gottcode/" "tetzle/language/nb_NO/)\n" "Language: nb_NO\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../tetzle.appdata.xml.in:6 ../tetzle.desktop.in:4 msgid "Tetzle" msgstr "Tetzle" #: ../tetzle.appdata.xml.in:7 ../tetzle.desktop.in:6 msgid "Jigsaw puzzle with tetromino pieces" msgstr "Puslespill med tetromino-brikker" #: ../tetzle.appdata.xml.in:10 msgid "" "Tetzle is a jigsaw puzzle game that uses tetrominoes for the pieces. Any " "image can be imported and used to create puzzles with a wide range of sizes. " "Games are saved automatically, and you can select between currently in " "progress games." msgstr "" "Tetzle er et puslespill som bruker tetromino-brukker. Ethvert bilde kan " "importeres og brukes til å opprette puslespill i mange forskjellige " "størrelser. Spill lagres automatisk, og du kan velge mellom spill som er " "underveis." #: ../tetzle.desktop.in:5 msgid "Jigsaw Puzzle Game" msgstr "Puslespill" tetzle-2.1.5+dfsg1/data/unix/po/he.po0000644000175000017500000000233013522554645017473 0ustar jonathanjonathan# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Graeme Gott # This file is distributed under the same license as the PACKAGE package. # # Translators: # GenghisKhan , 2015 msgid "" msgstr "" "Project-Id-Version: Tetzle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:57+0000\n" "PO-Revision-Date: 2017-09-21 14:00+0000\n" "Last-Translator: GenghisKhan \n" "Language-Team: Hebrew (http://www.transifex.com/gottcode/tetzle/language/" "he/)\n" "Language: he\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../tetzle.appdata.xml.in:6 ../tetzle.desktop.in:4 msgid "Tetzle" msgstr "" #: ../tetzle.appdata.xml.in:7 ../tetzle.desktop.in:6 msgid "Jigsaw puzzle with tetromino pieces" msgstr "" #: ../tetzle.appdata.xml.in:10 msgid "" "Tetzle is a jigsaw puzzle game that uses tetrominoes for the pieces. Any " "image can be imported and used to create puzzles with a wide range of sizes. " "Games are saved automatically, and you can select between currently in " "progress games." msgstr "" #: ../tetzle.desktop.in:5 msgid "Jigsaw Puzzle Game" msgstr "משחק פאזל משונן" tetzle-2.1.5+dfsg1/data/unix/po/tr.po0000644000175000017500000000233113522554645017525 0ustar jonathanjonathan# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Graeme Gott # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Tetzle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:57+0000\n" "PO-Revision-Date: 2018-05-28 19:04+0000\n" "Last-Translator: Graeme Gott \n" "Language-Team: Turkish (http://www.transifex.com/gottcode/tetzle/language/" "tr/)\n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: ../tetzle.appdata.xml.in:6 ../tetzle.desktop.in:4 msgid "Tetzle" msgstr "Tetzle" #: ../tetzle.appdata.xml.in:7 ../tetzle.desktop.in:6 msgid "Jigsaw puzzle with tetromino pieces" msgstr "Tetris benzeri parçalı bir yap-boz oyunu" #: ../tetzle.appdata.xml.in:10 msgid "" "Tetzle is a jigsaw puzzle game that uses tetrominoes for the pieces. Any " "image can be imported and used to create puzzles with a wide range of sizes. " "Games are saved automatically, and you can select between currently in " "progress games." msgstr "" #: ../tetzle.desktop.in:5 msgid "Jigsaw Puzzle Game" msgstr "Yap-Boz Bulmaca Oyunu" tetzle-2.1.5+dfsg1/data/unix/po/pl.po0000644000175000017500000000317213522554645017517 0ustar jonathanjonathan# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Graeme Gott # This file is distributed under the same license as the PACKAGE package. # # Translators: # M T , 2015 msgid "" msgstr "" "Project-Id-Version: Tetzle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:57+0000\n" "PO-Revision-Date: 2017-09-21 14:00+0000\n" "Last-Translator: M T \n" "Language-Team: Polish (http://www.transifex.com/gottcode/tetzle/language/" "pl/)\n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n" "%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n" "%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" #: ../tetzle.appdata.xml.in:6 ../tetzle.desktop.in:4 msgid "Tetzle" msgstr "Tetzle" #: ../tetzle.appdata.xml.in:7 ../tetzle.desktop.in:6 msgid "Jigsaw puzzle with tetromino pieces" msgstr "Gra puzzle z części o kształcie tetromina" #: ../tetzle.appdata.xml.in:10 msgid "" "Tetzle is a jigsaw puzzle game that uses tetrominoes for the pieces. Any " "image can be imported and used to create puzzles with a wide range of sizes. " "Games are saved automatically, and you can select between currently in " "progress games." msgstr "" "Tetzle to gra puzzle, która składa się z części o kształcie tetromina. " "Możesz importować każdy obraz i użyć go do tworzenia puzzli w rożnych " "rozmiarach. Gry są zapisywane automatycznie i możesz wybrać obecne postępy w " "grach." #: ../tetzle.desktop.in:5 msgid "Jigsaw Puzzle Game" msgstr "Gra puzzle" tetzle-2.1.5+dfsg1/data/unix/po/ru.po0000644000175000017500000000347313522554645017536 0ustar jonathanjonathan# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Graeme Gott # This file is distributed under the same license as the PACKAGE package. # # Translators: # Artem Krosheninnikov , 2015 msgid "" msgstr "" "Project-Id-Version: Tetzle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:57+0000\n" "PO-Revision-Date: 2017-09-21 14:00+0000\n" "Last-Translator: Artem Krosheninnikov \n" "Language-Team: Russian (http://www.transifex.com/gottcode/tetzle/language/" "ru/)\n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n" "%100>=11 && n%100<=14)? 2 : 3);\n" #: ../tetzle.appdata.xml.in:6 ../tetzle.desktop.in:4 msgid "Tetzle" msgstr "Tetzle" #: ../tetzle.appdata.xml.in:7 ../tetzle.desktop.in:6 msgid "Jigsaw puzzle with tetromino pieces" msgstr "Игра-головоломка с тетрамино" #: ../tetzle.appdata.xml.in:10 msgid "" "Tetzle is a jigsaw puzzle game that uses tetrominoes for the pieces. Any " "image can be imported and used to create puzzles with a wide range of sizes. " "Games are saved automatically, and you can select between currently in " "progress games." msgstr "" "Tetzle - игра-головоломка с тетрамино. Любое изображение может быть " "загружено и разбито на паззлы с различными настройками размера паззла. Игры " "сохраняются автоматически, и вы можете выбирать между ними." #: ../tetzle.desktop.in:5 msgid "Jigsaw Puzzle Game" msgstr "Игра-головоломка" tetzle-2.1.5+dfsg1/data/unix/po/fr.po0000644000175000017500000000221513522554645017510 0ustar jonathanjonathan# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Graeme Gott # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Tetzle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:57+0000\n" "PO-Revision-Date: 2014-11-14 18:22+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: French (http://www.transifex.com/projects/p/tetzle/language/" "fr/)\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: ../tetzle.appdata.xml.in:6 ../tetzle.desktop.in:4 msgid "Tetzle" msgstr "" #: ../tetzle.appdata.xml.in:7 ../tetzle.desktop.in:6 msgid "Jigsaw puzzle with tetromino pieces" msgstr "" #: ../tetzle.appdata.xml.in:10 msgid "" "Tetzle is a jigsaw puzzle game that uses tetrominoes for the pieces. Any " "image can be imported and used to create puzzles with a wide range of sizes. " "Games are saved automatically, and you can select between currently in " "progress games." msgstr "" #: ../tetzle.desktop.in:5 msgid "Jigsaw Puzzle Game" msgstr "" tetzle-2.1.5+dfsg1/data/unix/po/el.po0000644000175000017500000000344613522554645017510 0ustar jonathanjonathan# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Graeme Gott # This file is distributed under the same license as the PACKAGE package. # # Translators: # Wasilis Mandratzis-Walz , 2018 msgid "" msgstr "" "Project-Id-Version: Tetzle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:57+0000\n" "PO-Revision-Date: 2018-02-11 13:30+0000\n" "Last-Translator: Wasilis Mandratzis-Walz \n" "Language-Team: Greek (http://www.transifex.com/gottcode/tetzle/language/" "el/)\n" "Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../tetzle.appdata.xml.in:6 ../tetzle.desktop.in:4 msgid "Tetzle" msgstr "Tetzle" #: ../tetzle.appdata.xml.in:7 ../tetzle.desktop.in:6 msgid "Jigsaw puzzle with tetromino pieces" msgstr "Παζλ με κομμάτια tetromino" #: ../tetzle.appdata.xml.in:10 msgid "" "Tetzle is a jigsaw puzzle game that uses tetrominoes for the pieces. Any " "image can be imported and used to create puzzles with a wide range of sizes. " "Games are saved automatically, and you can select between currently in " "progress games." msgstr "" "Το Tetzle είναι ένα παιχνίδι παζλ που χρησιμοποιεί tetromino για κομμάτια. " "Κάθε εικόνα μπορεί να εισαχθεί και να χρησιμοποιηθεί για δημιουργία παζλ με " "ένα ευρύ φάσμα μεγεθών. Τα παιχνίδια αποθηκεύονται αυτόματα, και μπορείτε να " "επιλέξετε ανάμεσα σε εξέλιγμένα παιχνίδια" #: ../tetzle.desktop.in:5 msgid "Jigsaw Puzzle Game" msgstr "Παιχνίδι Παζλ " tetzle-2.1.5+dfsg1/data/unix/po/uk_UA.po0000644000175000017500000000235613522554645020113 0ustar jonathanjonathan# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Graeme Gott # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Tetzle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:57+0000\n" "PO-Revision-Date: 2014-11-14 18:22+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Ukrainian (Ukraine) (http://www.transifex.com/projects/p/" "tetzle/language/uk_UA/)\n" "Language: uk_UA\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: ../tetzle.appdata.xml.in:6 ../tetzle.desktop.in:4 msgid "Tetzle" msgstr "" #: ../tetzle.appdata.xml.in:7 ../tetzle.desktop.in:6 msgid "Jigsaw puzzle with tetromino pieces" msgstr "" #: ../tetzle.appdata.xml.in:10 msgid "" "Tetzle is a jigsaw puzzle game that uses tetrominoes for the pieces. Any " "image can be imported and used to create puzzles with a wide range of sizes. " "Games are saved automatically, and you can select between currently in " "progress games." msgstr "" #: ../tetzle.desktop.in:5 msgid "Jigsaw Puzzle Game" msgstr "" tetzle-2.1.5+dfsg1/data/unix/po/eo.po0000644000175000017500000000222113522554645017501 0ustar jonathanjonathan# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Graeme Gott # This file is distributed under the same license as the PACKAGE package. # # Translators: msgid "" msgstr "" "Project-Id-Version: Tetzle\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-11-14 20:57+0000\n" "PO-Revision-Date: 2014-11-14 18:22+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Esperanto (http://www.transifex.com/projects/p/tetzle/" "language/eo/)\n" "Language: eo\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../tetzle.appdata.xml.in:6 ../tetzle.desktop.in:4 msgid "Tetzle" msgstr "" #: ../tetzle.appdata.xml.in:7 ../tetzle.desktop.in:6 msgid "Jigsaw puzzle with tetromino pieces" msgstr "" #: ../tetzle.appdata.xml.in:10 msgid "" "Tetzle is a jigsaw puzzle game that uses tetrominoes for the pieces. Any " "image can be imported and used to create puzzles with a wide range of sizes. " "Games are saved automatically, and you can select between currently in " "progress games." msgstr "" #: ../tetzle.desktop.in:5 msgid "Jigsaw Puzzle Game" msgstr "" tetzle-2.1.5+dfsg1/data/unix/po/update-pot.sh0000755000175000017500000000142113522554645021160 0ustar jonathanjonathan#!/bin/sh echo -n 'Preparing files...' cd .. rm -f tetzle.desktop.in cp tetzle.desktop tetzle.desktop.in sed -e '/^Name\[/ d' \ -e '/^GenericName\[/ d' \ -e '/^Comment\[/ d' \ -e '/^Icon/ d' \ -e '/^Keywords/ d' \ -i tetzle.desktop.in rm -f tetzle.appdata.xml.in cp tetzle.appdata.xml tetzle.appdata.xml.in sed -e '/p xml:lang/ d' \ -e '/summary xml:lang/ d' \ -e '/name xml:lang/ d' \ -e '// d' \ -i tetzle.appdata.xml.in cd po echo ' DONE' echo -n 'Extracting messages...' xgettext --from-code=UTF-8 --output=description.pot \ --package-name='Tetzle' --copyright-holder='Graeme Gott' \ ../*.in sed 's/CHARSET/UTF-8/' -i description.pot echo ' DONE' echo -n 'Cleaning up...' cd .. rm -f tetzle.desktop.in rm -f tetzle.appdata.xml.in echo ' DONE' tetzle-2.1.5+dfsg1/data/shadow.png0000644000175000017500000000527213522554645017141 0ustar jonathanjonathanPNG  IHDRsRGB pHYs  tIME ,;-iTXtCommentCreated with GIMPd.ePLTE:tRNS  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~qbKGDHIDATxݒ F O&!?D;; E+ ^W +/=#8zWLs=ds|%9ő˔A^ ˗3ʑ-x[|4o)6Bn b0\w(Qcp;-vҙ ԙ|'Y _,'\ÓAع4Ad]. uSpwƳ\m4\m #tDž-  `n뚸8rgnqrq ,V_8  ?8 !DvXp_U,bCW7oFz Ž?Uْ ,d6@bvg8I|馏|P?&B₀PЃD 9yNVFP8-5p"@mP K 7 0K]. hC3a"0@, hC3aA @@|Aח y&H  K@sȉ< {g&NwP9@P%x&@ |4 , (P|a M1r5ai |N)qE%F -q 8><P_/v@xj%EzU MU,b 1_PsQ6(r.<SLtAlІ]/%Jb=5O @ X~xX<&rR/@pѐ"Ak%BM3ksK4H6;@\m+A.2^ g "x qp/iLֱW ]E` 9U">yl@KҪM{ZQ@SaYlmRb( #_"ZI恥!'搤u#.xk5.@]p `h,08 07K z9%$ @6@BM z p 1jQj.}@jI-0 |ԚvKPZ0t J@I< $#DcffS=F4&TTZ jx\.,ؕ _^{\`BXX.d\̈́4N^Ԋzya3/?pO<#̇?tZ=xޭc7/. sqq'w]IENDB`tetzle-2.1.5+dfsg1/icons/0000755000175000017500000000000013522554645015342 5ustar jonathanjonathantetzle-2.1.5+dfsg1/icons/tetzle.xpm0000644000175000017500000001740213522554645017403 0ustar jonathanjonathan/* XPM */ static char * 32_xpm[] = { "32 32 357 2", " c None", ". c #AECAE1", "+ c #A0C0DC", "@ c #A0C0DD", "# c #97AEC4", "$ c #89B1D4", "% c #7291AC", "& c #7090AB", "* c #8BB2D5", "= c #7392AD", "- c #A0C1DC", "; c #88B0D2", "> c #86AED0", ", c #85ACCE", "' c #86ADD0", ") c #95BADA", "! c #7C99B2", "~ c #9FC0DC", "{ c #8AB2D5", "] c #8CB3D6", "^ c #8DB4D6", "/ c #88AECF", "( c #A3C3DE", "_ c #A2C2DE", ": c #A2C2DD", "< c #A3C2DE", "[ c #A4C3DE", "} c #A4C3DF", "| c #8CA6BD", "1 c #C0D8ED", "2 c #B4D0E9", "3 c #98B0C6", "4 c #7191AC", "5 c #A1C4E3", "6 c #83A0B9", "7 c #7190AC", "8 c #A1C3E1", "9 c #8CB5DB", "0 c #7090AC", "a c #A9C7E1", "b c #A0C4E3", "c c #58624B", "d c #3C4935", "e c #638097", "f c #6B8DAA", "g c #6B8CA9", "h c #6A8AA7", "i c #6A8BA7", "j c #89AFD0", "k c #717C64", "l c #93B6D5", "m c #9FC1E0", "n c #9CBEDD", "o c #9CBEDC", "p c #9EC0DF", "q c #A1C4E2", "r c #809DB6", "s c #818A6F", "t c #707C62", "u c #6A744F", "v c #788677", "w c #7C8C7D", "x c #96AFBB", "y c #A6C8E4", "z c #87A2B9", "A c #A5C6E2", "B c #698AA6", "C c #B7D2E8", "D c #A3C3DF", "E c #A4C4DF", "F c #A6C5E2", "G c #A6C6E3", "H c #889D9F", "I c #697459", "J c #4C572D", "K c #698280", "L c #74909B", "M c #738F96", "N c #8DAEC5", "O c #A5C7E5", "P c #92B8D9", "Q c #5E694A", "R c #34411C", "S c #39471F", "T c #3C492A", "U c #455224", "V c #3F4C25", "W c #8AB3D8", "X c #A6C7E2", "Y c #89B1D5", "Z c #637E81", "` c #465850", " . c #5B7169", ".. c #36431C", "+. c #3A4821", "@. c #3A461D", "#. c #4E5C3F", "$. c #404C1E", "%. c #4D5F45", "&. c #A3C8ED", "*. c #86ACCA", "=. c #7090AD", "-. c #606A4C", ";. c #2F3B1A", ">. c #2E3919", ",. c #303C1A", "'. c #3C4A21", "). c #4A572D", "!. c #6D8893", "~. c #546B70", "{. c #A8CAE8", "]. c #6B8CA8", "^. c #91A9B2", "/. c #728F9B", "(. c #8CB5DA", "_. c #5A706B", ":. c #374422", "<. c #1B220D", "[. c #2D371A", "}. c #333F20", "|. c #41502F", "1. c #485733", "2. c #475635", "3. c #3B491F", "4. c #556759", "5. c #87AECF", "6. c #445246", "7. c #5E694D", "8. c #3C4A23", "9. c #364320", "0. c #425134", "a. c #414F2E", "b. c #3D4B24", "c. c #333F1B", "d. c #34402A", "e. c #7D8C7B", "f. c #83A8C5", "g. c #667053", "h. c #56685C", "i. c #45532F", "j. c #718F98", "k. c #6D8993", "l. c #475741", "m. c #425234", "n. c #445338", "o. c #54644E", "p. c #4A5937", "q. c #374322", "r. c #303B1C", "s. c #3D4B21", "t. c #445335", "u. c #5D7169", "v. c #404D3E", "w. c #5F6A49", "x. c #536352", "y. c #44522F", "z. c #3A4820", "A. c #3E4B28", "B. c #485633", "C. c #253012", "D. c #6F7B5E", "E. c #5B705E", "F. c #8AB2D6", "G. c #67879F", "H. c #5E6748", "I. c #36431D", "J. c #2C3618", "K. c #273016", "L. c #414F24", "M. c #47573D", "N. c #3B4927", "O. c #425136", "P. c #43512A", "Q. c #45532B", "R. c #2D3818", "S. c #37441F", "T. c #36421D", "U. c #39471E", "V. c #2E3A1E", "W. c #5B6649", "X. c #404E2A", "Y. c #394529", "Z. c #323F1B", "`. c #465534", " + c #384529", ".+ c #202A0F", "++ c #717C5E", "@+ c #3D4A1F", "#+ c #627A75", "$+ c #61786F", "%+ c #7594A4", "&+ c #4B5D44", "*+ c #425248", "=+ c #596149", "-+ c #2D3720", ";+ c #1C230F", ">+ c #1B230F", ",+ c #343F23", "'+ c #222B12", ")+ c #4B5B3B", "!+ c #222C11", "~+ c #495734", "{+ c #394722", "]+ c #3C492B", "^+ c #313D1A", "/+ c #2B3519", "(+ c #293317", "_+ c #1B220F", ":+ c #191F0E", "<+ c #5E694C", "[+ c #35421D", "}+ c #212A12", "|+ c #35421C", "1+ c #435231", "2+ c #34411D", "3+ c #242E11", "4+ c #6B7652", "5+ c #485526", "6+ c #4A562B", "7+ c #576C5E", "8+ c #53685C", "9+ c #263014", "0+ c #303C1F", "a+ c #636D4E", "b+ c #28311B", "c+ c #2A341B", "d+ c #1C2410", "e+ c #1D2410", "f+ c #1F2812", "g+ c #19200E", "h+ c #303D1C", "i+ c #252E14", "j+ c #1A210F", "k+ c #171C0D", "l+ c #4C5340", "m+ c #2A3417", "n+ c #424F24", "o+ c #232C13", "p+ c #1B220E", "q+ c #435128", "r+ c #2E3A1B", "s+ c #515A3F", "t+ c #20280E", "u+ c #313C18", "v+ c #273214", "w+ c #273313", "x+ c #0D1205", "y+ c #151B09", "z+ c #060B00", "A+ c #4C553D", "B+ c #1D260E", "C+ c #171E0A", "D+ c #101507", "E+ c #111607", "F+ c #101607", "G+ c #0F1406", "H+ c #394523", "I+ c #1A210E", "J+ c #1A200E", "K+ c #161D0D", "L+ c #596347", "M+ c #2E391B", "N+ c #424E28", "O+ c #303B1F", "P+ c #3D4923", "Q+ c #424F26", "R+ c #435028", "S+ c #6B7553", "T+ c #5A634A", "U+ c #565F48", "V+ c #4D5343", "W+ c #4E5443", "X+ c #4C5242", "Y+ c #4D5243", "Z+ c #4A4F40", "`+ c #5F694D", " @ c #4B5142", ".@ c #67725F", "+@ c #5E6754", "@@ c #464D39", "#@ c #4E5343", "$@ c #212913", "%@ c #272F18", "&@ c #222916", "*@ c #202714", "=@ c #1D2411", "-@ c #555E45", ";@ c #2E391A", ">@ c #323D1C", ",@ c #232C14", "'@ c #1C2310", ")@ c #202812", "!@ c #313D1B", "~@ c #404E25", "{@ c #1D2510", "]@ c #202813", "^@ c #1F2712", "/@ c #2F3A20", "(@ c #333F22", "_@ c #212A13", ":@ c #181F0E", "<@ c #171E0B", "[@ c #5D6652", "}@ c #404E29", "|@ c #4B5935", "1@ c #222B13", "2@ c #161C0D", "3@ c #2C3819", "4@ c #212912", "5@ c #1E2611", "6@ c #354120", "7@ c #3F4D23", "8@ c #28311C", "9@ c #242C18", "0@ c #1E2511", "a@ c #283216", "b@ c #36431E", "c@ c #425024", "d@ c #596249", "e@ c #3C4921", "f@ c #36441E", "g@ c #2A3518", "h@ c #303B1B", "i@ c #1F2711", "j@ c #39462F", "k@ c #29311A", "l@ c #303C1B", "m@ c #2D3824", "n@ c #333D2D", "o@ c #222A13", "p@ c #121808", "q@ c #576049", "r@ c #263015", "s@ c #242D14", "t@ c #464B3C", "u@ c #36411E", "v@ c #1C240F", "w@ c #364325", "x@ c #2C351B", "y@ c #181F0D", "z@ c #262D18", "A@ c #293417", "B@ c #505745", "C@ c #464C3C", "D@ c #1F2614", "E@ c #252F14", "F@ c #2D371B", "G@ c #242E14", "H@ c #2F3A1A", "I@ c #35421F", "J@ c #3B4033", "K@ c #171D0D", "L@ c #171D0E", "M@ c #161B0D", "N@ c #1B210F", "O@ c #414538", "P@ c #14180C", ". + + + + + @ # ", "+ $ $ $ $ $ $ % ", "+ $ $ $ $ $ $ & ", "+ $ $ $ $ $ $ & ", "+ $ $ $ $ $ $ & ", "+ $ $ $ $ $ $ & ", "+ $ $ $ $ $ * = ", "- ; > , , ' ) ! ", "~ { ] ^ ^ ] { / ( _ : < ( [ } | 1 2 2 2 2 2 2 3 ", "+ $ $ $ $ $ $ ; { $ $ $ $ $ $ 4 2 5 5 5 5 5 5 6 ", "+ $ $ $ $ $ $ > ] $ $ $ $ $ $ 4 2 5 5 5 5 5 5 6 ", "+ $ $ $ $ $ $ , ^ $ $ $ $ $ $ 4 2 5 5 5 5 5 5 6 ", "+ $ $ $ $ $ $ , ^ $ $ $ $ $ $ 7 2 5 5 5 5 5 5 6 ", "+ $ $ $ $ $ $ > ] $ $ $ $ $ $ 7 2 5 5 5 5 5 5 6 ", "8 9 $ $ $ $ $ ; { $ $ $ $ $ $ 0 a b 5 5 5 5 5 6 ", "c d e f g h h i j ; > , , > ; & k l m n o p q r ", "s t u v w x y z A { ] ^ ^ ] { B C ( D E F G H I J K L M N O P & ", "Q R S T U V W h A $ $ $ $ $ $ h X $ Y { Z ` ...+.@.#.$.%.&.*.=.", "-.;.>.,.'.).!.~.{.$ $ $ $ $ $ ].^.$ /.(._.:.<.[.}.|.1.2.3.4.5.6.", "7.8.9.0.a.b.c.d.e.f.$ $ $ $ $ f g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.", "w.x.y.z.s.A.B.C.D.E.(.5.$ F.(.G.H.I.J.K.L.M.N.O.P.Q.R.S.y.T.U.V.", "W.X.Y.Z.`. +T..+++@+#+$+9 %+&+*+=+-+;+>+,+'+)+!+~+{+]+^+/+(+_+:+", "<+[+}+;.|+1+2+3+4+z.5+6+7+8+9+0+a+b+c+d+e+f+}+g+h+i+[.}+_+j+_+k+", "l+m+n+o+p+q+5+r+s+t+u+v+w+x+y+z+A+B+C+D+E+F+F+G+H+e+I+J+J+I+_+K+", "L+M+V N+O+P+Q+R+S+T+U+V+W+X+X+Y+Z+`+ @.@+@X+X+@@#@$@%@&@&@*@=@k+", "-@;@>@'.,@'@)@!@~@{@_+_+'@_+_+d+]@,@^@/@(@_@:@<@[@}@|@1@_+_+_+2@", "Q 3@4@5@j+e+j+R.6@7@j+_+_+I+_+8@9@0@a@b@s.c@2+B+d@e@f@d+_+_+_+2@", "L+4@g@h@j+i@a@j@k@l@I+_+5@a@J+m@n@}+:+;.;.o@'@p@q@0@r@s@_+_+_+2@", "t@_+_+u@0@j+v@w@x@i@_+_+_+i@_+y@z@A@}+e+j+_+_+F+B@_+_+_+_+_+_+2@", "C@_+_+d+_+e+_+g+D@_+_+_+_+E@5@{@F@J+j+_+_+_+_+E+X+_+_+_+_+_+_+2@", "C@_+_+_+_+_+_+_+=@_+_+_+_+G@d+H@I@)@_+_+_+_+e+F+X+_+_+_+_+_+_+2@", "J@2@2@2@2@2@2@2@k+K@k+:+K@2@2@L@M@N@e+2@2@L@g+G+O@k+k+k+k+K+2@P@"}; tetzle-2.1.5+dfsg1/icons/tetzle.icns0000644000175000017500000165101213522554645017535 0ustar jonathanjonathanicnsR ic08=PNG  IHDR\rf iCCPICC Profile8U]hU>sg#$Sl4t? % V46nI6"dΘ83OEP|1Ŀ (>/ % (>P苦;3ie|{g蹪X-2s=+WQ+]L6O w[C{_F qb Uvz?Zb1@/zcs>~if,ӈUSjF 1_Mjbuݠpamhmçϙ>a\+5%QKFkm}ۖ?ޚD\!~6,-7SثŜvķ5Z;[rmS5{yDyH}r9|-ăFAJjI.[/]mK 7KRDrYQO-Q||6 (0 MXd(@h2_f<:”_δ*d>e\c?~,7?& ك^2Iq2"y@g|UP`o@IDATxiluߗ]]]{ۗy/lR iR"H*lmh:B;7/-ALʤHJMB"`f0_wuW7nݮuߛu-דkz3 2d@R g@R gH1܁dA 2@C d )@j@&볦w ZЁ@vA @;?kzd8A @;?kz2L 23dp. ? @!Z)@q?k Zi2 R0d4rRLl 嘟5 . ?2gA^wpnPOz9ޏn Wij?g~x8 :/hE~jh"k)@SA 8 /ZQ}5ksAPL5ﭵY z p(@Ө!@AP0Kk^&3 AXE-RvΌ@_52;ÍYChovWJn\u͍y }q욛{O->VDBD]Bcn#Wdyѹ E+K}͖*<:`NaK6 i@zK#f{Z-ou-ז=Օ\Ғ4g{ !D!EN9}\8vNiypH/NZ3`Ksc_W) 2熆]Vu={џCTfh3Z3<)}^T{7ֳ1`ٍý^s0䧛Xǿ;U㟣7mx ?P_~nj ~fj֕Ulc_QC_ NImC/FH&dlϱ>w-) ?s?~'b撟*D[g!Rw}уbg_z (=ۋ&| e${ >W} 忧WR :)\r_Qo`S=E1z "e໐v`}`zK/gyZĿLRZA~2'Q</JTG9wEʗv8Fp_:M wܗ###{̬wwJ]xm(=P>~ Rkz&P. l >,qz>jj! $/GYszO*;eMѼ`ژZO L5`+n>J&fvP n `\~P:-gT3 (}|҈N1@:83!3G6 ǴcAB @J06$4X##SP I.R2v.)mSⴵ_T3%1  Tc? RkVT32&x Sͻ62 OFTfvDH1 ϳf@w-4tzLcOtb?0$8@3akzz`*@ZP=kg?jf$ Y V`!P:>Ngonu$ᡔ!RB*t$L!JA0@ x ށ@dn2$'irOs@d*m_bnP,8Ej%NN`3%!V2F-,Ø2Xˀt wͦk錈d`pX\$_gcCR/xi2aSuQ=#J֐ߒoo}5)ǨLP6?oh{:S Φsݽ}Exr3Gt|Z_wł++ט [ܸZ)W8E4@ \q?qɭnFVvPڵ5K+7zUvwv7;߰\kçonhCQ^*˷L!ߴZU#8_l. elqյ]~ݞۛ aHK{\WzwSt.f#nn~#ն[ ֻ_р7nn|@(>QidK Xʥ%]{UDƂ5,dAsų.?2kOm7{Y;q sY ΙYYaD ͺՅv&V ::꾱r+媖>7L s/^r75?y%$Vλ\~ҍ⯻ϻOt-q_zMMr;%*ti%7]Im1%7^s(p@獛b`%o06wyGFz}a [nd%` h` w܍S/룮$p?s?}wgY>0>v(CO$DݟoĿXRu28sv ex75(/^i@KHo[ (5j?f=]ncw?~cRJ;[Xď!ĐUVdG755!wQI㊚s7h-U"hqMΝyc ɟp{-'ц`KſImj˜Jq*%=i:>iw[ PXB&ó8E=W=+]?cX8;WQ(ӎ-MF }WIMQ`Kw$!4F[8~ķ%-X_w[ f& 6 y'\+C_kym>Twt7 v[WR>YzDBt?Y'N) 婆O}BS)hGBX'x=b=|>~7}?|gy[0!)9\Um`k{g;$%B~!3ɘ P^ D/{iڥ[(Ƀ1f}m0wIg_Օt't/Hب.:aE#*26f=gNZ |kk>-mxpOJ-^i'Xn{ zh꽒I%1j(gV2>CDVDG'l{[ZzCҔyW,A~Jq7_B>s(z[؜'_"Sp'}VN(RGbUV^67OA>p tPpƆ' Alŭ./t61w3Oje[-Wo5Bh01崖 lenb p} ^0lLEwT]0%,yǽGRIc$_ƺ3rFR$/!t23J b@ qd}̛!EZWqE oX$ncah@rUr[ Ce)SSHE4M'd~\xR9ݹgP861zF|&v98bzˉGт`+QCѱYq+ܤݾN?9#Q$m32 Q O`Xz ߐ)܅oOs]t"+ݰےϺK[wSG$zK.E$hqg_oA΋Y--^;̳h<ZˆKXy I^bğt@\G"-FochSICChCbvs-R 0f p2]"yx_"~pE@rD\jjc IEYir;uè䪀g":dXF@٨]b "¬8׵\s?%-ǧ!wTֽA`": ħK1 uXT @-ީ$V"nLj`GhAQbц!!b4k8k(/v@˅Y8US7K hFxѣ-WZ[᎟w'N}x2U@/t}G%Γ_ČJT1LOB҇r!4m"~Ƀ?l 0XO !NklB3K:X6ob(ڨ$zb6c@b95/QM-`FpDlOWL*hJ{7ri>U{!$֐rbm憔̒V_^uO}Dpqj8ȉ"ެxʲ `u)D^&Fƺsy3@Qhp!,-3bY+'l{VTk[7c<*Z:88`j@۶޽MˉNkoĜ2A\$h (7~ZoO4[U1SS T_yE-ĵԔhkz!2oeҬHRl?/%(iweIi$ ?W4 qޠQtSy˘Ӂ$PlvFY@%N]Y)[\-%l5z~mDVt//xXy`25함f {~W͌ vKM =_ Lk}6HHH ıP! ,< 2'75zق+h~/+Qҽf[Z枈g`CmmiʫUW.c3;Clɗ D5yFa`> r25>4oLoږؿFZ'UwGS\BTckµW+YwǞV8b}Vgoa$>ce)P4Ʊm_qyIH( -˄l20$qUnQfmsw!F\pcӚphCOUD_-5ǵ4$L4!4tb]k;eQQTO ~c,{lF~ص&Q}X8}@kUR9|c|}+l!;JyC;_rZ69|`o̳;1ME`}5I7Kw%kmT7 98C͐dA&H졒@}R,S%28@"thA6ӱi/ X-̱D i˹]yGNNxve ۔JwHU^*w+87{U*u}&wqFAZPX# Zƥ#3Q,a[W嫠a ( HD[aEeE8.= `<_tVA\KLƢ:Y㍡0`eKR$ P2*9R6WvAG5.ݑHɲװ&3R3vB@FdsI=0xÝV1ԝ G? DbzvIUj=FI,gJn4g1dCє؍/Y,C 讴v[QV$ k pH2nYiƶeՔx245={ڈTi: I|O~o`u^b3 ~G~?O%XM[%%3DKuUج ֜$iW &l@kރ4,Y(a I :řS<9qdMHDMQQɚcğ-/iv>VJ+Kë۲Hp+rSgǿHL,~_E+_o/͠w0Ii;Z8N?vJ+S -i;(:KL[ҌVfIxH5)%hp ]C޽LN)VdѺtS.sF>Kx#cUU{WmL[`BK O)|ǍO-/G~x%휥؀T]Rf;4VQ5Nݽ^J 7(`~^eiURtz;\BVV>4!Grb&uP,‚ڐCF|ez茷ʚJ)/t} eR5:tGqw?1-?l[BNA8`_qq<:C~0Fj8G],ݑc/M%<;U93!(rf4%cL@ر8S߫6#rdcO1{T_IgThƧQs5G;lIcO& P;ZbaI%Mola  ehD}CTy)Ҁ3ɩek7%N}_"UCr0Ɵk8s{feHK[_\3 5{ v=,/f-@Lf繓/l Y!jDQwK~MMQ*72KWdbq7+,z$V, |/!Qv'a|͕}k!((A)iC;^uEr4ǘk .lj. ҫ讽g Y[BNSae|C!G ƞ8;9Sb507qT"nbiSf7Tci0ˀ| wN~y/9|Hp[aC^t ap{A`(H&vX0޷f`Aq?k;:2~n½鳒Nf _P=Ѻ9ML8ePv똻鏺c !ss݉?ꎝx;aw܉OYIłH?\rq~Gեm9moA_PK`]V3%髷ݧ`~)]e0qLM7A'!5$\kSDR^%@-hg^@hOyMf0 &3Oh^ƿFBJEQJo!i)?mYV+UI~lSBnqp%u*5}AL %ʼnyƎvK&|HFֵD[U"E^mgOP4hTWdDL{_{t_6%n| jv!|'lf$BnwȂy(W"PQOZө59){o^rdKFIkfVJrJc@S[)8\DUW\ywk/&V7 4#-M+CMubUw7Xr ω>!6rA263SJIM88 0 `@CpLT-M1) n1WK_`o?#E&5u8X%a+r W-߱o{,.^-e^``t c:_`d |@( \Y@BX#m28vzR !͝ਏ7ݤ/aL>7OnWWZNdYqL6b(ġqYU4wڲ8rEmwV'}ٽw]I#ΥoO~=񿭲[ptf wf.K _~a>li}ZܵNU+g1\5VhǎAx|へPWTGrI JI h%åcO˹2Ow ']rL?q2OTڍ[9>~HH0ң붒BWs0Vk`*^_$n*+(poAbُ ]tM{% A(FRV"Aq p۠HsVXO=5Aķcztɋ9~F ffݓP~f6L,K1-oDr!s,:'N\q~ԓeloI|zÖ Yli;*Фn9OHŷ~:PvT ݏ֯CWi;ߧ"ޟx9ߐuUİ%~+wNی8]]n:B8wFdH;_3ZiF2siy赑A㗽 ޛe6 NݴMO-Kr8cV@z@$Y67W};QfKPVx0 t DMVYqqK`%ZZKqz] 6K/0]d\ٍ ,*b!0n*%pPQp%iv 0()ލ޲ފ|P ;|D!W :$UhypVD=rM,6R(ڋa īo,!da)ˇ iiUI ho0ы *ui ߘ$u wF3q:$ΏqǴ#2SS=漯#g^C!,CCoc7@*Vmhc ҖPSg;l2-%olܰ%\%7f7TT^.W?cyxS>RVq$%ɩ=6hH0p<MyBWc KԃCVq 74jaf6{G'VTnyHRg*[ vKl!mᄯn:Жƫ[oO(-I&hjmׇY r[0^!Ά/$`Qx>QYlB0S0 8l<F:;Q\N|e~fȝ88TWdX x 'Wՙ*EU8Fl4349RQXE-J>cp ucGns~>57竈8%mg`ٕK)Ɩh|jRrÊ|cȅ^̻GǦe 1IiGF屗~VqIqcߖt`F;QU14AщK:=B8Y= 8ShJ B \#*JU*B>!I$Y1A>Rp"l/!Du *f8V*rDR#:m~Wi@Rt͛Ю(H ;VmOA4~ ql/YbEV6\՘:(eOQƨz s'ݍw +O܃ ;~8MkX[3FA<-q4pcʖ2X\"Y67"m{-$M:CD~t?Ș1ܑ,N?[VW+^8LJRե!"1\dTȤmԚ#YX7@Qd}vH@L0ѦVޓݨ$^ekjG}(bGk7YHB0Bbc0>QwS/Oyl|p SjW3ӖFI| N*s؆HkJ<KϚxaM5JF@W5H*GMޒ4V714TQk>av<vO8N}r3nlގ3/m[A2iʻP(C7jKN&ȷ1cJG[ Mq)掎ۺ~`lCCq<#/Fq1b7a/q0_0m+3L~Ռ^(}D*d&umb)ϯ6%TNb݄-̗F{F[HiQ)Fv 7@h}DZJ4siE}n=7e4%)^aZ+ebq8K4"ݭ9#vQpڜYpZ}nx\75Wi}. 1{De#QIu$訕1O\Ge%Y_'u28f})WBDeƝ!LY B&v,iB7=;Aahb(څ>A {p׏<N.Zf'JcMK'xw-T1Cu.@!3kBH' D /m`R,إk4-;WARȚN;N"3~ 9iDbZ>NүG}3&`9*fꃜyOI=ҳw #n<3ŀ@V/ ̅{xUPb +Dk"ο0Et]`: J]unju8 <UM!&~U2e;l0jJbF9OWTh\ux\^Xȱ.ҰՉi.nC ܔ]){48Qe[ xa6e0"'K&^'ƎpU)2 1AeQ'KdŸ+ lHbV㎬Vϛ<GVY>>:!ret6iB0,>%X+`0goWܢ0BeKQaecz2U1_/eI.HGCr 9#xz(<aQnyIqt(cva|T,BHQq䏘6IHU|_[nHg E%B0Q`=5nmXzsޣ l\db;~|ApVT ^A275ҳי:\'HfJb?!^Av$ı<;aɦZaߔ́ 9 =z4%/b[l$ `9T& a (z'gBY5A' h茸ܸˆHT*PJk+R jEO jI'XC6LQ霖FQ #(:=>}>^٩3`bK?[VH6JzO=tfyށo2.iMʶgY o_.񖓧dTD{VShԏ˝ZE3.ZtaK`sZg]$F40B/w<|y>%472FbODsVmj/7+sUSYxm0m4~Ύbguא܎fD_ck'LΡ"DȏƓ+f'6~=l)&ݪ4IL~1:3况#B3H q! |}ND! cZHg>/kC e#)VoP nyUJqB$`m`;q0!8=h@jYi^ RQ\~aK4[8žӰGnjr˅ayQHk)\'32Gg7 2khI9֥ kfg: I'LK4q e`M !X-p{i3!-0NȶߺO[s},yGq ,3'lS9nOkWfoeN0E9|ݓ#g>즏=iyRw۲zqe]Xf#Q$dnJpTVt~eB_/JWֺe3Ze2*G6m1Yyv>ԗ5I}~)%6i~D#!lk;C >V%xHKtA!RY*=jڻiwl. Sˊpڎ(SDO.u))WtO8p[jDRΘxcҗج'9,ʏ܄wȚ-NOn8uk)c)zx!@PJq2S :f# 1Fd4`| P{3 ? u#8z6`Y*4Tcq "b>+&5}~êj^AifF?si`D?8n ++$ɸLs{UU)8"?M>qcU? ?l &Ue2 mmD\Uuܜ]Ro^P&C $#,>+z=%&@aVq`H!}PRVp\+ij-?(36bX&;P7$g_uCξ hBDnQD+D'š/Rn;*ZEssĘCri<srh|31#R_6NAGFFlxI߯lz{#8FuFNq ̓-f%<9jS[idl_>Rv5z)ffΚ,sM- iԴ/6b=g( l3ds ^d2)ֵcnt1KJ3s^pW,J]IM i-׺ j!+t褗T[_a{σz[e+ &e#4Dv;aZTn"Մ٨/$%-c 0xbʦw^ka < ^Aa{m`ܖ/rV8ZHN mQUaH7e1UzhAZeX"7AR<mBget"Ba秊#s"_:!>XfIΜ5`yhu /u 5iiI-3ZcdemWF4Q>l]x0\Izo #?e˪Ԉi`jӽ1dh]1S׶vUJ#"c7^uOfHdG=#Z8蜦7m~$yg_n/o\Yɋ~˼"@׮jSl8$=bPgb74{b*'5*=$Hg0CJb~^(Ж6ﰂM+80]yYH&-/+Gla L|H{ pb[$L$m!z-C5 "|̃6"ǥS( n 'sՂB$koIXxX4۞HF>.&\Ab5Nq9!!hˠϘ[.s1Q&ݲpeZ4z3fܑ3bsla507ՠZ{f4(<5CVߕ)}$ʠQ|;R:j֧(Sji}NLgϭ֘Qm{1 \{b% +g`LիKf -?LHL#D$-.Ҹd!KJVM-˰C H҄N#v+ f,ܱOϱ( 3gAջطpC8rZӣy]x=)1C[ot-y qr9e ;d| ?eJyg%BR jz(cI`FVΪ!1L%ͤI}chϯ"WY'(:).WNdց a3rPfcRȃ}hka -vQnI'OIde }Y9vh ϩLh}6j҉pz82-;}N' 2!%yٕ发;o=Z!`cY (x|xLvघm˫6ݿ;iCi()ݕtFa% bDcDhprr) u]^keRSarRqo[zyS+"_ϝS'ǰ?~+'4/пLR "w1dzN0۪;ĠP~B l)񀅥"vR2³.~BBIƏǤeFR_pC,/^&IԒVSHS|nJD 32Q7墓 PwFY|}Hڒll7ܱTν[E\,o`NY$#B $QH#"13sZO Sh# 2L\R.ޑ@`L3>LdG47/. N2ㄼc\}lK% D L{%?ˀ惦a b|QX_%A)YlOaHD{8l3VaIg%H,=%4F>6&?1 0ZI>X J<3?%F 4w||+ ѱ#Si=H!;ؠ|k793&C̅s Ft21s-h#_'mCCcDKbM U=Knl46Ð?W6G Ia˰ [J ||>bS3NF괏y__!hpE (9"όA1d<ǷQq-=sTsqqY#f[%"Ltx͝8`|m3s~FDvKU m` *maAh db6숞4kID3ASJK` tB@|OIhh)yx֔sBK}o/7XPC`f;:)?چ1c-0Ww6DxBalBqC Θu(QP\߱JV "s51i9?.9gM y5"V -;H/;\Ob{o8:-R60俫EIs3p&/ _:dL Ed=%[|J,ګ6oyE=xNH˃;LbFB!uP&SNOB>Wؽ 8"Q 1ZW~`P|È,XttN2$CCI׋<` dz"hNa :~SeĠN ,Byd%cE{MA AǦ 9Vg q% BǑo@r{M<AKXj@:5 1Wfv2 3f;rLCxS Lj o߁ HO `ƑS,w~>;=d;fr/S$8AѻonG( $;g;)N<Ô_LDY.b#j| V0iEd{̓ԃQ70&͙{2dYQ~ْZ4dyh#0b̷Zji` k?* l1?!qhi3&k1)< `B83%$.Pʈ²+QbW,bY ;Zڞ}K7 axd(z`ʃKFWK=:">(^R(mIKW/Gޝ<媲v pDŋM'W($'O!7n|vX[ʇt, iMA)KF;1s MDMy`.ݦ1S{i@`)6P:A]IXN'#tO8E ھuˈG’j4ȓs,融05#TKNJ`iϩ-U!=͞ܯ}o[Q&ߨ]lE`!f͖"VfMI-(kfדLl lP+]B^m7%|S+Ac,T{:z?DڥGpCriwQ/{3 Ѡ@G?[1s [K&XW뇣N<}A'mT |ם!K-(30SZqrrLD q $ŭ^ hP}#T%Ύ5Z _td탢2NNӉ8Xt`" GoKJ<q1~R ζw[I*FIo%z__ja@mU{!UbVW;(㜤 ٦$`9Y. 0_YVƓ9)a/] qs܍҅ y)?hCyڂqo7m?`g_{,n">:l{>:ƺN+2Bra1E}AG%# G",5ݢ4*هgg\_YO½V_uzA'Lc/ND<1^#+gl;pYM !8JoaFL}FU-6-| &0Bry,쐌p_+?6VtL ŕzqIg>s2Ijc[{I4~I50 wc}G+^Ѿf lZ(ô1D:&KGO院P.2_t< "%~\3^p_|yĹoX B]5PD>jb-{Q!HMc%YOA+̈́& Hf~V]gzD0wɌOTe{0{NC-Rp` h f}+'`j)՝%e}KRQ d-ʀuXhĴ\W vRl`]"+sDHz8cg%4̸]y3\B !`H,υ8Dq@;?~A?O]LM tu`rFQW0Pvdd E; oni$dYgvkwe\bV.A)F;_ S mwm1N(~7鴇WhNyla lc-"QMt4F8(f F>3-/-&!NR-o0€ a0hB,N$$KLVHE961Zcx0;$/ˈM(/ޖ@1<'3ZON?8ԃ8KCv]/y !9g}V 2TXk7!`3iW< ÙψI3<'Kg~o}.롘B 7lz$ peF8݄o!b8٧婦N*$Dx0%qͼwٍ%Y҉}"K>Fu!x3iŖ1>ZE=Я0h LM`A$߅o+pĜ,~DlX-T{;YN(@3|+oJ黿}բjwя^mS1 g7rp7ߢO6`B|g  ϗO@Ȃzg?pR!cD(C) &/t ^[ !yӚZ0/juCRпAŎDH~wG7_5HZJf a#p'&'}D>H<)˂W4e-5|U=@\4i\B۩r,Hb& ~O /J2ZӔuDnHG1dH>&?stXr91VXxf3ޖ_@8a4<7 Ycq Z;u! w%|G*r:_#gѓ϶ݶH{ @1rb"S`R=i۔D8n0eKj@ Gv*oo~&C̬H{F[oQRyO&ҁ5.oe=Wi8Wcw\_06l 3YOX%3 Dͣ `~۷X^9 ;nj:3&!^;5Po?H2! p͗~,x̝${nRS/"&6ai.ǴHbO{*+a!Q// }h i͢S/w{T`>$W0(^.#ZA[<_=s '`s13Oy|, D4s!ZIʾ~g8L5v2CPRs^@0`PDZOQ殭ܐ( ;fQԵ e~{IvԐLNT/ԂiÛzo\ײ0~˙?eNaZ>ȼQh\' aes_QGwb< a$Qt1SE/X5Y-Eaep2PW-W @p `}2.^rEžA-?/ACH$J宦l,߂тJ%yyyZ1`I|`٥؁*nA$0p \{HsGI%>Ri gF32fKwgDPsAMP^DmιsϻMm6XE-!;wn ه$/~.H"fJa+xtۛ_i!E "(bY|`a\smiLYpVaP]HÖ񰓓GY˹rԕozYe1#M B5ÀuG _# n???9Ids+Jl8]b IpST*Je@c_nN9NB% q Ĝ(( ;pJHN|ڻ~7CH/h+LlS3OV@JDtA˦qsg&Jṙ9-RUO? BD$0nj\t+UEWv*æJ8pu'ÒN(YR<7K >fU/6c Ws FE@r:Dd;c{JW!/$QdCt( H0EwZbPA 8D036r?_uߍƙ'#̐`;5;}2 `=1ĂIyllt#"V v7rLjk,Bon1g졺(1"`_SKԔ2gﵞ9Pj'E霼 "[Zee8vHŏ>SWϺ_A*9<n0rGNtFA^`p\[r Y=&x_`okf.LZCTEiRKZczK0| 5i%yR6/UtVBʕ(x e.{@»G1v O\%wšnj8DHѓ?x4>h FOC 2{! 3N(?0ghnwF[KMafu~AL,1ݦx`tQGZ%|!0i픡4鹒׏uܿH)*&wfqGICEmF9  {-- %@'-HlQrl]%R$EjI$zjwvfwvǐ 3;GuWuUuUyEӆݤYq;:_ a(.-x?GO1mQsdy/lkBqC6qE$h~l(puj=@n4 ܀Pl׉9b% &uv`G0v@@f6ܞv!tQh3B4^BCȲ!uU2(#ǘ2,>VrHe4y3@~Ɗu{\ --'CDT?mIu(FT K=[(ۨi$҅]j \lzP~~(RmlF"rȣ !@%NQb`6 Qń$Nv|Y7~dXVڀyk8CўY%"lnKν~ >T(+!4Ia\VX7,aaL[e`oz c&Ì]&B[Z&41i3ms9ز R/m27 /"mN6{*\%N0AS Azc1l8<7 =A.CI7+m+׃r(atg Pb?Hԟ6el$m]$]WtE~|a]E0~WFc^be\=߷عG$QYhV ':͇+){n.g6 8-$ X<}w㺗9&*Ǎ`?-`:͉Wt,TR"ca 6, e̽G?;/2ȉ@ `߇-6iqum N >n;ű`Ŷ΃LcN3L]Ks=ٯCMjH?7w-M*j8gwxX.WrзbvHK ťpF=yL2vaGp N|!uV~X{!-k_0O3*I$6G,4-/](μÓm~5Kqu9tf~,QgI۾J}V&Mp u4L,OF' {?xm{TDBmF4Wo'?}{q3ᢁT RBT8l2}XD7ɧi<|¿8%j-Z: !X7-y |๵Qc“‚kyZh(y_hk1ط:e7Eu96q&|ol1;bR\1+ 8u;'@Q I5 t3;XVI|"fkRV̽(źq_M?ѕ!2`<}FcRoPo*2F4ZZCTl􎾃 \b`RzO[ZJ.Ͽ:B8NE7`DSޖw|&O+#l$`dnM=kڲyT2^r(9rU4@<<=ΕZEC㸚A6d1YcչX=@ iؖ!A,({,>Lˋh>V bI K5>isMZ_cЉ>Ra=y'_LF*$T67'wĽ,&7Ϻ[( $+!>m-,;4Edu%dڶ3!+$IƔ2 nӶe'"8L MA^?vDPPX^>%(m/LpƬ$?b́rkCA6 $4v,dR^Ʉg`bQvi $MFgd~2rhי 6  ',0DL,xy0ʚW$5B|^PLNx<՟S e9,a\- `(:>Yz2[ٓK*Ǫᗨ4 j-;!J*{lˀ U/^V~OrhT: `܇}|bɿ7b-QPv)-d랴jPm˂nĴSZ$b1?Y;!pR־X_7mC=1e Ăkv+*Or?/>~d ,]hl`X=/9cD]UuS򋼩oM.-Dg.y.3o0PFD_D@;[[|qW& bpKpazaE&[$@14aS`~'*FOs?inRA4 5@Lٸ|OyLF:E?<\'jbCv`U cwL刟S,RX}vGܢVב %LҬ?ߪ\Da$B psyț(8"z&SU) !X\[K޶ɐUJa9n>q)á>f!@+a۝ %IDATN2e)ۉ'B?Nu s nD` '% `]Հ#/l9f.`hH`5{@DKW/wd tb 鄇5%XFaec1B)ˮ VcOty8'*'懔y8~OJ3C}iL4bÞ+QGÊQ?<7:h{iR ]!Liơ0%Vkd>D-꒿kT'rpDyBǐ ciYD|HfGQr#5G: Ep^܀o +9'Ff؁LԈ-XF'N%NLltf'=4$8pm&~rwlIaŁ6f ƝIJ'_=:-~zs~_^A0GAb*O4fP^`Π7 ы]{Twq N$.rz?fWwjYX,tq5"ҋ t2gʔs<&&#tQ|1G.s퓐x;j@`n8#o[֘ټm/UnO}dG V 'lS ljA[)B2)봀 e<ʰbsN(22W8Pԁ2׫ hLQzPZ{z= 9~ 2 +/tWmpRF5/kbg,`nFN`;O}Ld@`l@Oi{*#'\L󪒏8!"}@N xGa^Bl҄s t{إsgAOgfWS{DpM;ԏ> + *M|dhWYq#,hg^"X{_1ieەz C r\K^jo lD ޟ+L"@5';GLD#,CD7[0GѢ=+|P$GnOa"^:&ۀA3R(;;"$DdY3+HNEm5DU̞,#v(c9*!0ERZL4˭@xf3J2" Bk͑_ ?%K~8Qob--7pŗSܿIo~{X3ЗU}p퀬}DOץ@\44wl?n5QQ+\ )DP*ܔ@!U'H ^ ML^5X}pvBLo?npBPz~WDgTU<1V e nM @^O!Fq?1aeP6׵-IR:Ǖ`+؊;="H.]uODܘ/?;)-<^7{]q,xOddnׄbNܑ'Xe8 ghĻ):UN;/ 9ee0 lՁD byJӍX+` M @"Y?ȿ#oS^N?հ@BHuCm 4D;UdG:1A&kavG`qGjClC|Ff,m]u:)$z"L\y}w.似`LS|WKTgd(pUcѥȷ}$Sb7Szm&o7L|7_ A9ll!6UB2͓ri }|i0.m}W![mBp&|ɟBpB쬾(/Z2v z֔s EVK! 2kG]V-q.K3qD{>=Sg3K:l}J@%x,A? ն%/=C5:43KƤ%g<%R)G ߷]ԈY|٧U?>4maKCJQi͟0|Sf~W2.$-;IENDB`ic09^PNG  IHDRx iCCPICC Profile8U]hU>sg#$Sl4t? % V46nI6"dΘ83OEP|1Ŀ (>/ % (>P苦;3ie|{g蹪X-2s=+WQ+]L6O w[C{_F qb Uvz?Zb1@/zcs>~if,ӈUSjF 1_Mjbuݠpamhmçϙ>a\+5%QKFkm}ۖ?ޚD\!~6,-7SثŜvķ5Z;[rmS5{yDyH}r9|-ăFAJjI.[/]mK 7KRDrYQO-Q||6 (0 MXd(@h2_f<:”_δ*d>e\c?~,7?& ك^2Iq2"y@g|UP`o@IDATxidu/LO4ff/Iq(iAdRK!rv!;aRa")J]D b/{7_ͪ[nm{]u˙uoe<'O<9µl4F  j3̌i>) u ttR5lKmE EB@G C⿹W6sY1ڛtf2UZoS__(" ! @pO⿕lzd4_ h~w~dggEWB@$l$@ & Dxz~.kJzjS)7i>OyS.MB@!Lrc#r@F0x̗dlL_zBZj ! h2>cv3qBJ'ϗ_= VW^5=I{]p|d䄀B`:`, `$`:1Vx.c_Y_#\7/_6){b@! 4!䰲*q<WMJS)̽ {\p<[Z ! @+ʐWGŧ̅YS@CJ>^~! @TCj(_okGB@!1}j_\B@q@@ 8u~P2 ! h! D=I 0Q} !  1CԅR}8f*-:n&@&Ta! }F@ }m=mHB@Lb e'&! *c4>ŲYZ,nwLRb $8B HB/P4`\KS,U{ XzB@L1b'US% D&3P=p ! $DB@1S6 'B@ J 'Ӎ)Y Ws]z;@"%1"x3; 1}! c7)6dvj-%bFB@!0!U5/ T>B@E@ ݁k.KN A@ @br,EB@$1מjq=RB` 0m"w! ! `\-B@!`h! BLa TZB@bZXL͓t*芀$7*>vZ&1(B@! @&@0)B Hpvk7d/LO_Z*S)x5[! 1jB@L)b ` {]MB@#  !  LE7B@! ЎTTt)艀(P! @2~UB@D@ @Ox(B HfnzP!  ` :3:0B`0enۘVB@!B@ @y`zZ-B@#   ! H4bݽjB@xh_m${8! @E`T-B@ aR\!  A@ @B:RB@!0 bA+)qT;F@ RSՅA@ hpT.B@! & 1]B@ `48*! .UV! h0B@B@ Du*+B`4 E! D! `KB@!0ljE'Ta! H0R8B@@@ dj)B`)L! d `2i]@#S ! &1mB@! p)B@D@ Dv*-Bp8~zFZqB`tI!  `bJB@!0:K$B`b01]5J`tX*'! " `R{NB@!p<%B@!0Ԟ;Dgt )B HF?B@! B@ Pp)B@d  V!  1CHHGB@# MlʙV]B@! `D@NR6V &`LuB@1#t2) $UQ!p8Z|2#`,;FB@#bl%B`\0.=q!c[E ! 1c1GY-m%[!0~m-0Z<B`0v*KpX^!0>7J͘4VtMje5v`v*U!  1miإdR&N}:_(`gKÏiS7L6y71уB@#`F\g3&˿Ln߻Žw> B@d# `w]{cTIUE! ǨI<*B@!0IR/sc-B n]5ưkT%! @b0] =S(UQTcruY)! HbƸfc[Jl!/PPN! 1J1;7C "''#!? !  >>l$b %3͚Y\)뮀=Z&[/B@E@ 2 X7pS` AfӸ&8 KρY o3\Ɔ&UU! !p @@rF|jC]}֓kj ?<{Fa^]#t נlc729S­f!tA= ! Gh4'+V3Ü~XiR΅3HpkCx Eg23>7GWN4o_~+˕߬A%Q1)3t݇q ~O1.x2yA>њ阯2hrxLx g6Cu gfmLt 3 ! @"j pD`m4#ʦvd \|zZ$n>3HQdؖg YGj7oIig s Ҹ<&> Ww ? Zf1&x&Ag?VTi3ܖ]\ֳ?r]gS.!1AoT!6L@:#ߎ&@7\5f3P&>tn`?34Э@3~Ռ)%řkzC¹cU<}q-``̸AdwOIR[=wUgGIb]8>m 3K]_F 6 3c3,`T*7a~'rfk/"l XLsj0[x8hoՕMwVP"wF!d2iǟOǔ#@⿓B_ +cctxٖlGG7= H 81^C=W3G>#fj4xx^Qm@[(qnn>t:e>/4ss[SRdZ)E#sG&ة1sܺbY25?>f>\h ;6bJйیDV/˦38,]oaK"gm.T1#McO?oپaJ`"ؒ|SB+|Ƿu|>dn>|{"F2դT,C0{Fp<\wL! .ډx͗ld ' ϕkQ[^&${:1ߵP࣏=a.]zĿ?bL6a>-1ӫo]5/(9! < \H7&ϟGȯ^j{َ_P5&-8s9}^"cB0\x7ejIhpxTXntpss\RE$aﳳsfnn+ k3e@/-AS@0׈HG#0c*咹'Fj, H^gRi(u_uTxduд7Wbb[_i~qh  B@ uq4E8Pel!ph:?FUL@'B@! FQ#:!YsZNHoB@# `NHu܊Pz ! ,bt 8[H05@]=5] ~H BI RRуvpvIy C@sↁ  Af !0'Ň%@: #u*z" '< < ܎nkؽ68"L I@ 0@tZ)C@pJ^,nHa֩EыEB`J`J; G”5[iF@)z` AMkTC@~%5 ..[L%bhKA `JFe=bL!1}!J^:V4lMk yܭEݐ:0u]4:~ @J:zJ:Z! `8%,֌]; @` (a-Tsb?y E@ }0Wӎ)@GL oZNPPR0O??ҁf !0H0]o (t tZ)A@ (%0$k{6I(PLb[%j%O${8!0,$'!m@*A! @@ `%+uɅյZ#^: SVcçZzJ<bj1"xN)iA@iiSE@ @_e@V=)$708r/@r{Z-B@#   ! H4Htvo\KMam wGJ!B@d"  ڿU [1B aHXd䄀B`0]l-5ЃB`0u]?iXIq t !0:0L 0)~'jNJ|E@ѫb$ mLO_Bb!p$c,! E Va5H!1=In %ٽa||~B H 0=ۧ] oCпI G@g&U}!0B$!LTwF2I՟;?h؁@D~S @,g9*yxC t0͠8 P@AoJ0= Q! `THNZ>^Oa'^_SJ!4$Gm4 ! @1DuIA8x2B@ @B:rfPo?0ljB@IG@ AM>(J'dLrV#CQIU|pFx,PN!  1߮=G13j臀~%4ܩQrL1KL'b߃g0u] .Lҽ ߚNz>ȿ1)u =0e-WsBq2U uu*z# 7> m m/QHh?w6K]݉|"i DkZ!Ick 7QD#_Lz}B`p Ub: H n  iC@ x^Jfp-$L Pj0O*OPzLL8 O P_OO_BPBí!  f5K!1]IvO:V쵰So #l0_hlBLX_`CQ?nK%+jf gi07ktxtӡk!Nfn @J{8C7I#v^bjB˕ f/_4VM&#IIC֟7%;$J.@ AsA.#)+:Ѥxa=iо7ո"}Z^ǁB`/W8dr@i<0rI@PhVB`Xd#P,WJダcIK &šg]T PLJ"n &1g#1Ɨ? Fe!`zhP|ᴹӖґb2?X!@o;;t0b8N-0JT:Ixh,{`PXc s/jj,TKU8r[ȑUwʐWqԯϘݻͭ\7ZdʩK2A` 6&LV6ViY7;==8:y!Z7LNVS 'IFG=SH ewll]S,Vm\57_yOf~T48/D SwWػЉvs[fOY4E'XFJ US}$+2hvaն!{=R+'{۾i֯|ӎ;^~rxD7hL .q޸n%Mn5h\)% *Pb 2gNӏmN_|/I uuxz#`)H]"='/5[yqyHLZXx1lټٸI}{y6@Z0l~?<2מ9zyq.'0rWL&{ڤf@o}\z_>,-辀KL`C Aj_5ސ9(hg(6^X=^Tm`Lr]y&l{[NTb;XvA7Pz /ZeZ1a̯[/"asQ"@ @K pܔ~b:rN.}( l|ۜ{ןHǭB4#<'t@M):Va~nHTz͟biNɏh_ OyIC|8!3c*\g` M:hAؑq͙똿K*jg pwХzd +\ZyJ=u؁wy{ᾥxG^n5_$@!BUVjur;!|"{-=}F Lt=:l:c_ʿeJ&,˅&mx:@~a7 vw_77"7! As$$ȵ*f?>HPz] b^]/2zHerŒϗ`I3<;" nyV롡ѿA*9RrJ&`I4 .n?ͻ?w8=ގYh\ Yyր0*eˉDTΘ3T@-l!l`lcF;KkC`p^1 6]߽kf2Y '~,z$&ȹ9{͂S)$!]N/Y Jgf xP;ӹ=mG2^2=%;Z#PCҥ^g| N"^;:`G. { B[<έJxkX^ ~٬i[{ 6W7#S1O͘b*UX:IaW[vOv` PeƏ̻񏠓Wk{p.Z'p*, fAJBk1yXINJ9#c[teLbTh_X ɘgç@SP є}2GbܱLL"H'YY=6r![" PT3@["x?i|.)xwGϧ7QkmU/6v3Iے T q(a6LƜz߽@Ƽ=ABh1 w7 >..Sˆ۶j |ok!fbmm/Fޚ1;"1+.12fl@踊 rT ;U.XAb8AKul̙Tfh>w4߃5-K%c>1f$`l ̘(H/lY.0ǜ ‘"3}D~.iցa6;}Lt0>$nÙfI>њ阯2hrxLx g6?Ƶ|tJ<.mDj=5(J HL+ᅧfʒF=4 ]|[uc6V+˛`H32xG|3|nOmߞ~m ǧo&7o?F7?[~0i\ ϐ?\Axs>`9Q .5z-W)Ab~P0v53#Amih,L=i_#p,Qӕ ?OO.IŶ7:+wa6 .ʦ~6<ȣYWO[Y K-*i}^.^h^Bho ["qğ͗pms$__4.ˊpDeRYpNϓbxV}%әNt}2[~n|_$~.qn7 LG<I\ztcbg ic\Rrue>N"e?` sWsH#|q]~.F`2q,kցёȭ]\}~>v JoxYBGG'D\_+l(y`WiU5b;gY= D in^4-bi؎l) O|i++vYVp0߾Dmų̃' x`Hn>-ykIhO/~wLdq^o~͸tߠDgpwE hwW+ `ۙHc3Ntcv]d"_y,,,[1I\¦Hj3| ^IĆREDeS#[ԅwcpq5C67?""%N+}ӟ5?o6v|47{?~5>᪄8_z0U} i=W|ӎ4gaי~}n;\J 6"~>A%(?1rHW f )5e3?9_}! T` -.DqXe.cxqϖ) <_At m3>~-'ޖa:il6n5uqUAl 8 by{@'eeoj,u & ,֭+cŃ7zOH 1HB>&azLh+ʐGمtF~b2_WκY;`ݜX]3W]@.6uwOLLTz)xP_1%ud2kv{ Z_s~~?Vr֏;VlUEajhD?udҾoO~pcIɈ6X'Qf=ʼ׺#Ho/_wڻ >+@(pe'z7gc}|/x,2t-TG/'}hi[lyէ^ uǮ!e߈}J4,VGbz׺Zb(Gťe EqCePP@QGE4sk.h3y||:F@4>m2rۜdf ;c ueW޷#]H}n$ʱ9X;/76oC4* zZ P:9ŅΞB_1j^ j`b2QfR0+A؜~}CĄGUCkU]q?{3Aڹ;=>K/| x\;8)q&|~똠{za'Կل1ҕ'l2B( Jipjmebe!i2h>BiO`(R֊ ʟ-Bjڻqok/iPâ=?4^by:h4hp b < #qw$dv;uDu'r[;cQ/x`^ʼMGMمHpgy`t`98k9ؑޑͺYXGҭnt P& Z԰U5ȍ:ݨMڹs`xٯy=uh<Љ74dʌ%-0KF8WΖ!sȝd1kJ8Zg݌ٸ{l8_JoVËp(h|YͷnsK3?qϐ` 1u/!ZpɩxckXgu%9CJ9餏su(X#w$[y,{k{rHRv!ity@jOؙf4nOü / O\Ml?:]JD{vqX)]Uw񷁺qѸ`:k 2}О{+f pJTĒ;2Kfy'V 1uW<{w֚"P׮78ljye0ND޻퍁s{~<+,/Y̱;믛3{A X8<u]3;WVw{ǖGܻ;%("ڟ' pi>NKmdZ]Gr))rRLPd|2 ٚK=lq-ܫUD1heh.V^Yw~ho:sd6$犥kc#@[ 30l:iGM'T[Q@AnGӹՇ0~.:x ;z[N҄{[Mf(^:$Ԫ$>ms<47yQ(_[O-6-RE(a7ukxaU.}l]]?wlh9wuA bKR;AK8ɰ`pNpYVlSPLRF۪q0Uq A^8c\e]>sfa, 0ءUo3 G}8hqVn퐿ӇqUme{Ob9y%/u\`႓WΣP ϱ9?9?2J.;hw$Ь^\~l-"Ä?S7mamN{͏qs6Ko~1 l+zG\ &%<{^]yr_cuA!@+£!-Y'In RjpF Ŀ|+dqI5?c#M˅kfYrg$]}(22jC'_~><j9o6"#κί1Yspښ)懼|" .TK G! lqn~T1-;)_ig%(rs^iz\xy2Ƨa*;k!nl`nŅD/].8߾2S?f̝Oo|J|NV`o> #qsq6h1K vh^gav~,`/O>d_ggA7H8*瘐Q6x>v9\*FJl©P(Aw10_J*[g2+`.D2m `v"?R8ctm@'SPA.Bvu^^jrQfn{aYiBۭ¸ȁn!oECL>eο$ذp~zB`-wέ<:MHs7 ,d"°_)*h5݄3n+|كn"aQM*ddO(/ƴ-d((& 0Z[crEM+J ~&Fi ƅ* t! _"RfF%WRtk>Z'FfFcs,rs?_'C -37xDh;15T {w5 a@"Ng! *-䶷D}[6.Py0?_s:6wx R=;;C~uc "V<R]q"slKG5˘pBVЉY Σ\|Kˎm->P|dqd:r۷̷?O?@"g2_18N=eues0eO"iqO)uf~bx?SV`@IDAT >*w~9pvWcÎ/{8Dl(AxS YnW%ҳh 4 (7yZ \8HΛ߄; ! .h>n-E_%Y/`'[J/8]Yiź|jٜ)V@Z~b<0+pmJؿ3EH$T#yg?/e*;..tf:U/1~_d̝ :.8AY&dcTZce 9ӻ- B`<ww~6wpWBuؑH-B:P6g/,ptx,:Rz|KŅW~9,Nat(6Db&V1x⍧ʘ.܅w4dZ|0۷:i"Nq8H("8 "'d^‚{%@#ys+%طWOJs{h0 >2a)rޔҠwpa>B@88s-cu>sr85k͸s0|ϰaW,rڑMxUvJjF4eX(з32׿jiV! l>G7A"2;XSZ뻟+i}k[g8,'8bCb\쀑H.O8L'W1C`ܮtOzR%L$ViW" ~' x{shwJ-mBvy߅蒢70.Qw3pmԆgexAN =E`xTt\ CS3XMScm e3s Q{Įo TwINʊ4bO&!͚6%ص|䀃 !plZKpl{,o~Z;i3ҷt|\Ao.lFͫ׊OZdU$ڪ'wݪ9cvlcF6L%p=lv[:PbS1K6=~\ Vfq HΞGt$Et*ܩ*Q=$UpJuXl0Es$K]M#Cgy8i,B`<ؽw eXR9KCĞ'90  pPXe.Wp-#>C% ଞ7խ J$j3l)|BG%/-AG 6|#9@Cw?9rD•nDJ~I׊DBFǕo5l8-"[(s8k>M9F;? (ܱkf~ťٹ:*/;%jV/Ǽ"o儀?xWT1j}onfڹ')tw#~9\ky@lH|o]3=ֱpk&y6p1wxs N3a+G{9H\HjijOM 856)v".i喎 æ'_:h%˓DJ 7D$.$5MSkݏo']Xǵ´8#$i\_|loij_}Gij7>ƿ2n?ϔ:.opOɊKZmν5KKwAe@ak7ZCOd^6o\2+ۊrgfa'ޭ;ysڋm.?9ÊΚSz0a7Ʒ-/x:{G1;-v:y2`/`P C*nGCC|n UuZRޖOlAC?ˀh{Y\9yawAZRLkus"8u~ G3fgDG h:m 0:"ރA Lt8ΝU?[nA"b-}LS8L s{r7'跻%ȁ*ؖvԆUu+h t~ fyu(7GI8uvSZҜA7d~VC R|[Z%ُ?.8~(v y};J~pN$@i/A|'-D,i9yj~-}՜9 KPxrrha̗}@(c;r%OZu+6m~]" өΒz u&l@3 ~yt%vqPf^~)ty4p ?&vq8NY0yl /;QdY}p]e7f8>Fn`𪐓-A\u4#+`d&΃~ߘw1%+F1a.p"2!e(9l$`P_-<>}vޜ>ϻE^0'_\}sIyY#qҺ0Viz7Sԥ`ea-<[FD 22^v\b g$0r8R`8#췐5{_':fr3D*qO )㷈$x%nA1[Fqq\7^Bͺv։%? #bn)}f1_g0=XgW6"2;0'2xܗĮx+,y]@^W6 HsĪ氁 Eǿa?l?"Oes J5h ~(PvJLg/؛]yrX~&mcӍlhnln>f%<r̮nl@JTqC0un jf?AWKWO?b@_S*a9DBZ~X]2m DuPN3| ؾ[2X)^W`1=o1\]Ր^ɁO}nJ1n Q }9֯|FpҿB~!νATDr4Mt^$ßBe"ws\3rݫ.37C7>lq3OFY(՞-+@+!tJ:-Z#@K:*j${06PEBQ'w3<Z &޵*pFBf ğGst r+gx"Tm\~ t.m;9^B@¶gvKEg[;n]moâxHJh3ÔzJqyJ Qn#d%%0aQ5x(S&2EO1wXƱѪT8jٽkϵ e>ek:T歗_ ƕ Bo7elmv =;#eƎy2?vGF᠒ v>bm/$.B1)I|'?D'd[[M'pϯ. 3o)>o'CD]Isnz4lPqůy~ڗTJ8J@3tt 6u$`n>hjM%~P˂mNx]~Oq8@B@ 68y?<:|2'pxI2#z\e Jm;sXMnܻm660y-3{\‰-jwϑ Ds 8D1(T"S:D=!!g6m.JiyL *s?{|[i| V.y$ID}U4/og>kf n s뵯w:ˤttߺO9(p0#BfלAy+.@k [n\4ޅ rx͉2nsIl1. 'Ξp/f`u+whr ĈL?:yzK\4m\ȖX=4`W9z^ h1ZP_~9;ggRiwwR8Lw -)kanFus)q$LQ ~nyGˮ$si 09?&B:Yw}nX|?-Ӝ{e^'DpdDB 30aC>S. =CM\ęذȽK4B3tAH{|&i &'!`(YI^ʗᣮ㜿w$t4w~3 :0Àגr[ĕfy-9}[J|Q~%c 4FE5EB+m#ƦҼ9z:\H8L~Ңۻ&=qӶfo^gARp OX-<`azހ?6`uh!4@9DaC_mKӮyL9EDj`り[7_20QgebYNfޅXNs : 4->|V={al`q˅ 3I"<-{8D).,y{֟iFIYB]Zl}A( D숹ǐy׀k2x&UR0bBAKPoZu< sŲc_G3LFns %@;6S\݈#9: 蕝kMA -'N꼀h"#pF!0 l #윥ⲐH(Lc_W Y"3^ZwcʁM4$YZMlDcfPqS0uv3>4 SK+tQG1"wǺP"Nh s%q|^ (?ދ[ɡ-A2t)zzM4**nlf9"q{s&ݪ$̓{Wܓ#/@n|*^a<kWu/G hfRVN]VW ~K߬couE<.wW_K֨ /ZԨAƾ"̝1W." ͝ʞղZCnDkGĩhvCyX\:e\{Ayna9!ƓcLVT D}R8,b[{g70Π3OA9<;#N[`ㆶ yuˇǓ?7̷>A03%wWr8s>1;$~DA?r{ u˧eEGq@",vm%"`p [;8&?w4!pnfkgMu>w@̍Wd'wJr۷̫͓?,kT/%s Z{;:W:p{$ln ƪ*3 ̗28W5(V`Oa&yq Zo]O1 ƵwTfيKk{X:R=G:Z5tf G0HaJtʁא fٺל/i xVKOiXL'2ҩ1yɿln%ێo#%`B}wiN>n„rST@RDqPDշMK,݅<4X}?1%ϣqΡ_aUfpqlқLΜDN4&] R۴5\BQ,2!@^J_y(n;XZB—|.CDZb "5;n3έpm/N^qYw{HB]Gӻ9BljGq1NA8?և/x\<9׹Q߫>Vg,y e+~sڹEc+ǐ(2$s2*(!ʛеT qpv3!}%$X{Ӥދ10Ge]xYBʲ aס Z)bm 2[eZxaOS<'Ϸ2q{J1}rXsP{<фTlBx[w73fn(4'yr<u kkĽ|rnK#J-ק#S=پ**'WyZky k0!D15Y]w/Y`XҙYl()ϳ8KWM][o~'꫘Usƕ6ɮ qs8C0Fty!چPR .zf9t~qo)^%8~穕/o)s]1E̩0={dOB|9F`؉CCNMhͰ~A6>=%L^'pظ>_| .jYNB@ 2`@F@ys{Qx v!a S4ܻ`Sj[?^a?(+-Ʉ"R@LN.SE[4sԌj/EVqaTS_LG 75?Ъf4ާJ,ppO1V6`Ąד{ٖME;WdV {`r8 9|PH*;Pmr;})̙eH.=Q$͸^ݞ9!,n ;ފG”Ŋ|+8.tmdAоL2`,J>9he9*!Ӻ%8) ;^Ck:˃mw-]aN=.Ká<Iv/jòm'֕9mvz bM;͗Y_i+ot E@ÚDeͫpK"\)j}h_{OS@2RÃor.|Ș{,Ays|.9sG24[0;[)S܏"V(2,\VQ7' -Bv)TwbVW-%̍L0'N=n]9y9 ' 1%g^pu<#plk ^ @ L/ \@XڭuH( +S8FKS6^׾7˴Xiaˋ hLg#ː,nqk(]Cu̗ u @+ OȲ8Hw 0\b(9TksҊW#9pHXv}vΕG+;s{(@\r;ϣC`'`&t7SINjڣ.A'~3aAkrB#B91'Ӱ0Nf J|ր椓߽M݃}GH^&$RLG@ru(;3,N77n߀hg+UO~^Al^uV-B9{|/n  1-S9oq}?7Pi/=nAq=5uDĉyzo Ie%5b[P];]̽OmvS#3v=#2aGL NB/zZ܀!&O>y/``]Bc [Ŀ̞&zkyM CANCB#2G~}0;sP$&z5;<̛W?N0>1w4jۙp.>q&. }tIa$4 cJDwx<ˏ*2y#^ex6af{8&k(y#&Clhj-4c9~?C|e}E韝+F9aD.,#ޜX1w9s y` {zIZPDO 4 v b+YЀT{lVƙm|9&A s<&Y.v^C;zMjuX](߸mUf@?fGE;:?\vnv;B G{}SL<;41NX^#,-,Ȟ;g_qrosq+RqqUhh`υ>.զpa}~КXspPXڌɕ9(WH$CNofks߮G̢"M-]5륇#1[I:d߂w߼Uc[F{Xhs?'oju`> nJ>a~KE'C-%0q b1 nVpnLNcÕù&y!^X~'٭E`.I R D'@]HJG?:GoqTV[F?.EyTv`Q[+C o, *=F2C0 xoTph0gp8н<}‚n}ܸ yzol+/o+i"{k>?vUrR[_0Ym9ޔd @f?a-dkMyo|Ow(Qۗ7}U_Ytao>QQD )&Cs 0Nx+d)9Tܶm|2-}2[r2iTfܜ:GjHgu"hۢElqFB9YSWk'e* 0h8?blQP1X$3L;wcp9,3*5Q=?^(1E Fawia/λZQ0- q~5{%9+jS=<ag =|^ 8zB`yl^pAO;],Sc'RWZ*ṟGY呾[/Ac϶"#m&MfLSvI0%+ &zpOsy7w/ c.:9L 3qor( }"crJ㜓Қ|j;М~ݖ\_n,6Y DK* zv<1yL6NqߵeD#[!XPlRds{7=jSLLyx^ Q:EBՂIͺ9Dg$I>3gg,+J) "H A~!A$tV V)- JKrpvs_}WU]weUWyanqdUMO.7{ٻzֆfe@@ITt|i[FOhe .=1R+@Yi *Wԋmv H)lYνMK AfJ·a臿gj]!MǙ91O%s |[5}d03;۱Q<ϊv qn췮  k]= 0\TpcEڡ,@Wˏ?U|)_^49[ԦiAi3;@>n J?-sD>&v0ބp,xˉqU#wKExߧ*MIGXXEhIMyv~1.coI{QjÛ?I-BN-&RZo`[a)AS_ڹ/8` 2 wnlI5\05 \P@ U}%ʫ q"S٩RWl0@&ܨlSLobr7iXZxY|ad3Q4&Ғ_nJM@ht~-+ CB9 #'eLM3}Aq\N'R@uH?VBk;*w׿,X,nwpOI7:3tDaC@gZW$Cᗉt4⼧qT@"@U6>}U3*:MW#m A\Vo:!~cNlo=R8.e2`$y=zC :kʒJ}eHPt]<4њid`|*=f?=۟EAu(et>Զe?!9/V1(3_rFvͬ VZJ/ aET7{.t!) eҳBFvG}kYr֔D@ wވP̑CƎFN)Ƶsma2TO|:@Ɲd\k@*|]^?~fft ǸxM'̗Û˅pMHE ˯:}I\c5Y5-aHg]p~K[!7rGo7ob|ۊ-"anhFjZ.#Q,['?׾ok#e~2{/\RYxmtkn0BZtmNq K{˥G',Uzrү+wٔK6ꟴε o@C ء35#v^s=|ܒڤ[|zKzJY1ViKؔvMǺB+=FE p.(cp CYu'I;=I "xp281,ʭʒallKV$Z {ѣ"ԋ^|\n-8-0)/(07g(_$,ۅ p㌸M-a&T!xy3Y8g:?nz׊踶(weuP3Avv p5߰*uJFX_+1ƫ!OS-s?pft/7 `琬$'bgO7o*.l(3WtƢ.=h'!z"dɌn/Q4$m VXtl${ɭ?}?K:A2|qbDߣW1s)}mܒ*9ͽ|#'6s.",d;O~= eWSdL̸eIdG `bD=#>H.IʉDۏj6tգ^`诳oy?~bJ::ƪ3>Ȥ=M+L~Kk}]haO )1vǫ7LLjbv#,Js`fR|5`R.]AUwA4r=qsT{z?H'D>Q,4peɻ"TkHQ*t :p"\}ڐ %0-c)E e#—Vj:7uU(S+T>̂*.MݓS髖}>o" (Y@Nm #Daܻ^v%l<3 b!=Ԩml]5v:ZѪ}[/5o`(Ĥu^VH5C\Kwޱډ%R>-SZrJ~/ 4e=:UC@IDATn< H^XsVLYIؘ#IDz)_=p Ĉ6?6sWXTFy ZIorU$QAPK R˚?oh\VHϒOcwY sį*Jfq~19WJu">nho3K'v"t.:haN =;5k;$G]ЮcE,l*C}J@o4M)8h }pA@pUs]"%ÍI}C 0JDfb(;cT.f' l:up ¨5̈77_HEKKOѵL8^+CN[ Rk nJ3<ǝ^tG$M)~Ƅ~,N$L\䗅P: ª3@L ;Y /\ޗ|59)K8"}eC8.!| U?+<~.m6Ĭu=6&bh&D̍7~wWg@skye*.dq3 wb[󄶊.뜇=/H>Cav6U}EHra7! gV"]V[lgQl(N”ř O2Sm̐4|]U-+=w\&6Xl IPT6wL+'0翮z"3nH=a/jp AG=sGU \>q*fw ;RE=DսvH%BN^{P$f2DMHZ۟gD %}cPxEJ~XI۸Xε?-5 >Nt=qt_[?ܯ Hޑh :!0uG  VfQp e{SGO1RwhkG?f/>MW,y p!?T<M@ùPp/k^:e2]Ymb(%R_|CO!oIhҢ"9 ]b+AӡuAM-yyFܹ.6+A!mEQeK8۟$][crBSWeLHCQR@jԔM Њs^Q QP ?>!o T`$}҂{ĩ_ӎS7\ϜPU>%W"UbTCd`:mW>!%='q|Ssg!aNlj\1ڭ=qknK#7N>f 5`GcIA`r9ə.'%^DX^o3l},ݣbR6&+g,A 21f}llJs_mBv_0&H#e;ML,|;iOEeʝn~ /_0!|G+@SPxE&er-P#$ai t4].Qj=Fq lWd%m},07" -']ny:qMơa#w<b#Tkz5D5jbd¢Xt]_1]S"V qO_L]:o[R_݋1?Qcہ~|^~;O~/+1 =Nxd=@j_TR[ I;aӹE-ӝ8.Dnv_)N_+-,]~O4T̄6~^qJZuqݷsi~QALW?n* |y?Dh1(A?Coy*};)֧?WƧ/5̪l&wN, }berق& *L:8:%?ʭa۸Q!~޷1B[]Юn@h+Fn' B/%Yg5ʩyS2^Tk {>'Spdy+i.,ſ:5 .=Od/\fvNO#~ocd颬õO_zJˁ8w\4wagcC~Tِɤ9{Qd)*LQ&s bA ;,1&`) §=I>wMcqher0ڣ U(T~GpFsg.epj_ H!~j ^<}mLFMR_p XR'Lر M7D"9Ҭ5Bn$X#/a\OGr]Hlal>u &8#(R\Nԏ5O "&eE9 >yI 1Z$~F$/f֋B* 설2Q_b/+N&4/˹ cb C䚌]|K+oUᜧ[qہo\- Wf5̔H PA4TggdP1HW(@elo'\Mug?jJlY1GqQP!q|"ͱlc/)/W q9Nb4f~]Oyavd nX/w73rzXcYtk^˘LLG@ 0i1}~Ny>:ӟgOi+E˜ά-o4)'tB"Pc9cJV4϶u+;B6LlT5VUj&ς o'? Ü.Yj1CXVG;\֬>C#9k*Pcx`'Ӗ\ήQDO+(KcCQsyȴSWә&S"6R[U2wcT-p]$44Kp>3K< pO.η_z]엥W06S/M &Vf )C `"dE!%Ճ ߲nWH%$ \c:e"q؝4|w=ˏui+G@FFnI4{Si1 * WvT )5wbN􍋒 UB߿+ Їp<ԁ5ˑLGxD 17rkcK_I~i j"E:ؿj,XS'O'fm6qx$~Y2~SWqEH<3prKU+ qj^<П b&6pCTV:gRl'_iڎIF p u26.zfVJ$TG[zM˝[|MÒ8czNL i)GDC$5 c_E$J0] mj5@Z_l^bNں6r4 XRb`D; VIhȅ;49eN@O#QCgȏV#vim@,ՙf B9⼧l> 9@(&Q0'5 ZPT}1j羬1'v+gPIF`ʂ eiK\S $ 0Yc0x4w/hLOrRSF80]hKAXgdŢ B%t!#悈I: z͌ VSXj녍\y+Yᅗ`[5 z$ؘlTZ)iS-0d9;$l?>ctbLL _GKnJdA51?0=0}5€! 8!,-k2f ."*IʓR\ZѧKw.i`Pye.HJ 0EG(C%E-nާM.7븀F=c±?m p,OhO8%6bOLY65'?wpM.lUjooo^Rf1+\Is9MohN{|Q>HW*1'WE)-#q7p{P\TArd3kg{V9Ap$EƓaеT5O7[&l&)A}-\1R5Ig]PN.6 Z{2 <+)0GBP}]5̝„\UX0Ww+gR^ E f.V(d!=U. Oy9M"y̗mcI19; n_MMK3*GgN*C|YA%<WZGqSgѓ/'c΂Tn aV7vtƴv"fԝhKr;xIiN҄S‘R:DeeqUd1Y2,õ f8PL?,CCz!U"jPNc麣9JI Ǐfwc] Q9QC)yFݼf 1<-X$FTl qXnCe>:kGͼ ,)g27|_<>F{.:#1`g tF}CE$3;8qp“1|/ofWZߓ;@df?|hI(akAl`8I/ߍ͕P8724P.4kg=aO P,&SgsXOֵY ILڙ͖a$ ]5OTZfP]Pm]o 8ysXc/ZcBoJ Kbvkaq#*eFvsɹl.vEV40:OnH/NkaUcd95m78'9K!= ^:β1I>4%93@̠j&FB.8ܑԥ~Sցw{`W1\sIp0˩w\s}ZllXXߗ~[[?#ר.V̋2|{ |x2ĕE=ݲ T9{RQ#tB;1!1vIM6$ [7'\B`>My0X!82%!;;מHbNz40S"~[JHT1BP G#$PlFgK s.(ns2(29ETI̽-I\_(6q,kE%! ѻ> z;(>E@?_zy^n;br8)1S|鑘xZnzrR@S:GGa 9}4 `m@2dE"!/%(~h*s뢇u-rjƝ-EʉU>C3"ȝcb-le53LMDPׂid7sFerKx=p IFj .15%q'p"W-Kb.ŕwMn/E>bGeUr:n }BBrb"!*F\T^2A1]o_{d/KM&nvG]x["^ń.,z=>sH^-VDPBͮީ*_kT Jyb{!&aXY{;ɕ@KmvdjG9!pJo]D˶!,]Req~QN\֠L3aëcB9 ~xon9v]:ƂOQKHC40g/$kR(LRptk* 9nwmU&nu]L(iAK:cYl,9?Z/8c@bǛ]ۆ r53BgmCϯkNfI_uW{ 'igAW*%1Zxi1^KV0e/Wg˵I#EIJ:N`;g; dvq{fU38$ɠJ;|ebCsWٓ<pDVp\ᚲIJU.ںv! ԩak%%?iJLwHl!d1xq;l$?Au@r ?Hqp7^,BKU޽Lh<-B{̙ ˑ.K#cRgOn=kVe[*8A/"yS Iqs*CVQ3UEwh" 9Y˹=0$B#0.ceHzGse…1.a'_8%[>;O_kRRB~'yd-8~7hl0hqx0]Na4Òoc>).fBN$Q-#i+.&)õ(σm yu]}a廩 f]y*/H:;QkdkoD踫i~{]:*L ɳӹ!:DDTAHoM:Y"zj9@M.[;v+}{}C #u A2y<8*: ׄsښM!vD K7օS_޼ +/'KGHB&L_E iv"L]C(+Wa|&5`.՚bhnj>W1o>+,&.wU4nd^@l^nǢ#U3+[;|G'Heo6F-f'jYoϱihe6Z/5Kߌc hūx5Т)E :ѹ.O/1pDWHΛ^ߔ\}sb"1.d E|Î@"UH(#bpŝ! ;u O'_ ]ZI` ΌS X@!~%/|C,-'lB{$!?dPW)fcAFtX(x+: -@ګ_ ]>anx>KH"ѷ2 "w`;)q{jHLg.s`]n}3hzشXmwS{ڎt WG7P խM&'hHŗW Le[{`@H=߳,Oxyo=W>F~ 2$8J=?ӲBy7!-|4{?v9m VY8|]xLecE0HYxng:oAF+z$H1 _c{-Hɴv^WR!p%:Bϱ老 wcd߇7""u-jYY὏-yi. Xb36HъkDYDPIz"U E8\Iy隝xG@ qN{Kuo(#f1D@rzd^R5O2U3^S9xcKz.)QHidٸH4QnAi"xOgִEc)8_x, b( ",#a\{o ˠ^vK( OPO`cB *<R ɂ~At{:#`b5ԉy~Idps[o5td{v-SΜhn.%bP~aH_cXClˠXZ=vpt~1W⏎782 L^݌+nusX]E#Eu c|q?"uv^gꆨ1@R"{Ix4L٤;|b28k@Z/%hAu!`Ą@C@솲|2=&-*~ࡘs/PE){iJ!Q;AHQ5ύsաZ眐wg+{@b TXCm@Q> ħe2ӖA4+NںvE[ W HQpF+{XaBV|$Swbv?0fxNԬ,^K~<%$J_]l򞚫q{A hkS~bZ e^ܫHL@8]w;~[T`s7L@Phbk}&aY各.dy$  !IDFk5 &+ڼ{(mM2#Lnhcƫ$ ,Fa:jg}B/ Rj0+`uR1uc"5eV| xB0[OE`,m_OfW ܬܨ ӱ2HWPtT3c&@* 6EV-`  [F"('?GJX$!C?α-<]'M>ZӛDwמ,~ќ蚫 )?tN:nh]qʀ1R?җh(ϽW+N񛑧oJm0È򗥎 Plؚ>)wm+#E<苋7WH 0IHMRtA^ĥS}|g]2M|ټq{鉶D'M0c+:MZ@Bdt*}WM-*Og8j8OvjWL"PQ0Q$BayG1Y}(_J(I4JzⴛyكiJ8' a<`Ljj[e!p]> <:,e@-HWggK!}ʗ~,{ {ߺ.jHBnəvKL)bVL8M1g5h˷_U;>ӯ++r_XK>{$WW5q6yW eW}" @lq*e Ƥ^s Rjyrh]WS,baNKഢ8=)_k"?ju\8`&|XȚ$j 1MBCe1}iDP(Ls0g A&)dS[$. ,[gTR'/^愳Gr>6qVcdžCذOI><l %CcNEdYF%D!ӊ&N{|vg9˘0꺆:ԢL zi̽H?;ߖkRr4'ĵ :9~[ 6F/akJp9yFF,'q=_97`ZW>4xxMF30˜Hb}ڿhg nXo, _?{;ũOpBKwI|'}/ϛMb1B-jݖ$n@Tt4>ds+?;]Ӆ%X޸GG/:_?\}Ez;ʺHi"@Et/>2$)*wu`R89srb|\g_5U6v:MS _i/ WY5%EZw!yPT%}mEĢs-z7"jgʰS :<6iP\fOq{껟ɘO/I<&X˨+@[ځNs%ee^!fU J.%L& Ri\WB);\vM,??vn+a`A]=@x?w+yylb\#l90\µrnDAE+IN'cEaccƇ-%@}/|/g?xbF,oJOҚbQfu[YؕZL$ QM_%)_n_ڻ ),"gfJܿ4lYYz0 pMSb x@h@m,>n;X Y6|8 M\څŤ >uYsw kF9AgsV#9$,@5p;E] /UФx}pE+0P`A7J?66PEuwm|[~wNp]%XpJE8lEek.?ZꔼR{F\iլ mZ}2;֪IqYJ D8طݢn+B=R>E dDEpBmsƩ@G];giSDɺF wEm3yG^|෰!E /{X'L￟,{Ƒb$61k={=42q29+&@"Gv?7dIn0{(3aMQ"qDQ/Y_8?3NJH:-n1d8g+ |fGj%Q93 ڸ(/s?D  JĐ>lY7q4;ǵId{f={stS\)΍G!d;%c6eOd&&iIZ}F҂Y1QHioxV}45򀼛@|qAzWdBM&_ d~fA$z``|-B38W=טeeU9)~?o:S mD]':^q88v5SfHW%1V8͒\FaWk#"|B@FY{ J0 Ϡg5O EeۯԨ s;$¼Pt@D#5D6*xly9}-)R$/;J pmy4lO1Ǧ^Hf+lf_""rR⽫pz-}kZ>_mb8.kmvXTVKwɭHH16 sxPNDPH+4}ˆ &jm֎9ֹ] _DQB 9jxZ;wQ Шv3䊖y;&*`wrbIL1cQV&iW}ÆEIŴq mpΆ9KZaЋԔv}:`[} :a =h5ɋ)Cv֥t4Jbj} {C`dTg;| /ל`yQ?VeH':|S{UduBJܷERX}]NLƞ+h\zG7#'dk@ۉjLI@S2BZVT>.hxE 9,Kp+Yΐ.5t j <":4.+P)_C=ppNsGeM֬Gg/8#>hhlC=ƥDut"@IDAT=/du&?|w wO]6?wz"(hs#eyw'6LI՗>~wg쾱{` wFUTU>˂}Ow Zq$4"ӊ @S/$?|ʁXvl\8Yq# Q(cum$0FUp2H .V_pznZ!S \vZy*_=M{ن`A5nr? Wmi<|C+hR1`;p"`շtgss:7$㼬c! QxUyeJK判Wsɽk>Zʈ Lj$+- HiFDs^dgH·͈ʫ|AJ94-H.L+1vE׼/B['q(Js 7Mr[f r+ DYJ,v^ʉq`S!Jb(v;P?9_Ig_-Exa8.eui%/aT._%\龙;=[6o_#ɜ 'Ű?9t[ W8it!p ߕ]?":63\ywHL)T繂DӐ.~=:s ck`bgGu[SuQ@Z!n쎢ik~@m…hcu9]DCXt/LYHL;򱰐脘hf[;;38Ӽs:w@Az]1j7Soi"JS>y++0^c#`cz?o酋]S8w%EqGni~4KǬ<z𳨖 }&=!D5R6Yiw6TͻW^vf]erkw3ܖ <8GNV\w>)EA X,#]DG@\‰vO`0̃nEh#m̮J1?Fѓ'ae= hU? V55тytsn >!|cw.{)0ŪSPNMP񍩸'G B L(¼* F@` 8!&T [&P0 Bpyi }[o+L$4#Rl.ɋ_ކ6q$j H108$(3asp$8H 80*z'# S͏%u_fNzHx~T@%8"]\K﩯p JwVG]~[{kҭɓ$~BG0$&p҄6=`ݶD;b O }+# ?iܴd_\_ɟhY^O3Mcz c=٪&Uy iy1j\B 1T܆Iw>?(.vqz{q 뉯Q î?REȢ%0V`Fb=$(RvBTqE^|aE2NR:Ndt+u*/%_@LVV衆qcvmyr$qKB5/-(TQOhNH_ v++Ԅ\3jpN ӁƍG7΂xꂑB!\~NlhZ^[3\A!~Ǽ,qЕ}x}oCcoMYCM (JX9\u.%YBX#Z6HظXP 5CWd᧏W(:6h?dYX;xtrC.=pcaPlBWP{;Gg$95ҤpќDSؕZ4Ôg0l]_"oFcGPT/FI"Npa>š|] ; i˳[mY;㢂F9;0?[7Jx"t鱁 _׼1[ϔνr|yߪ~Y;~]M Dʈ*w}_,iѡ,L?UGs$-BZR1MBB[K.q3 c #an2Đ9Ҝqp 9(#Fpi |CB¹'Pq"bMNo^gwy~F#kI8boWҕ\%g<bF̮0!JTL/;"8]AY>{;:aT(e*g]b_!vBiYL6Sa\.^I?b% RT$ڎ(wǺ7҃MbQNx8UPSzL,-rrT0g A?u$&6$p8B(',EW8Mt8`tȥK:MĀ0^bEpnXghO:-s[5oJw({jWQ|W>÷9yZI[R# !Es~ Q>6«]HD؏+ᖢΗ6u)'O )5&RK$͐OXW?t5s xT2?dRƀY,z ,\Njr{ XϿ0kH5~f<01PR ,d.)89}cxe@%^M FYyo% !5WIRQ;7.Ѿ3,*=IWȠ|clV'AOEs~Q-q\P,sn}7ytg:NdKx}A8P6(h'j67~(Q;D9 6.KvO{3,H\Q4ɴ~,c59jjR2_ oӵ¯ЧĆ?'z9NhO9_/}d՘tц6PgQq0'`"3=~]9y8I5lO}±!<=i`'QH cC2}sgA*,ӝKFAAy.A<)\wД߉$03 @(&F@ouʀeR Pgcјȁy}xw|_7϶ujnvP0&>O|418Q`8?`wEXqOsNYjݨSb8c6*Sc$EsUe)>!#HoGϼ T̛L {I%fa;C9:4Y#&Bq {֤AG{J\@ 5i,O҅7 @qY-}j۝wNlhȬ.-f~G5cgGc]zh 0p΢w&ɝ_ r<~zN @AgP/p C4!>IS *,Qi?G"SO٪ՎiY>ku^w)UPxUjoba`xUθv֯6r*pِt} -ڑj'jjQ%Isb~+ypɢ(R߀~r#_hJo:ő)x욹v,A]yB%+mT:sM*F@Cwz1v$#]Gƒ)dX#v~ c[_@gN H:r Y1t#z({@ AnD_U(UCy%E8s17j  LtܨX'̆ہM-0}I|t,,,~:á[_2Ʀp4 ۳3X*Ҿ}f \;ᨔz/FIđX1@#R>cdcGin5Ya?jxS:{.}عĴI&D{Yp 鎊Գh-sAvk&OռūPG3g_б#Nׂ13׃}1l*̝,|9zbps\,e l-9-OI#cCcZE]"8= `zރ2Xx紮QmrlOI=qCe:;tN ώ0*+;GP(Tn'@ -QYuZ7q1;Yj#.7 L1$U;YTNC|2n BB a@[VՏHWkjmJwB[J{|:+qov E}=ΟyϽ.)6<e}cgheBZԿlb1ygԢhbKD,E!s@6EB4H|ED uB,Bd+2)'8E("xAot,"v[ӐTo!Șݍ IwECmQ%(Qe3廬-ɀ>x@;;Z4em≯ LSJ\";<oaF@雗՞Qy_P8hƳv2+Zn^|?u1!pS 0ɍ{LePk{Ll\!0nHIq~MOD? Eş0RE)41)NI&x誔!jA06/R^v*!6gBc((*Ą8,+FpY-~&L Qc:aczFa>< ͚ce%S{0]G,νo((xx&O3_p@<]3`J" qAfMӣOcQ)Lm&t1МƁ(#qgIEy ӁׇW},"?̟*FX4E'62}JgOB'kN%Ĉ-O7.K%3.4p=(z@J:Kgpѡcy.)'",(?]M:|7i!g笪:yAB,{mTtGƌ?yFn1F[]6ȟ0[lfQ(0.e~=@(rfNzGt1:NÊ_tGP`a4_לr B07Y__;3oȕkݭOa8*z}H31L[Q+ DGCH(N|_vҦ'ێ$~bBH` !X>O/0w}Xy#J/3W7=+%1Vkb›".Tãʂ"_޳z{6ΦgCœDX[}_>S؁hXύn/ԃ%tm䔵 q 1!20#|nl$3pd&$ Ď2L$ UX MPgx'PbyC/@j :QQEXJw#4ߐMbqͽde68ָ̢{2B 5B =vϖK,bGD?V3C 2Q^YNA:pi*N("` OUmr 5۰B2ljXΉzx9\8;$sBh櫭2v{߃]%/>p3.e y闲oϵ&Psc #r%X%wB :L)C'cJ_<5!s]Y&D` }Heo7R5qz .F'4ᗧjU{Y %Nb;3ܱ<BfvJ}>Hfy I^YL=UcENT6ju~;?w!X+n];Ip~X bXGp8_}ƛ! 2"q}%Z"r7 ^db V\ƏY$`PN5B#€3+3~ß1`0H`Ptk+66,j{1@OfG<ʏ4_50#D!ew Avd/[TiXǶ'sЪPXe _̂ZPtl=<s'FiCL|A B @-õƵa$ag5~OZp9 _nWpj >`7G 1 U4Uq9큚ߕD~@`$dB0O{=E{:E(Gϣv ,GO%v"uf7?Ζ{7q"Z}3,I[YZi O+Bdw8$)7dHMbL*or}$XeLL_nY 7 v6(z@BScpiҒ R:Dpt_@$=!d套{7O?_kGaYw^Y|7Kx z/Gac>$?Cbr8b%C-Ş6px:RIG8]'ņ1 %ܟP SayOvwVI.K0w&Г'F| vOrfg×Q-`^`<0b$T>pz@h `ua~ɰLSlbe}|}t=KP\@(ZrDH#?ԈC^kZ6_32Td|iP%`1+,ᄋ61y-{yi9Xݸ2}ZT &0*$#,iSc}Չ 6ޱqҙ/>ץ_8֮\r1bF ~9[ɽ{Acˎ OkrN ,DԴacfdHxk;38[2d1y勁|hOO_-=Éf,=*E$Itv6mg>K̬\A[%ix[STRf`="/(dŕLP*VDޛ !R^XJwkbG"F*}ĕoٲ hK!RANniQ3M>W21uJ-N*(_03̀Mh{%׮})F L\6ݶphz{7OFd+V@#M+@l8+vF? sv yw$cAl*:[1bFh7%AZrEoƑM+ln{jq 煇 T@؁Iđ/Jqol['9|\U´E@2n~#?`FŃ#uQ-\RH4څq ޫzNyS9{;+VXkF\U ([u(IԳe׬K-%~mΒ2J՜(|o0Uó MwD^ A!?QO~c-5w 2L7FD,T_Df?Zyz{ b&0c5&SU6ܙjtJm|I`@uwL@I~&0'NĻ C\ |CDIˋ/&{j.:M}1#^cW9 \p ӻ#y{ :xDr'熦&d[qnr0iѶǠ!Mf)@b: +KsZFJ Gd3rPRBm20%Y~`> ZO`7PmԤ %uD$s01g3` W.垑L}U 煁GgFM{d^RYsDF}>{ ۤ~?CIt=s*qc q*f01BI~B8x~~/y[eubۓ·`ZF" ?ϭ7"EiFPX RWBm&ns b׽6rS /Ti*[`YR`&@7gt&Y+Ou@ izٗ֜NT:YPFĿmMi ]vC}.5U8P&9 4:QctB9+u(Igg@H=YJg!⟿{-'DBřJHN%4jᄡ1G]"ޯ=&eyy]/ou0?BjE'D.VS4z4, khLM{6V̏'7aMX6Y|"HQayXjhYl)SensaЌ ^bq3U"!C)Uޓ'*o;;}(lYBbLN ]l#y$Xd0A3XXYP/?xtpl G|N.@UF,¨_Jjy Dܯɍ֧Vq]E0:%MUbGAu .~ iI+ETB? ӷR$@;/5h&3Pt?'z\om=FwJʻuC 8za׾5ܘsB' ֌z}(/ waev P'pFj83~@[VE".~bd).8qbMLqi3:<8_^c<]|pى5utEK\:\{l[:gKV6iYUuI_&\&xL<׶U:.t_Jׯ{e1JT1ѯ0̎ i͹_A>4qR/0O#_7఩м4whca4WS-=˩L0+KA'/=kkHo|A7=(MUϲ 8`s*y!mbl ;~l(h?hNO [EëYQڽ?]-]+@ީ:'=Ӕvy}e9/ed]%˯$T_x\bI4kt^'%ڙ_6};)[V@ Y*Gl ԧS3\WHWΨ],8vF,[d CG`#0\>}I63.&:>s㢏JDpr|.wT˹?zWg?'?JPx4zcTMc7ԌW2ݦضRO969v[#b)mҬ4Dtrq#{ G@R\bNĤ y,}H߅Yof3_=3rxtfeY-ѝ" m#OBS40_%-ܼ0rmgGE\^H%,Ontd^^58<| LFG)|J#'S7dBJ‰`Hq$zbN@Y#T:wҭdY 3O鶔OӛnZm?m\F.ISPG 8?t:JJl6UzGV3Jj% 7rÛf=PeEyz";X 嶳=i7WHhsmH }L^r<|rB- 2eҧb!y26N;r!kُ03ިl6$^3?˼1nOwXѷgC7/%}8hvr[m@e[4*ߠ2k擝#s|8kXUiz$>^4px P{7(]Plkh6F)Lx8 c?ù6F7rhZ_Lʇ/:ᣞoܐgLZ%?O^~ɽg-qbQFkr1?D$$dZHlG&^= c Ňs;72py$Q_/zb@8|r1nyd:9<M%F@Wx%*/u.zT1ޑ$xD/hI*dk]#yބv@P=lW{3%,w:pOg+r'7?Xf'o[.G$w"FD"b-&s(^LLcB"c3=SW_6nwLsy3ildb*Ӌ_DsC_x"WF WWt"]Tr?SRoX |s'Q֢_@3{Hm"ݞvҏkeՇn.'[TdB0+ϓ Yᡘ~m\lnz)Vk9Wu4I޾Y=C}Cf0*0,Lf*eB[tr֌2NpV< PC\,0.>qLHMv>1 @Fon.#HVbXƄnB(mndg!^92uȥ0Q /6w$ \}4[0>.nj 2˅,8KV^,VSu$'Gxzב%I0oke"xڀh%-I$#^R"mԶ\aoDY9c?1h@7wv~1Ԙ1/>]2& ۘt 2>-`ǿõ 31,ؚ_ "/lWk(IcXze?n݅\oߎQbq%O$Z9ch\B!CB1vkjA{m5P6"7Es3jY972fignP&q1.d񅞟hDbd2<;;) Qs]bRLa}Eth\lX N9jltØ1"n@߳ :^6=N"^Hө/$"L~J<"@H\zR0+:``As~ v`b"}AԃwamEy>N٘MlZ|#m@[? @%7p$u-z}ø+&zbMMC"c^6׎) ^(?b5J5r1 K2ENB`w.(P7ޅdZfY@ t`sW (δ,>=pAcL\݆EC/?_DC~lj|=b)nV]Zq`z9@IDAT4' /d|rQfrs)? K,81 ~u5x)PI%k  Yvdv՗<˞?Spo_ ts.1f@O4I1z .LDL+QD"[ݏ'ʓl'W0,v]aYYTi[`40NLvN3Nv:+_&ˏAcq(̢hS( ݲLNGPd[e`t^VגAg諓DbM!:Qe~Yߌ&&kOgIZIPbx!eiP'{ɂƲ#9Y#!AхBAc@E{fK P nWc6n`ć@!D0Ri,{ x}k:vC/_ǗKd^98UjLpRA%f/7Pƪڜ<l K6?g) E.Ù# ,7fjZ C:$⬒%X _7|YFde6ɩ.;Jb@#*4H/喾Np q,7*}c"B@r{_ ;o ~θ;h)sOJk0 (p<-; 3],sWQiK:CQW<\;.ebl5O1Kn3w,N0/I~`.HWH4M?1OjcyeԌsO988B$2*L3]"`!oՉkD kvz)-|(WԢQBv!Q9"uqm3kqxEl;x>3uL &႘h(Sз~֞oR!!ܱ81dyј%ƹϸ' Q-(EC`|a9N+#EA{i…ݓn[i-b}65y@*mU2e]Rzy.){1nS2L;/*S 4cD}L7G?ۑ[}h'?B w8ޠ|OOՒeq- 2oꬬſQ[=0)nr@pA[KSRȲU^D?E hxKWt܎sDȋn;oz]\ۋ*9de +is~6?scl 3kmZF 8eqo9dz<HTs-)7;Rc2M76%~ cOLq+t`5S栎Kc!~/?4H"bc(C.}%DTveey;љzހrǼ/7D g^ gw,nFO(2nұY evm$v}k1 ޏv9t}jjL"_k,ЅccrNӟj$dKQG.B7 LnE՞};Yz zB^oԐ7GNS3/$ލY V S\P㋣%ߜzV;vn N72ąsRmWŤ*d}߲G3=ûWw:chTo)5D&Ȟ;\s'CwF>wks#`6h4,MHeCq?{2fN'A[qo).d_1 HO΍'0H >قD}Yv)׈BbQ' p$PL7+pY %86WNS&H i(kOB(-:]K\|5 JՃ|@ fpܮXQ K;cѡkw:z/hKZ\=y'LiV[aJ՞dOvCH >qZN4IΩE[N傽q664c~MO .~$gL=XWOˣ6׍(z゙+ آRqLx :s WB?aϲmNg:I NH-_h4&xѶ}(trߡ$0R77\c)W~G:vAܰ:5-S/I$-$eRU6iI}Y(te>Hw0߃psK:<GS4acvRщԟGra?3̠k0m?S/<,WֿH*3ߡ۸G_ D+}d(lN~*7ӟI 3鶅6,a)S0Cy@%ň|;y-1cM ryLjLQFсOu;2#?,OK9g4m/#_K|7 Գv^d,o9a;Db/ f@&x'k){FwI^&jK@W.? 5gŰ-``b^ĸ<.d)ѷenǒ߈&b`E|eF3Q u~}zwMBSp̹r0Cpl6 "tKgwˎEDfl{o,03@}c?Mf)ևCv8c#T]SY;f6&"U;>V!8)e츀i| Gd2۟"t nļ1v9kԉ͋ˢ2ÃƁ9 ~R+u{?. cg Rγ@ ^8>f= W(cIu HucnRYY"Y,sƇzikspz4a Mf!Ï n‰3hKJ/KK3Ҷ~Ҍu;K ˞N S_~7/Ň78B,}?L[4@\#i;~M95vw j]sm1~ =v|=wOיm4& Ϋ/ln`6H?qj Ih GgffwP('O q|@ȩ:sc¡Cy-+6݇aE@mxhe[~'2g9QOn<|D*;U%:&Mmq/ 3ŰxWF(8Dz^iWf^W*n0@r! D֯zp2~tH+{4|+Y{$Sv` (g!śS"[6cn|_&s^r+fcžLohaa% puƼf(wm=mv%k}'߅yZ4} Frv+!!(2^^╩2ѸM 3~`r̸W 7%9W>e1`tj;w̙w^0MY @Y8(&QaBdP\ŀ%0vyM6QDp|羽tANV0+/'w 0h9 EuK[ZDY/v^?{WFu7Sz@Y؇Œ)ubMS hN1.;T{7Z cWwbXDsN oX8c)x`>xof:؉eGR'euGL<\EIwgq?.&u/~CgEx0zgs?1#Lb@%!\B/Ǻ C$O"̏g m‚#d74x6t?=ŵ;ӧ-Kk6p[J{7Q|rȟŝ{Ns'Չh 'RIqw_ T1_볖_X9[+Մ +/tFܥGO3=G&/_-.Aq|Q*<寈!ų"8uw{RBI[pc0b8n$7 2F ݈"hVS.E+#[PD΁Pkdrzt !MŁ#-Ox)R%пP6U뉳"56ZXzy?yBp8/Õ;\_ڑ _oF},p$iʊFeqSW8 է-v!n A0m9?3pi1s\NJ ژ9 d}"{mz 3x+vPG@[tJԷbLfhKT=f=W̹/Zͅwb8B9SP Fg|H9SRӆ'/DpA\1164өG;Fpgw(s-y T% "&ߊ1u~\  WeWn3qA"PLόqq!eNzyI@OaX'>Tt. \A~/`pу Wt1h6n16j#}2E婪MYI2fMd0}xxJ56accR2 6qsNJ@-FhcSKHLя0%VFbI,2$/* =?7=ދiݪ'ÁÃi>b7eq=?ќl;+ྑt k 4I$;nD񔉴ZH@N}I˪'G:0YN|qeb gpo i 2c\*FC@':]yOՀD@gagG."~ d^؂^rJxsT#AWh71]~~n >qKHPE/^ju}.Û+6?<u>5qDoLjeǷ&A y|hc $uD?%H_:Dp>j_sD2ՔBv,r) rhdNFAE6"SӺ\8/ +v꺕u-d6*e5r vBdI=}l-%DxVGyaS`|s c U0$]:W~m`1&wr"^#p8) QYMAS*tX~Zn!\-;n `;yyZۙt2u}䵼+c8g-9a⢨o's'M|sOJQJ5qI=%kk}7 0VD8 7k:f38cPyOݩ̹65W͕J~+3Xfq5\¾I3G82 I˖o^\K+s T? W4p斳k~9 [q߈Ob:0 ЛXMלc}],UF}kC&6ѕUspRxi{bBXw7y)^ߒ@>dpZ7V{|BC`vt+VLFvІL7ۘ` g (1i}f:9S]¾ 0Tu;'.gКh1>~0~ q_B_n@0)ڌ%o]3=y0)~POsq:-  t[Fܯ{")0\y& ht Pk~W[ەۚwvnKgu`L o]J;.cŖ}Eܹgؾq{&}<Ǩ}t >~߽+WuҌ` Jm)˖P 15}\+%~7Y}-]굦h< htX8fG'`kI;GCS3~Z0giӚ;B!R0n0 ^Ѕ¶Rz彥q^ߠ],@8@†jvakǰ~! &SmBjv7D*88׽h* KӷIDW܋0`I}c̍b_ ,b}) [oqG[~#_Y_MĤlgϖ&vvaٮZ,Xl D2(oL֎nwk#gL4(Kz<֮o$sZ(Wa.xb.-XpVǙ겴1zs`1%F`8(!TR$Ґ xcƱwp}+ٯ]K8Ac'_ط7AƻmL?dSǯ&k9F:S^D#p&ds{3ܨZc$"i)g+7' mfcTyqA5U>4ˆhppG^_|LHPHGg<0&i\ "QaCdBN&yEfO|>ä_v L3VևzaOO& ӷ>l`P|[{M9].`s=oS@Cvڊ4S ir.ie{ױ T,*/=ezO׵ [Ɏsnw#q`5yKo$CKt.ou۶Y܆jد,/fwʙ3mӑ*k6N~6ƴ8"VᦽAawDUǓ$yЀ9Sy /A dІ5Ieϩ0te7HJ7( m ѼlzuBGT'u$q2ʎ2I@@7ʂGćGD1_X戮O:Mfz%W집|G(*qnZ|y6eo +P2`CW63-[8j>ߑpM{'!)Üd,$옧tȊ&(Oa}˞r{U旺uiuax xfD}< 2\>s@]u^rX`ဣMo;@EJ Sb4Nϴ58F˴s5?;Lczim!×͍XYl^8Gp]=6hJg0\4n 1#bFDnJ5@i3f\/tCr8XZE,Ik?. ޛz[z?T@ <`7樎,3vE.ץPw~mu!.Ep{"m$Vʂ'ځM'o~dbcUdUJ[CQGl1Dw(;&vV…:]43 GW/>_}# PFb]!޸ o@RdG nl:y,>- ?xD+b2IBKbiau\w]0 6 LB_Nwq>F,6FꋈXc!gԡdE#mYS&M6\3>5n9> >gsl U h5Muq,KͤbљǨH bNg>sDrfT9 G͵k"ݎoBwI;D :19Re4ci|Ί֩])>?HXw$#'n'SqQi=KDTGni:A̹,{6{I-_ɳ-9bF"wv4s״Da_uR]X*XmrA#8ғy̅ 陭l<Y{wan4~ND;?ec.27w؏f&7 3o<&5)5k 1`Tn{Wot 'ȔogEY!_]IG o\lL3kգE# B~e' Dw3ϣ?`o%Oe8##2Q=Vk6!VͶmYGGr*]5'U'5l L9 wCBUP}œvt?cFAׯ[csEqz/CW{_yǎ (עzV(!0J_ ׂE pR/4ܠZk̘ eki;Lncv'Lx0zY "3Pe`a @x7PYycqܝcD 7⅋DjqCqvк$8[ZG R/%9 .]I\>w107!LK ؛oQwk"Q!1\0o,ꏥ!bnYC'?:HY_@||d`J D-q:rwg;7I"^Y7c,N@2>$ ^NxM6KD`2@ \Mp`)&y|G0h_'@:pxZ穘N؅UǮ v awtsikFX{v2Cj6H6ԑeF]EtA]^rk!CHit0tp0UZr_uL@,=4lQ65?18M&r2;Y曍%qwsJ b]]i21 $G.8FW6~261`.wA g?qɛDL)SӃ,dgD'R.8>y5JR(k{"g(g9p?r'bp/΂ OϿ/ecx.Jh4 k9zҧ|&GGɮv0q:X9wI70kC?7‰67;{.Kys%?a &bD)]0;'neVQM:+Lq?1[~R,HYbKӝN;I.Y/ucG.\I@5쓃3G0$1O)8gx-}bh:hZ}Emi%o@S@N&(FBFc` cr1z}x-(vx`NGb9q<|jn-&s(1eoz~W?կ<1cտ@p =X%,#~+Lzw ɥfЧwzQfx:|n->oP:]ؾa~4(C`B|ct^[fa S*j?v+,@AZ xCY0K y/(/.e|}:40RE".:̯gU\ Y&-4f3ēKs[P? $񈇹.co:ؙy7aLi}_gs%*`$0X567ێ^wEvJ<1)!18 h<(}** bu&|cb@]Ddj5M^q G?8| iG3?h[Sݔ9:. z" 1J™!xQ!1T^Y0*0v ṬJgɕw]8w8s&?ϝ3 m~kr>`Qձk 3ʖWb83& gPa<ՙ.)" \&Ŕcڅ c mL Vf@a>w^xu1+~uPOW[}]{ECS~AQ2PLю}d$g~Zݯekp[hc]ksgЬ㬜 pb<( };~L;"2+Ҥ/tq#݆Mk/@kBPڣ~2F,BML{ _ iXa~fa"sx I0Mx#!@}L gL1S! 㰮a"pQv[:L\EY WHs9ඳi]Tj85s!€׬7_",]ʋ<_a}`Y,k:#}Ub[k{'WP`0?Y>`SwΈGpz:7敎Ȣ@fbv4/iN"Fw]lfu:UjݤDgB?1N"ӨD.. yE-?zy%1+F$?neթ|;]0IN6S4 J3%e&}eѸ|<rIְI.jFt~UvQ;}O+kBtva&{>1 î|nV_ =Ak7Ơ淟4W[bڜS[XjFnu@ũ/-R/xH"vUl19=鮻(DaW׉s%*T?;kZHzX]>WW#Dl\{81 M0O[#nshK}>o*Ɏc !|;Xa__g(̅_i8T/|0hQSQ6'K\a1бW[|X.>m_7È/H(G*Fsވ T*Xxp኿~?b_ْ?\L8,݀mI #' BRʼn1̅o)]0f9+CV1thqEʶcҫk9J9HqO$]F!o:UyU& tF r2~!"믵;=1l1T*Mh]oe9}cVJLgs}[XFRG x & m/یN_w{\38Z=wpO\Wzcd Ǝgm@Ew  nOJooi BLZ 3UF,pIDATΙ91`#k ;,NWxX;ps`O[NE^hFg7o)4nkGJܒ乎bA&?įD[|Y>19!G@R5S`\so/a]8ؑ=g֨&Ĝ?+Y;["0^%ygLV;,:>F2u+^ _;Of$ T`:MBuGɑ㧿: v  G61KS.(3zoֳ3  A.Tn96@,nQxt< ICM9~-R ,Tw1vZm:"hD3m7 <ɯ&}w-y1{Z*dAWQ5NoeVO|+Yg"6b[0mrw?iOcK`bBt7qMKGh;0"y&N3u'k6Nv%Ϡ\^p:p8/ɮ^0 zPƔ{m`p"\2`: Lsy(Nɻ, v}y<8 YУ\##E S>:LT=`MΆ|}c-2/_E5gwؙwfRY=3;⋀§Gci.#C}5R vB!pU0*`F8:_ϒ?Mx+G?_''ϘSK4+$-Hа6*F0ɼ $Wl*pح~a@+jo #=>aRS:3$K[㠺hW@'hK{>u<;4B>(K(k!_p//5wާk;r<. )|'zH˝ ?@8Ca`lSѸ\h\AΛMn st[ 91=2aMP%MqGN>ϕ/!.t"&5yY~)D*~ (=`ƍw vr_^1 3J{ 1w>}a[I~V5|>N|ҕP?#vKzڂڌmqMIm>3DIxXD2wc";,Ť3 R-{rV=ʖWW0P{]'lt"E E(Tgּh.!8qD?a2`Bz)!pe1 cnПH*Tm)M6U $ٓPY,%1 28T(o,;`P$ "eADf7옒TS?Fd #YǀLc8_Ғ/;'W _@,ܽ8Σ:ׇjR*m{{}@/EvX@Dߋq/#Z3܄ؔ_1\89-\[s;huK &a4LRa {#e]IDvN4XC;ʿ"ץ"j k]+ m[:/ M!U,<3gܼP * Tx03uGBhnˤrpS#~a)[G[_/ y15P_* TJ>C x$캶U6^) [r2b8%LLKۼ>)u[ԍoSePԏK?T0Pa< ,pa}"TT4k3 @ an]ԍqx܏x}o}>c5[6Ҋt,Ϊ2+ T Pv Ri BFO *&ow !Ub ^z7MO45okyK?+Oi`q+* " ;ubJ dUa ,o;},PL! ~})O*& |[cNb* TP؜3Q2Y$woZ? :>*.*{a9_U00Z꯾1>^D' jc|sɏP@vQP.34U` #oE!"En۹vETU`&~3#0a>EPA pUf\FtjW K)-e+tފi0Lv`&+πe\ū00RF_~,.{M92;5ɀyclTK.R.7Ş@)O* 3*`{V7d1k HX3)Ei:Nt90 ZXCYxkzulPf{0^՜.P9~jsF41~w|,8gYw|Y0X`)| E˛_ecaX༮W_WcL8ST_+ t^ IgU"ڦ9Xb) vSL x@=1-p-;~Ünl4(vs * uV :ZI!wsؘ5Ʋ/`鰪r3sw!EE1R'nhe{lQ-_øe`CWEsv^ w`R.A#AUVbr1^dbhδ(r!J,X,\ES9 0j./= èB@<P%^fu},yyS+gao@k[þ(_/bZ7OWrג{#ɥJSa]l3#BDqɋo}X0YM%vW}X+}]GG͗ηKv7Uw[%Y0PIQWR챣0Î^,F"w(wZ j?yrHDf]@׿90?ɫO* 1*`;gU3@2ݯp Z֙j2S.z9)}~qCe'Ɯ3;.>PgW*+RV05*kݏvQ/&3'zpLMr~ -cÏ~<;-Ni0'@تDTP\¼* =*`h}Y>K.Ů-m_ˢWa`0P\,Vؠ<3 M@`[a~aܯ,(ፘ`XTߪS}000vaAvw/fAYU  uhiw\Uo{g :UЫ˗tg>}[aW ԼoU+ T ِ;^%wSԲjNj -n˧nT* `*m! I]jbgsƬj 8 {1Ԁ򯲭0Pa@& 8aP$GLysn0P)v*M =c E=Qryqem|+K Og危{2 "WA_J1(Z)TU0 6r8;?Kj٥E ϔ\|rtsSџp6j C0C|O;g@%k(kju+_H>1<7mom̋B#* PV&3 GwО<b13bf^geZw0 2 yi+ o-f믿Nolh!zjd1zͯj\a ŀv:y]]i['g h?,vA-h\(EM~Yph `;=ԯHIQ4!1g@h1uWsIJ&IDTob'ɗJRvʼn|#֪"[J'e,>I2; ?]U2bM~ } jw~BYǓ;3]*U?|Pj:PՒ??JٟDmBiٔz00Ѐ|1!n3 ..Ӳ{g8_ k;{\oIa7pх|LZ_!8ע/!%ӵn K΍g906YK~T\VU A>qP:Y)V1!δt~awaik$wI;>Ģp p! y bxu \>;6.=%[6鯕cX2uGZ:zdSO[c=$!?|*\>r[~_\|7>,s8cII+v<#Ogq`}`>_3K?n6pHppJ`^G8LܷȧDžՉ,,֣V5ҚHz&LMCϠDR~,8bϺ91?T>IENDB`ic10&PNG  IHDR+ iCCPICC Profile8U]hU>sg#$Sl4t? % V46nI6"dΘ83OEP|1Ŀ (>/ % (>P苦;3ie|{g蹪X-2s=+WQ+]L6O w[C{_F qb Uvz?Zb1@/zcs>~if,ӈUSjF 1_Mjbuݠpamhmçϙ>a\+5%QKFkm}ۖ?ޚD\!~6,-7SثŜvķ5Z;[rmS5{yDyH}r9|-ăFAJjI.[/]mK 7KRDrYQO-Q||6 (0 MXd(@h2_f<:”_δ*d>e\c?~,7?& ك^2Iq2"y@g|UP`o@IDATx{|}5{ݗ!4PPPHJ?ZUUUZUBSD!@H G7}}m1g]k̙9gf?>;{u汿{_ֽS7zgxIijɇИؐV&Ͻb&~?ecc#lş_ן ??5.ڟ @r l;­j:-@#FFAeԩn7t/O|*f @ l nuV?HxU>@K 3Z>τ%=F&@ @3tnnVjG*}: 95 |ӟ ?f&(_2 @X8rH'ڶ %L"x򿳕/ >_ @@g:kvvl!@`UiFF//Oɪ?d @ P(STt;[j-k;q\~b/~W~韇k#n#@ P3^*PSU P`tr蜘W;|W?%NS>xFq0`@ @@ V7ND |ڊ'㛹w׾>OIlfs @ Pm VA#nw#:9>TJ @R@*u:OAM] و URx9n7W^ /|+%EQl @%0S eNa  \݉qW_7x@ @@f @ ThiBͭή;w+ObR!@ @rsRS*čn9]Qx󭷮Z @ P$ (@ BT1w4f{s;S @TKJ FڬF`ܺw{ @\&p@L98z@vwB/ua馞8 @ 1>v!@ 'k[!Mh!@ @V-.Z n׺*O @g/ lo-4ꦆbL @@^yIJ  @C@`$@ @+X1-홵jO @`}볗s :5* @ P"2Fj~B @U Z\~t{ *O @`Mkm} @$ &xW9 @kX L.pjã3? @+X!L <>lã& @Xh%Lx3G6)%R&@ @ %Aq:A8h @ 0LLv"L~ pĉc@B @e,CU p'wzv @.dzV*p~hp2#@ P::J'@ (U), @ llFQn\7v1FCЁ}l%@ @ @xV؏w ;;gk3l46|xxp@nkh @K@`]%0@d?u;ЉCFKZo6C FX&@ @ 3 PAV`T @ \Q /vBp· @XJZ> ` $@ PHB6BG@|B @ TՁ9&^fR!@ PvDKlVU"@ 0d @ @(_)1L87 @TN@rMBN 6 @@K @et[/ @SHl P=w^ @y?2 PVSf @ )1T @V) Jmy @ @5  ^V)`Ujˋ @@1.JE WS)1 @(e)49t @' P6U# @ pJ@ '`@T @+ 0 Q22 @U@ WN(l"@ JUjˋzI^ @# PP @ 4J @G@8m$ @ @`iK08m$ @% .yX*E @l"@ޢ#@ P6+9 @@*֠C @8K6PVU% @ neO @ PZ6 @ @f'R PSx @ ,L(e0 @YZJ9  @,C@`$@ @(X(e ,Y @(@9I) $ @V@Mp?'  @TK@Z6 @ @L3Yl$P=צjD @`yK @J* P҆Sl @ 0 @ @r @,$  HmJXJ @ MHbK @XjB @F/c+bq @(@Ca @ @r*U0H @V& 2j @ @ ^V*JeF @pk"@ @ o*ET @V$ "hX  @:֩/o @ "Aˆ X{( @u S_V(ز"@ P@6" @ @ @(@E @ @@yJ@aPئQ0 @+X,CQb( @kX L C@u˓ @@QA @( D\I(j!@ jUˏL.y @(@!A! @ @r+u @ PB4B @ @ ,W @ @h @ @X  @ @@! A` ey @(@Q[F @ @@9bJ @U@-\ @ @ G1%EbO @XRy%N @! PvP  @ TJ@H, @V- jq @ @5] @ @` @XeI`fX<  @G@8m$*_j'@ @Eo!#@ @9( e0  @' <[) @ @)r\_ @(@[H$0 'I @(@9M -`n3 @@ZS]\ 8"@ P4*D! @@_  @ @.uii$@ @Z ԺU @" PVO @@_  @ @.uii$@ @Z ԺUNXVW @NB !j6Z @M@`6'{ @ @R  @& 0 @ @@J| O @f^ @ @n>'0@# Z$@ P=굩8[?{ @B@ͬ @Y@έ @ P4]? @@ @ P Z4J @ @@0>m @8&Uh @U @, 03 \_+> @ ,`%0D @T @ @pk"*U @e(KK)' @X@@`<(@CR @Y@ gP @ @" U @, 3Ur @XjBBhE @ 6˘jj3 @(Ts( e L]i @(@[H%?/I @(@)M 'gfo @UZ3b# @ ԨU m|5'@ 0@ @j PFVE @ o@ ԠU @x@%LPfT  @ ,`%$  @' <[)(i !@ 6˘tX @U@-\r WN @(@ M +b'@ P=굩8%zB @@j[S5mx&@ p, pla@eTmU @Jُ@6JzN @ |B < G @`%+a u L7 @"6ʗ+i @pjPRRW0Jl"@ P95 8)hx @@=ԳպFרU @x@56̫ђjA @`1g9@N0mh @V'D*6f?l"Wy @ PtD`kc34vvc7Chm7a?4K4 @uSkkiҭ66iL:ߊCZGyO/u]/m#+8 @% ,XLOqqm8Sf;qO @ @`&D|4V#lmnxu~3>ވXto!@ @JP"tU~g{+oOGWKT E%@ @5ltUO`4V؎'.go @! PvP O޸+N @D @\sqٹ.igo?MW:' @8zj[\(p ' y @ Ŕwi4B @* T5% @ @jUkQYX`cbaD  @ P8g:kZ@"( @[Tzhwz  @ @`Z@`Z  @ @zkS5ZPãւ8 @(V{(MA)`.4b @ @@ v*F @V@M 6CkB˜nw4s1K@ @nukq]X };~p˕+  @F~C h?? G.o^,ýЌRڝ22 @(])p__NoWxp"a"(  @  (ͣx}K⟺XmF @Urc8-N7`k;zh,7ƶlq(ٽ@UG#NB @@A Q^{(nЈ嵤4^EGx @ TeիVH?v؍h\=tdVO>& @ @ ; 4C  ۱gfl?qxo?8y};㎗i @/ P6T SV[a+6cO&K]ĿOW]{ ̛  @(@9M+$N[nw@_`!@ @@X X@ۍ Xk#Ȝ @@AV`0$d|[2>1n'wvlFcOVҮ;6mbub7>^9YTSu83͉1فe߉ǫqe>6Ha0)@p~s'MO%H=';fă 4'0x4E80[><ޚҜ|4Huz~{x}6ƨWZjn`cǎj#@t ??uP(0|'4`b:W~Ψ#PTtҟ&l;?*|lgA8=NIVHħ__+ !Nt]7 FF[ك@lɟhhwz3ku$ d@=32xn,'Efd|S $ .NvAXT`_`QM( 1яzgCЛ@" k @:kvµm7 L,pYR1Ï /$O7 5LFQ =F+GQax2B1m˯#k3!%@& [5irլY+ YU Nԟ ? \/J 40ܦ¨ Ez< &׏O;Nc12: ? @:?AMAEKH} OcPIR`G DZh:kQNL;֮"/}9/j&N1%PW* \/PW'C CE^-ST@ v0wHph}8 S6oOVl%@`NAѻ #k$pXDȏM%Ɓq  wF LB\Fәw5Jfhv}᳟ؓCtl %_D f~8|`#Ppq R pq}6Kz)|7P)EH'GEn"e#pJŗ^ _Nm 0-1 |w@Ϙw^~%/n}> 0!:,8*xJ&0C}x{Zf/G)%^{ҋR͑VRj+zB@A^7Q`%(;gxgu/A[)"޹ݗ cX#@`t8:2޹^yeLf@ ~p-PG` = o扔{=||뭹%pp5,JC`%y6 8Ãg|ϐ Hv!PTͭx W@E`898?FrȆ ȁR$uᕎM \΁/nPu;d}O @낍F>WS55 @f#*\T@'_5EPm @`J)  @@@  @e Ui(+݄]5,h) @XP @ @z@~S]\ϏVJ @. PR>9 o & @[b @17 @@-E3$%C8 P!z @<SSZ @ @za2S=4  @(@1E,G`*0=r2*85 ? @Y, [@ϡ @zTiUiSӂ5ONq:[(r I  @VN.Ck0`&@ ^C/w JTB@J4JM]fs L){}G@|B #@aBA @@(Ts( e <-85ಳ> @kX ^՛ˑ @@Q (JK(K`y%+ @z\zeg0m @`z,W @`}P'(o#%$4K0 ZeN* PԖQ.KpUp $PDtA"2 @ V~ @ @g(.Y@zN*A P=Њ@&!E, @z@NPV9 @ T] S @N p PrCJހO"RX%JnXvQ* @X<E``͋2A @`,X @ @`z `e2"@ P8= $ DXb&@*#@eRE 63 م@m @`P& @AF,09u @e0- @<]ΓZ@Z7O q=NQg$@.R"; @r G @Xd QEle"@#=/+E PnrK`hg%p_RL bCV .; |!ˁO@X@IIt( @ "XDϱ$`2 @U *i @ leDZ@B7Y`j@S+9E(Rk( (h @ EhDU 09f PFT @R#PpgPR< @9 # @@a (LS((Ei 9cV. 8g=e+ P(=  C @#r\JS]\/f3)\ȅQ" @JUjMu!p@?L\"ip򶝒 @e ,Y @u LYy @V#`jB @zQ,. R @Z6.OpgO @ P)J5LI/< @PT 0) 7aAj$pz5NdU_  @SHl Pa  @0` C PЊ@ _O(@?LPR8xy/X PM=ٮjE58𫹇 @&7@V9jUy%@ PsCj5 "\Wݚ x׬U\*`Dv @ @mf0`f*; @kR"@I`P @ P?uh4s; @@j[sCj^ @`Cf@ (>k2&@`'P$,Rk( \_ @ UӓBxUJ @(!k2&@ @ 0#W򶝒 @XP@N @ @ZI $69AJ @@ JhL /F,yYJ@h-< @`  @,]@ˀ@q (N[(  @U jq @ @5tYX^V-`Uˏ_@mr臩Ssf+!E.Z(X!o% @ @K`2 P- @X @ XA @.@[H)0uF`p"P0/5 @  cV/#sˏ(!k%"@ 4DGjO!pxy@NK\E'@KR:J .%h$E$_n"@0"  @ @!ீ@ft~PW LkW&@N p @ P==צjD\~Lsk%"@`r'RFJeF @`ԗ7U p#@ PC  B @'lLp&,\( @ 2j @ cز"@";CX D @R @`ԗ7 bpX:M )`@!E @ @@z)5pbS@<5E*!@%Q% @ @<$@7@F)\!Q* @@0^w=8C3Pl"@(W@|=FnXQ8 J*1 Pz7 @ IN>JG!`:I,|K&<(k2&puCnH @e- @ @`=f@  `eRE @+ 0 X7 @XPN @ @ZI $p& IV2']6Q" n='@X4  @@(u)<9L8'  @TG@:m&.:Dx) @TD4j @ @Hs*'8Q'<< @ Pe*h0TG@:m& @ Cq (?+ @k` $6%dL`}|.X @lzŔ @\A@+9@YaK.emJ&pF @5Yn  @Y: @@tpWbsr LupPΖTj @ 0# @@ D HV.eH`'';CXgcțRɗR8 P|ⷑMqz @niK @b PQ: @ 0J@IzPvSL @9$ @@QQ ~=J@`eX@@4" @B 9NN ᲽO`B;(!Ek!@ @K` $PT9c1],j[)\tɅQ" @*UiI 09f@ U1U `@ @(f(Xq+5 pM%@ v= @ @/@0(LS(g @@.SpnDVkM` @`-] @ @`z[n*'' .=dN`^7(i+%%@s eg Pu=G`RTg<  @TY@ʭn` C @50F P/}|jK.2!V5Յ B3 مF@6MBI PeUn]u#@s M PT̯VJ,~Zvv{o7{6ag{3lcޡ"Y@έ0~mr~3<>lo.)B7tpFn\ qB@qJB8=ߴF@mvxwfx_`Q 'n\7c0`zbmT@` 8@IDAT)M,3/i ~J@@IA3y1ahTyӲ?(OɟRVB @`/$)j$GK w>iuM,(  @TM`/vo.9-)A81` 唛 @@NGq¿4Q*tkqNU:ʋ@"C`&\" P6"(@//{ytzyON@9J @@ZN,jO6ۡ$ ,M@`i&P@8NI?," /Tl 2nVy;!+ \_(OqQU Zr($|x|̱f"@,S~G־ @e(Sk)+ yB?Qkms7 l`|W{acvx?>ˉ= @\`* xWQU@v{w7?z;> Ahǟw?+΍pMq[O#I}+G nggJN[ B@J`^>/Fy:4i˵' x;oG&%>qrqf%@`f'춛?n#<;N< P\m%#n4E MW_}s[߉37C'^韥o}韅{~5=a>㄀ `f0;C ۷bWg{^w^FSqMN`µW<_OEcbv<:\~ FDhw; .D ;OwzMӺ+YV|An|gzS 78Ʀx"@+n1핗MWw7}b >|p/`J7[3kّY{fܜxkB6(Evno>'x6l_$ gkz '-f<.vcͺu:G~v=ƴ؈#6ͰKZ]1=/ aOV(EBlY(@}Vn~~R׿~̽<'R#Qu^|<7O߼b* ;oǠ3gn?}WqtAS]|^yٛ@:O~qbvbܽ~eQ+Q7.`\$@ K?uz3(Q.O/^?%s'?X\ϝ7~nI;qNft/Ҙ@@u~++؝ Sk5!@ Hi/)ƹt>><B OS`#OՋ/z_&?_2PګZ xqײUEQE\u7^=WsD/??;&Q ;vLԨJ#'g<4_?\ [Y~]/V~#{pr`TǻrVhmTV p5ծB^<@_xK@ l:GK- B}/_'{_;[?:|9z7f$'_7?ljH, @Bn_#@7w"ֽxӁ^wҴ~7PߛZځ[xʼn>z;tt7;0y#l<Cg-s.IH^/?{X-:%B $pGrJ(Aݺ}Nn_6 :|;wq`A ;[9fsm[?@7i4 @Ht-R )ljwZ8\ǀ2 `aٽ& QM`!Ti `xpʳ}VHsz-Z{ /|o&x P S,!@`q%IW<_-l_v 0@m?SeH~hOowqoݩ b&[tn,qq74Dsnx!!`hL ۉK`u[,O xX.{E Gz !}eg9>j'?qfZog[|o )h='1gmū⭣}aةۡLaz@bn=ZwB+>M,8jc=_>{>G5A&_[1dL@&س,e]Gt;Fq} ~ IH'a3w1`։?) Њ[cct4?ݲo2b0cۋAU]ZIJ\'c⭰u| \M"G}d 0،é!'>'JD:f0j>s1Pts1^Jp3ۉN G?^MM?3n {gg^9w+0d|^3{lӓމW2- .˃c}ؼ<:wM> {&7t(cx9ll ;3Sr"o|׳7ݛO{Lvz*\~-v'v8*LJ 0+(%ŕuNg<׋6nMo὿? [O?9ZsQx/ʟ[gcc#8v~Νݻgݽu<gCv.^4]wnxdqO{L6|֭[5C6(*J,xe .t K{f= Ľ~;<0n'7ѕ w$ zYf8=^}kod vo棰8AVK2]5sv$PumN s#F_{\QO]g,^ ̳ܟ!tv[}%Ptx?]eٌW7wPg0I|+>_'bov[a{ycbgãݔbB?wn5hmU@@̺jͪ>Ho {eH4xcc]98EKEBQ?^e ;9S` {66o|=|/ΒOIݙگqIⰀ4$`oF?x#<'ޒY1 \MnWs +f@xu8}w2^3ރWÓ^ݺ-6(@ ƃzSk;jci6FeG9z>| dm7v~}.@1{+~OϽGݜ/`G~4|߯jB`y&X T/ӊ'9ot;N۳ߍѝ\h/͡.H{5{9vUw/)0c3Hh#N_ݽ~~:|syaafyшc],1"B[ Y2Xhn};ɹSzַ]^ Oቧg@??~~P6rC` sfW"pNau?:z}t{O\uynGl!P؍=m0E8_rMU;ߎ͏#vD-^,`bNDo񖃷.S/~O@^ H=,`t[M;z܋=ҥY?xmmnQYj߾OvwkZ|CV/_ ]<{z}l\?0Y_φ&vʫĀO{fn O^ow' 8`I,&SτG\_ %`B5(@s|{N)bĖ&hfXzv8:xvoܾp2z/<;Ws'ύI~10 /ddEx1}@~7 ]s .uO$o>+ϝdFc3Ӌ`,3g=m4%qH3aa;ۻOOcZ*'iU ?~#^~,01$O@:t~t~![3Rͽ4 ߼La=><,#| nݼ12Q(8P7a);>x>hF|B7|/N؈ \WbfdLt{Y4K= [0'4/_ ?,n>~Ǖlz7Qs{}dXߣ+錞L Im7Hh_:f"L7y_h8TQ!K3~~'&sfRYy;GÍus:lO':z~ ,0 Ns\SDFN>?kxp۠L)t`(ceyo>*V|ߨZ- @@5`^r%%F{dd?Q/ʸߏcz؉o2FV!FFxؐW)`£;ߍͧۻ\1 G?tϗUj #0rX)kh+$2}uwo"b/(ҋƏR3zD_T47BEi{<9nRP󅸶n<=aL68zƀ'Cqу)@&ɎIA_.ո2^uTS:mM44>J'?p&Ǖu8mTо⚰b&pR ͝n[ii}:z|.nfsk8YFڈCCG ٥l'p4u/޵W_ 7o@x'|4FuJɍ>en7u{\ѱqo̞&18R'vg;gDVJTmÍ>G;O9ޒ o=6eĵpxm8nGg~&vX>;6xx]~Qhş4~:_dIͭ8N6WTZOD1P0 N҉45z|jÇY`"MHN߾Zk:ɥ<;ΰbyg]>lzd~MO;<!2I)74 ]k8_"\d$(kcZRh䙧noԭ箒ǹǤ7 HwHEW=1>7"> [ λ4^n=y? >τ=3?`w?f޼ ~vi8lb^xrjs"~3@"w|$O#{Xz=+n=x畭7ȌwȾov_ bxn)לK>wjκ6߈AԻ҂{neM0#[;7v8b&) go_{?ҥ2Xo=7''wN镖n?~xǖqq۸_̺Ǎ߃Y|J %1k/dW'Oӭ❰c}k)Ngʾ5ҕ4 %Bڋ=-ݿ0t&K/oA=?~l i}+XZ +p䒾D/_ĞcuCH76ş\^*OGK:OCQҐx;"0}\g ! R{݋AؓFIY:' X ~vdԙ] 9ՎO ;[r@za\q]+vO7\x794<{=nwoa<1+16:=ͷ߈'ݮcN܈_y#vz24I~}:%7gal'i#RPjηR"+aJ&x=7pR_?_i2#@'J]d_b80bt"X~Oe~p#ORlLutURfg}R?2}V-;]K83 ͆~%|p~R0|NWӰt֒Nǯ߹!̳i(@I[WfI)F#1{/7[j^\m'ۍy^xڵ8c,2gW JӤ,-ekw0/ijس ήdқx‘wsV8~X`cwq9SWgy;Npdޭ8>M%n<;Gپ`5^oȏcswfx֋qUyZxIϾ$ܱ 7%$[_}!|_Bʒ$@/T,XNF_A-ږȎv18:}?_R2^n=N Kk %a|vZ_O'g.*=B Obo؋4*0Vnuix@ia t!N'^3͉cVw5pzy36ݱ`y?o d'k Hbſs7*]'+ lposQ"Oօp~F N+|Ձvg39Fdj< l'Խ+FkW4w7sJ r *%yb_P_uFk2Q1͉2@OD͂^ z"HJx'EYJ lCܣh|`߭g-|1WXoG"w;(p߈'Pf,MyfD A&CxF@'K}č^\?9O9760KPoahAEyB6'-ZчdoT^^Iӽ{( CG 6 f"-Vv#eM}VM%O_MQ^9{إr213 3%O#K! ?98A?)Ĩ'F!o\6X?І",ehG)_)hhn7qUd#ՆF h8y, \~"L;$b{]Q!t4=e=;^9:ulomǏNӁ,(|if||h:5Km taI4*uh&1F^o|l¦}BuX[l¨uno9~tħ~[笎=ZZ#ބaIS 0xIY`UP*!ni%"d˹K5jKƑ)7t”@LR {,_y 3UG|gTE#B:ܥkp5VuM' 㚫xp H-o\@oh˘xbc:V    m0 cӊes,9w\`HiQC )1(kW-4k+d6 ihL#}oSQ&AuxrOR.澬m5i?oEee>pWkcȈRaP.p<,=?[<&Pݦ^.%L$d7V q)Ln>tÁ^ uMuTAV;#ʥ0Kzi`,ЋOpx]|3z~7{@DQX_5e%ȁ&ƕu va200@ƌC'6Ra|DqA]@0P f|6␅7 XISt*BC7hh CO|ƪ/Cq3wD@g]DBj:ڢPY%^=;޷<o[Q^TTȋ >T tbzFr7i=8t7-O%P콂d)R2 [pA"M2\3Yَ Aj?$ :_ N&nD0:D9:D`?jZ;#5agvAkUq}JSIp^7RDc Á (SdN9&ѽe_l撯KgK<MxPC]xRz!^~Qc)܃>GI# 6qboXqNL}uz>oKoc_=v6oS??w6tY$Z> X(#r,Ź p&.cݾΉo"Hj5PuAdhT#EHa=@w8?=~ag̗. k?-ɽX  /?TdhLe+Ӄvڐ97`8Yg8ā&6w))D"PgD}Ԑĺu^ftJg0OU"g gyFb2 aڥn@U {Ȑw*#ض[z+!G0(f5Bw nZ2 +<yTǂY3)| X@ӑzHBzJ^zw),S ޓ/0Mo?ؾ&_驺n)c8`8`8`8`8`8`8@AB?%`^[:oovf*PT9j\^X h ATbPe\ e/ʏS'F6<%X6>;n22ɠl=o~_ q; n"`яJOsm~]\xS]hR0+%zpf 5Dô9We\OϸK+y.vg7ָ?ZJ㋻vZw˿ڃwC萹yQSj@(DMp~ MMXJp#֕4ׯƾ 9Spppppp` ם/SDȬXڕfYF'L\-od;=9=Q}we*}+??s?q\|ڋӑnZ8Gr_7PZ)1lJrИ 9c*II#M]*5܆mQQ[otbkM0Xܲ`&I h(kF%% J0"̀1L>2ScJVƧm^joõhJDwKĘe[ St S=&M0AF,F ܠaRpߚEH e;we RNvcH-x yvK>Fj:q.V‡s}d9VbCpK#!|Й. "mSu1PNd#؝}GЀ/H%LԀQQ絲RL]yqj@&2uw'L82Vc7 Q^\$rX-g|qIrdv1ÁLC0˼cT`ܳpm@ؠ[Oj@/Zw@^/ޯh7a?S,2k#Yd,e_od PCթpA=7M2Ǥ2\~ZIz"Q{!1'h<)ub+sFLaMе+._T0 oj #Xd.;ȇD^ 9UW15 ?Ğ*,\J5Q^ a0d8`8`8`8`8`8`8;WTKwkP1YŸ 1Lncokk;VPudvЎM'FLc c3]l<]eky3Zk8{շ?}:=(sÖ;=Wp7fpoPCL9r]:XbaxGj-QXOMLHSl75|F?zp'Oٔv r#-RO.UL yHH5Ovi! `6;?2j>@so"m!W n䇡P,"z'V%g=鉀x/|AMpD\]X"V_aG'/=ǜQerP̕9|]cajXiQU7dkm}i [h( YPhi mvEsVU$sC[ge˹BEx&7=kY 1<9U!^l?~W~*+ŵr=lDL#OTLrhIDApӭBmVFڮQ6\/$qaz&alO -I1w: %hE(5R!ttjTohE/>zYXYI-ټqhSZtZ8?vdB]Σn>+ D!D:Wx hIۧ3a Oʠ=lxwۻKCkb')*0܀ ގσe=pO=gT{&n}w:W>+P*V[,ጌ0ozP 9QGHe5`3)b%ɵI~6GEtG|l3DF8A0Kpv MJiS. Ĝ8P`|1`1_q+X߉!W$hJi|X@@ U møEAˏv)Ԏ1~)d>m] Eēw,d2Z xR?i|xN)]ig۽4q2FgW{gxxr!Z-MC/&B,Q)=);+h;c# +Z0eY1T<è9U:BW,*dQ~.4ո'pw{6\jc,xƨO*>F %PeS67r:~i!Zl@syV1E;Diwm ,՝G[hp}      qȡf]q*t8Pw}VXT!p񆱮Kg ;Q`z s}#h=:redh .1,7\HѯFNn@IDATg[)0<ŋΡn?@Z?z締tG;!-1* O $>1qm"Tp1wڍGpi"E~[!w m%Cی G-q6SEʓ&x8(j3vq,`@I͍+n_      ^28l-bA~wj>S.!Sͺ:DTZMȦsTLdFNq݇'1?3'v{ Ic6n^9?3(NFAS u Sk P/*i'M0=A3tD\(S֕80֪XYׁ9ZаT:Lwnl|0bRJA?W2\ƈN*t?yOt;@" 0/]7B\~xxb40000x808[lN)Df9\d6B'xbm J9?gdK٣jF,䀱5D7řW)!0.ģw1q RY1iHIȘ֓)HZ# Jׯ炢3]eֈW%QP@ L-9%n1m_\8|B oGspLT 0ne ㋌ ?I^P"f87{vM nM 7yZtaʖ#      ^NPB{-qo.Oㅗh52e&?f䤷hijwq߃pXK~waf 0P0'\Fg]\yUC9A Γ@LFԛzO0F# 0 @z [&n]X /ɐʆrDq ha34\J.R$Hߤu Ky{`_:V3Uުa8`8`8`8`8`8p9PE-R0 [/.3azB7,33a6nX{iߕ+dWvPIy'NT^>BlHO`2w+ dRo@pX4G/ \} _B ڼ͟ LMCac 7)U.-,ga{*dY؆Ŗ+q@gBp`0  .3OI@T m?@f+;aܪ6-QU$:J=8{³w73v&v6*5NCz ιY}SMP4$NR[GN:ou¿3?@N*>+T59}o?ayEXZ j* 6L+;@tM`^li 4v؄\/ɵn>0-= AI4}?Wϰ7!qTU휆cH6.'"St!uֹ2C?(l_J?\;j@:B&L)Á멱8'bhqVB"c%I;T'(%S vZxv/:[|H/yTP9A$x)h/ᒝuҘdJi!( /8NqjZm,FVhXgTf*,=#П ߈$tJZDt1z_saÁK/~JcS( rwyE* e1W|>BP¿U镚zv0' @@bal_t) 蘟lw҃:<]Rf`>-МE^y!/Ѐ4=)컈04j#s[@ |Pd[=':0Z#/ rF?˗{FT:Bi]m8`8`8`8`8`8{/> YR_mfmK~T!ų>'v?z:}Rr|4vp_8oQӦOA\ii}vdQP2gvه'I$z{wPҽ;3)s*ҳնmCu[H)Ws"؛>d R0᧐Q#jw*X-'jCJQ:"tF/"4Dן拊 *J΃b 0200000lxic5EG/P^ZKrI," g^G kٔ鋹gYX΋31Yak93 `e tg52"9hy@szY[&N6?[5Uǹ-тp_OEi +m;r^zlb~t9gFI8\>t~YN}w{Dn4+Zh*nchVU/4ų=pl,>gD!@@mնj`ꠂgg/U$֖iWMO6  y$0Lƫg$݃v/f"aR*vPx=U6MlsX۝xt;ӪΓE[ @?isfH5͚ZЃ*Yrxd:g xVK@>TK*Eiu_3Zmxj$Ad2RyD_Py{tO"nl4:?]т8{2uߙH>шeE}inpJm + A*ddG+Ф~d"Ց_r×uČfLS9c);SðYu}`EjܧwPB\ ӡ4:d5hGDxE ;D(D+aj֟#7jl?Х~ąaR?n|u}Vhz&Mv;;):IOYm.P֣7FޖJQpiѬnjGt{9QBIZ}Dw?-a_@'h]to)/MSW<u[U {{N; `؞NU{-2Zg  eŦ aqwy"L >v tWޖ drnc}L2Hb P0wft^92?iہ(q,FL{Wdhbc[[kL~1Kx9"I;`S\SS @5 IN3Iص`pppppp 4t2UlhmM E( v4'o%9t(X},|$Hٕ~IOf<*@ waQ֞K78Ǜ] pi #Avgkg6VICq'WRSyqzds~))]+4'r@T_(wŸ?blϯs7d.7N[M ]C *aҙ;߆Ӣ"hEqI/E0Ȑ@xDYgnRXh➀ENH% ^(H!cG&,2EeXT@F}FRp+=˾ŠSqSMmsxsX^+z&f{ldM/ U~s˘0!Óf{fq]o`M.̯Nm>(ehȩDkPPm#17m%V.@qC%aQ,I JEU٠4t>.OVϗ܇eNo*c8/(_OGY@OcX=*x~2>ZGi]pQZMNqAh!#͋|"%* %w}(q.!M>EsCbZ9d] ,qia 3Tg*&;P&Py V>'qqKJ:6    N77*'LF 1AZtI*[J , MQ;>/5QY ae/|s*gejAM+2B\Pw 8,C`&@aI/soc~"gq!]{WXRa]]9*Ak!1Hz>Yt:@  q,SkG.7{p# qVK4NLco9٬bg.^ N#,]~:7 fmO(} h1;ؼb;@guі1ʂx (?(WVMmA}y(%%g]a!,-_ts )v:}ki6 n *iGf/>Hg+mspϮCG[X+":P8x\$skQuG7RQ]ʾV:# @/fFB2RD 0MJ~~wwk__700008i#kSuOd$ܖJ@O$@ ,o0p!%wZ* %s;ϠWzf #Cu65.뵁${E(k] OԆqʴxx#R,f~ d`3h׶|O ۟FwXc rֳzo5j;5@]1fM|V"e> i٨O8?200000Ps@g'FH}D' H=`E'p/GW$Q-;Րq}vuqAȬnΚ.MyBQi(0 SmmNk68R]< q=ֲW 9TTy,^-Wıj&16 :zBDjB<]Cls/iFQeP,e#JwR ~V}ɲ攙ݷ3u=QǪvS@lC0m`nxAЂ h":@v,+FePM]b) XB(D(5kp7t K(S"\ !qJ'Z9 .Zy?oS>c o<w_ (=i}fNpw`wMd)zd GF`ez.)XXfw;sИ{Df;砳o `v0*`@ WPX24  `l"ȭ2@y( dP,11¯yṠ8@tC"kP*ƾ/a@,.QGr-CY kLlwwTlݗlbiXX){5=2]n;i<2[F6]X7_EMvRz|tq,pќ;} $3T*E-!~+L(L;'f; ƹ[VsL&|[o~춤4t5\݁=”S2.FͰ8 wתG+*xo@CΗ BaЍ_RǞ6@& %)ۄʘqTZFl}F`NI>n]w^}G;,'_^eX1iY`jPnUte&g^X֖QiA ݍO .4eVs-(b֬9s2D<5h+NK[p(A QXk)Zv~ @!sppppe@urD`.Buo9MOE4ahՏEr!\>.;gQ@u%M|Ё S['V6stgZ*^A%0 zNa-E2w*)NYdBН 1$3Awo"́'8$P`9ugMPq헡T{P-_G}3#=O}ܗYGw݅Kh 5˧T8 Jз\qS 0tk2iu( kmW -^0V/x1kK[m3c?{뿻AJ`|[|sfS)ijץEcmG;{8);Oo_ҜH9@x2:EpIVC<_@I,1)}[Rបu9^8CN>î])sD-鴲P@PECe^VWe8@"^Nc/.6EK;.QH*3v6ܥ3aG9u/]gc %6_F")3Ck 8d2}9-:]C:C>!Li+Q Ke'Zuo\?wOe咸/kO wTMhh _kUKڈ}2}1'V֊Ҋ?^$]inZaI,fODy╾v(@c_=nxY--db|qKd.@9G4;tSw qM#:@p&\hȱ ;0H*F Lƃ2bO:uUS8FNu[XڰnvS179TB8/. ̥0 E ƾn?0/+Xrϫ'-W.@dnܓġ&^as* ?aIB2 pG| 5Or'uSS ACI}lhkNlxp?v{^ }hoʜ?w}yo~1IΛ̘42TE.+S06N]}d0sKP7of'{*S?_L&qB|'El?I(%nBNaA9P&h9f;!-u8BR{?fSңDj̓w 9n8`8`8`8`8p9PUJEriHhJKwZ dƏWY5E Kf|!D@ՠ$pҽd.MZ s^Z^4ޡ+p_{M,]BQk-ӧ!:VXY< Ia8('=N-ZmPw? [OޅRNu?)_s 0LA#ɻI t6l\KfHNٜ~LI_dvLMÁʁfuS9rwԤVΖE%qߗ͌H-V2尿$0hn`,}TܧuYNߦq(En>ghto?gU'HCk|cTџ5 m41nu;bDL(ps*[8༓1KS,-#kDneC Ia"o&h>؆     ^XRHWݍ|OB1Ѭu`oR:ޙWE; wP-c(Ǻ촑iO2#pOyi0=@@e*<{-_c߷*Plk/F= χja]n,Oޖ)3Ee~* c;V]m $]0X*=vE]8{s o5=v,nѭ'Q\g>6!»PV};d%^L^\'D/"y'L%gNʏ^qP~¿XI )v    rTpaLHfQ9,WB lZP@ kM &i!?C |a|&IAG,K&%%4;q,K>%> S&P 2θף{l[ 2`kNXEiMqܳ4G⭟P3|ZX`yx<X:w#";t0R8)T!>+l(G;^P:JPlx?)"k˪,3IuX;T,nZ~m6Ijl@ 5m5ah@{݁uoYeQ >3h;aӖ38,#T)u "O4ذGQD7W+mZar!tD~ zA:2<<_)phK0^99N܏m2TȪkMxK S&3<{\Cb5oBEUclk?/ć=O$*C`+=|]6 {c&45{k*O&.J'ԏ)rNg]k8`8`8`8`8p8`5!N {$4 ?ISBu)&>c tuC5{ݼ(Қ1:{JjPKwF݄,*]qS./%CsG] J~rB@%[L)8_]4Zobg}x>XƧP9uqHp8B)yr!0/@cy}ɹ{?y ݰps,"{?#      ^t Y $=]M3ũtwBynh$z@8mϳe@_z+ .@ᓟQƀ;v %j/)8辟A +kRQR1Y ^7*$q| 2z?3 bawťԺ\op'Z*֙a*tБ4 T; d9/JZøfQ!T4U7ռ'*=)UټJ+*i|@ҩHw3f0xK%1ܥ<ϲߓ=ܟIOofJtmID xbL DBvf׀)TΗFnm"7i+ :G}J>Gh艮YzYt%ϋ+q%u;\AyHE}hBQ"{_럒h8W41'꼻Ly,\kpv7# pAv.K|E06x(%ր7P&ʼqxx\DY6Ȑ S,DLe4=d̾R~-]i[ Ū߃@adVspiw?ą_̊X#܉4# kexT|ɁXHOaRHDT^6.Qq3.ɐ"}K  DpW4;GoQ+HCf*n卪v\OTfMLH*pһza ៱(2&+2FLB-(dtmS-V+bnJL3`K69Z8ʃVN/.kpsxmQ@M'YU0 .[ABh k`pppp8xiGBKpN*xG";[\ h|c %0?{n3=Kظj5 <\a$XEW|`k%m^D.*,r2UI_P[MSBt%θx2e89f600x8X֝{Hq+7ڥ\=;y~.ODM9&u׮"L6(螻XOjcٙ*0wl`twe;{'i&;ja1[t:>tcۨʰ^$T<x&"z 7~>R(N^:ƘVcz˯xx/NZ2Fa#l7h5lqۂ?*A"#ʤUZ?G. 'Arp)Sf^DK.~6]ƅz<(֤"TvrGR m:tZzv~՝GbgÉEii_j^Aab!ٝyvK~b6"_Kȗ`is˯!~Jȼ|+{k3CLW^8 Oֵc `zBKr<>k0AY҂Q(@1CE&!gCHGxZ~?}2{J7`;E) q4}'Vn=x{x;B~K/_~(-Ծw7y&^[NG4Ihokwuw9&{YPQ;Pa7F-ZG/7^sfr RFLSɑLYxLLρvc_|-m= ׿,ߔ?b៌ 5ȩ](A(˗L,tAv5u$ g `6xυiKH U%"3"=$ڰxa+Q=qmg3%2 =L }mۣLF{иS*ڗͭb"[ dwkΒ&T„7PĔRAd^"Ŋ gi'J# `VQ.[ۅ%dz1|vp%Pa aEDBnYO:Isl *H^2kbHPYO]"d=,/]MsÁv@{?Zmꋽeqa-O~j-7jg|^\̯⽢ )6Mq̥ Q,]=LT>m0{9kNb~oF9& ғS ;.qǏʙC P'ѓtƤ4BqW;x HJWsy((Gj S{x1?y(@I?#*A E kx'W.?;xC?9*=Wy8iSw*kG-BӲlm~g.9"b D ƣϹC/B&xdw&~gX7;3 '߀u 5cq~ Qt\|E^H`\@ (BO֥U~be'[B8Za=O'"3_=(2\VQ+ǽ//a'?9J{ogyZ*k")mfKgݤ14Tyc ĕ}qޙ,6mFVkKeKR]] o$5X\/ƪGsfcno@鎇8t=p{B![jRZj`Yk;L 蘸WGk 7tW[W?:QIm4ƙYb1|_ Q;P2ʕ 5B:-/ jĴv}۶\2 2xx~m[vi1LH('h&N:;P+WmeIS5[=Q<" Xw"'ؓ1DO~貔T\j C}9 GQAM(R렲8oY-OW7F$3ĭ=ZO WOſ om~[uIJ0$A |ǕPcxϝe8`8`8]P4zɪ[݁|oM/Dm喝Jxqd ,!'*ee!Q%T&S0;߷ LR&pg!`  %6(Aً`v R.t VQRBi{Шkm;Kѿ^v{0nQVS.<x5Rѐ2NR,;厖ت߇u\¥!+R"qӅW,> 1!(e>8T)jaS86f FB8Q(݄ /qxc׽e梾iQё¿<`{HF_xa E@CNI%qyJ0 @"f!f Ρ`?"ܷ ط`ɇO6cpppFf| VK*>#!j~iC'zcxGl7/ v^1LX{W"QSj" +g zZi)(8^ _**Lf\cq*J~4Mg:2yi]{%yO>NCvנ Z/5 2x*CC~xrD<b@;6hkf8`8pLhA`"H׮B؁NRy!_o1 />;z] nAp,. 2; VOzӨ1.($(6*:CDOK IMr6yOW i['9J^F8Q :LR oFj9'ؓqo>ܴd׭თBH@nX qFSQ|" ows1Tjd5 ׽v9&bj^37Wm|>|*>ʧsJ#%_Đ4'MK 0{Ųr*ۼƏ8ʢ+A:80O09)f@erSg@X"pCi)dt5'[SܓqSA;z  fɁ0%}76֣!6k[oF ,PO-QTeՈq(6HIW%ݤo6ٱhQX*X%n On]*'ܹ8@_^{{{0<,zHuť+K^in8VB~½wb7s P@@򭟿TParq8o` c} lBTf¸w Klo6GC[WF`rz&gv2e@(-Hw Da)K ]Spp@O whIwnC `lm0-:+PY܂ |̤RnxqY~ Pqƅ]=W k܂yLr]ӨcLϩO)XE#xݬLDLef+7Q@)lC 7=(~֯\yPozl+wwX (LKxO= u?. T" 0&G}vte6+o~ ߠq2J+瀪 .q JPQK^#;e'DצM.Ikpwj>q/wOȜ10Ha„QvOԀaI?a-lAEvͷZ8/+ڋߓ)O9N;K3o\aJ#+XSέ ?BiM,dĉ':yWc*S*ro CO 7y& R^,VEa'B4L= F*#2H}+;gw>!=Bī!ݯGU}|!^4nvYnb0LbIRX!‡5E'{bPtv !vg?dIM+Nt %ܥ}#Z jv6:2]@4*m5 PapAFmL,',5)+l%̖ H]Ekto*,80 aދ).D5$4׮̟/! &V(3i<ŧ~C? E1 JB9`IW ^Ko3H 1:|~Q/70., !me̙L ,] m5*n@)yJ6Wr󸷲"W\,,k]t^n/P8?n42Еi &F{(D7R $y? pFn!>u>!E?NL/4({cjXfplv)*鵢a̺\cBt` f'/j&q.(DUt:+%6Ս4J:|h9ii#u<6ݩ1.qIpάCa΋+E*ĝ`zD& ")ꔋM*AUviCA{.*p[s_Ribf̦@Ù,pFpTtښ仾X_S/48wE *6v~яXq %.N Wo鹴:_*-Ai?6Z%E$)m1 x 'ܒ(!$ "}-S_|(X\y8Ox 2 W"8{Yj {7ң}.ߩ\eC\ YV_ֵC`19Q"uD*(5FP'd<*D&R LWޛ;ap}#Ԯ={:SƫbJ-0ӕL9#l$ O[ 頀EtyNxyEE˛\wǴOލZu @xب\!@8[Yמ9g8`8pz8#>=> mx53ѷJrgUv)6qޚOO) /-t.tqDD(,(/aIdCjpֶt/U^GH0F<s~x ,5\k]8b9QZzKz@y@"@RBMEE7XdIP/$U?\'{ ,sn?A"6lw^r/#M1HHy.͉+J;JA'KfKE ]6jl(r&pD{ZT4P.+еIE4;-7A2\Q)xh.s-"_~/-HEl7V =%t½<7n9f C|'ِညvpA+ޕa첪c'@߂!P4ГGJs#U[3(lhpR fyĿm,rI$ "G"_XL:*0FFGdlO|G!1,‡{ ȏhb=QaAd.^2ͯ^2#$q/eysc`?Nzf(ȖRp%SG(!ȓ ^|M'tC]{snL,x ?"::6f=ECu֩a+Z]Cs[UM& |/lЧ U'Kօej_l& gW0p'EKkt5:&EφPӣE>)"a;-ѨCxhM]W2pI Vc} F?P|p57 `!u{n*q 5*<6ø[ʼn:去;Ly#OQu9`8`8rrFloRװ (qNZ},o|7!ߨzm?J9KT;?Qx,2!$IIV:f(U^ M}?̿jOֿgGp ptY[kh>3"qH gF;(Ǥy j>B /C(g -tQ$ T%ޡký]Ӌq<8L !#7ע'׻D>BRmx&72q lwu߭zr(pM?8`70U>\d!<#‘gLRXӈ1$)|cY\$^".\]< PĶdJ:~acn2)WJ>-?YO(ֳxhG7y@*6;=f=8PD9MeP=spp@lb60$CCf n|w Ӆ's<Ve֦wC CEoGP~W1*>w«$:4\n!<=tErJE+;m侁͋tzEܷW^J1oee=v&I` c\瘺y`trw@ Ku lXP^ޛ=d}؁\U]]!)JQ(I3A471ғd$Q&ncᰛ3wWw^w_2oĎH@N.gNvxl7yGQ'Ո(iErfK6+rj'#g #}!¡ܡ;ˉ;*4FN۵ǴF]Q\լs{IB1.E0JY%Bճp]ΗpϥyH\SO7k:M N[X\f%uZ8%"2:7kҚl:_Ҋ֧,Gq]JƳ*rht)-^$yc((:XcC+Jx*%g?j4 Z替&=n?v).Ӹ׺ Ay7_bO&XBɘgs&)]*TueȤQ4q$hxDFpl\ؗw{i jIb1I[k  sᖓ;~ͻ$$Ee:(FL߉c5$PdTw'gAt?3$Ylh}ŕ"'b%R227ݶ3%+RcK@o~]|j~5=@.bZ\KWE]R% p c.Xr##Qce-#/d1g1%ns ɯ<=%d={Uek+ͷ~-!'Si.$Ľx GC8Msf$ @.<}'P*_o%yg~˫}(*.FHB}=0&MMG*pD3$\n9ȄGu/ Y rNsS<n؏u T(?5pt޶z(0 Q&7qqq'{%H% Q#jz_ݞ}Ab0F;hjD,t&Վr@_5wyzbI-JP nI[7nN,-G`90#@dZ@.,;8Umo2]:G aL coB5s_MJ*>@=5VqKq^ЩdOsajJ@v ׭ "ωnZN Oھxm_p0z{>HtG֣ޣh?^F >j(Whdohýx .# 0=/,֖J n^rx?'ާ?{Ni=$\Eo&d$J^,2S,}mlߋޥOm&w;cB>=VLf?S)"{zI$<[|(WOd^(+ޔ+ YԍID쿍ZG=oIShZNjBQE+l{|'#C2"~\ _g:\g@l|Rb 4f ?yЩۯ{{-)0 e5hke1.ߨ-4c8u1/X;w^4&hAo' zSm>0ǐ6_s~u !>GOҺ MR--{c h@ ,QJuDЉ_Z +#͢wk T<*rm\'p2Cor#p#ex? Li Y}2g_JPk+޵WnBW?sq+@BZU?^HC֜'ߑ[{?E;y?!E;jK _1٥nQC9f߾".V[yC৾yֲx/_6qaw v #]1J[RGe0=OTxA/ *yIÿNձ/l])+]O.E2Z/ |kS]c6$dw+7&E^;>DKf_Ce]~Rm[bgOp=Z'AMBb16A &=, ^6UW"%ye醴G&?()'ozpXZ~H0+L(+xgWH={'m{+黮M֗~ӫcq{98h7w$Q??YW%8@hwmHvz{O? 5iҪi2V mFrpLXV~5W|K; d&GC ,ȺP!1-^ [_ Sύ-T+D懽9W,2e0#&w7?~o{[p?<[.6fPvwgL_qPn+T|C@Q]ֆܓB%P-6 7f m@ύ "2 (FNk ˥b>^vX!l*"MZ.t>E $ʔU3;4Bz,GS9wA7{U0^EF濩g8#{V<<0QF#|(lXaXk ׵Q={C0H: =S7ջ?)cX|G4zTWQf?>?4gYb1+WLxjEyg_ I`I2 +v/p&K75'q})}fmH*=†"`O׿ 9WU$}~GYwc)0J %){ }MePf[Xf@Z(IwrBвvj=8WYd J*up Tq:kQ8,:$Q`}@Z瘴|M5_We W>Kp=#_0zy=m. Y0B0RŻbGމ\!.g__c"ߖ58p]ʃT)!B ȣ~ JzhJ Ώ3ti:^UxM]5-M1{)iJ͏3'GUJzuy9T(v禵HAO,;O fO) tr#K>zTqO(W)4>B3[Io?%aJ~q/+'y6&c}I3IVg渧Vs}Go>֟z5oN ^sWeKZ|]5ZV;ߖGSX})s\92욀; l x$_@?Ppo[C %G:wf!B͡R"J4 !2c`ƤwQR~ pNW^\^|K{Ex?]oOm3 =waD ecrV;m=4/&a =ֆ#qjwd ˍlεHR^(?&ۀ4P{~` 4c,FzJIpd8 1q sab]+<gب׽9[mcuo\z-zXm sO!([z‹p(zٿӚdXԠ/Y@h:XC5MšXH O@iqi)IFx(D׾. ":v {З TRq|C{$/.{Bv>>#B udd '==C?._V&ᠾz[ڷ_g'Tux=P5}puN߼Ι1>GX}~<;D-}Ռ &.-!Jqӎw5. 5YBA4>̹8OQVYFD <=C7/->گg?ǒܔiGٖ_{S@JԙA8.4֦c3)qRkZo_ [~جܬ06 bx|0ɽʨţ릅W*fM8BFT|q Vy ʦͧgDl s`A"&@}S A]>@\ɑǂnw_jտ_hyf9}@->+:fKS,Ձ|n]2rjb4[͏i})$Upm\LnHkΗϽ;NOJ| ^-e!Wn*=A?j 0}jnɓ%񝴜/(c~﹔RoH[?C^a*WnNi.>I" q'@]iBI:zGPE]_KsE|+i[E`HerCZnu|i9kgp ^U0L(s:Q>u(IO]>ſvIYAO`sVZNj{"]mmā ;c\%j4U xY^9RJoݞnEQ }'N 4p=o>zB?C1` ۿ9~k9@ة, \輦;*ށ)K.eM+XquKk \^yw_ rDޫ_-|RqT;:TiL_U-|x]@}?: DJiTA&H|[9.#RS"W4W)r׉m: ͡y<=UP5) ]en,qIaQ<*M֊(36dLp~3-kK<skf抐>?Zk~wZޖRa?5g/ÝDy&ή$ܲ -Knzi7RG&!ܹyf'M_@3 n7R]Ғk:@[tE6<н^ׂH#q\$@|Og9#d޳Qݱ@_!wFwޤ;ֆ2N:\&6kE 2K\z_xJ}y#0L9'Y,?AHH^MMN.$B4b6tH5Hz?rJbq%1(Q:6{/K6 Ē]1+=sny5@IYuQ!- Նޛvab$Ҝr2o:_F ?K]d j(Eai~.O"y65ƔvKdd#,-g2KoUSJUdklxfX nTS'?y;♛z;!yaT._gR.Ƭ A AiḅڏF5 V6 .HlrqdΒưȐӔ֓FOs/1<2FDVKZL*1a"@#^lGa|=-B=4^<ĀB?uנZ?`Mnw-F*No^̸ lX@v%PM<\2q͓A8+ŸQJYqm\˵V1.E/ jfIWXWYI7ǮfZ#~38VL#>o/>Jx%[m *I> Lb^qu/(& nS &l>7%^qH|R~ٛg)@XS 4>:-yԿ9WX̳sx{vyGPT)NZApx _0@,5j{ zH1!Ѹ1d ճ"'(ȻKB9B5O.D*IB! (eEfhj X[%{z[̸~ݎP h)&=:۹Bɟ%_) pfkh.ܹ ~}kJjO.N$XOSԚu>R,"Ui sx* Je#b2^cv}lv9_[,^/.k>rf_h$~ch7?U,[pHvh[_ź^:ݶA>]ߏ۬! #'b㈂aR>|!~Wbؤ+B.I`KΓƕ%U$4RWn]e@ @IDATV6jwzT~j/8SKvCy L*Tسz^],BV 1Ek0:ǟN vd4`]IIu'\W`~7/y'GrOaAԇG㲖Yc/{R2|($Y)&#Ji=®L\2*RRLKYֳiۈ^G8nVxvNc~FIbyclB~p)J%MEum Ju ¤}Oӓk`.U'lZo*ߣ\NCrqu.6%ⱑwj|G>bxv3q 4#[hn~ktpU'$"շk&;@R,G}u]ͷL7ifJ[ C֡Wt"M:޹ Nh:tP|\1a_'?HϸﵽR{&iZ7fOsLa[OyĐS_߬z[-<^illX`?yTvSͣ U)0cI v81Cc$<? {I|5GaFR4 SOG'ׯi1<(t65C"u'3 Қ0yaL%ȞPb o+kntCyCȻq7XQ%9Vk/2# q1I]U<56.i):$? gg?e%*恻14+E:ڸɓQѾy],S hagb6ABJu#>7?ޗEX8PN(]?OF[ 75[XF7fQ߄w2. u%z-{OgA=;غ+A(4H)[+eͽG .(+u;R1 >t]}'|_>Li7S7իoȳBq#a pWYjEaNz-1;01# R@#%ЪxD:l",P&\Pt!CVUU@lp+Y!`Fl75Ci@ߙ!$R+TFk @A5h~˪nBaS}L׵${N)#(2K^qKY||䯎Cɓ Je|w$MxLVfq- ҍ/<*~GѹȯGC_4 k>" o~5 Sv_&2Κ\Iim-9<(80qM>Ĥ%ƃ}h׍|g?\<~o\~ǻ.LYZjBV&+xP8*Gv[$!_mr6v}DZŖV/`| T,T^1& Wƈ<EMoёީ9y8:G7gXe{~  LׅсE K@}_SցV:"k//ڛ -c!,VGR~$LM3բarcm_Mu-La8u )45!i]G~^cCk}!̀qouU^ݽj{'uq+CWh.1ɚÅwt 2}==R" ZR>f0M4sv@)f;^[ز|GR"Qvl&6lK.O)S%it!xժ|ޒE&@$JRkM# ۈU01 ֯BoxWHH7t.qe+u~.x;\nCF"k%Vr n!5C 462úk!)`Ss֤XԘ.,[{3+>/`rr gck?YJAq̋\u#4SCaR9rCsJ: YMxf)뼛/1b9)M p+&mŴuwT6&,icgD͂hwOe35|@F;|:f^IgdR".idžPuzۄ^>ֆ2zт0u&ΐZILN汝q .j .#)}W*&xw'{wrI5Yn@v!u)a ̥?iePZ): 6vẃa|@PfS@Y[Aq߯|巼/o{o{_?J Zle)I< j i%zL,vSn,)sFf,0l[9@+:{5׫qh5?=C\+ME8T/ͻ 7l}7:T\pJFjT}&+E'1B聭1G`F@9)e !1u+7*,ȡ=$F@hג,DAMٮ锊۹R u1(: gc)ҸfC^98I\Yw $EA(#Hh)Ch:  xuXPK{5*G){@R&$ bdI7<%A|4%I]S oUzJoЁF0l+Pf#y!#'qB%yN#E@Cg*$6Дld<7Kb,,׶izlu ʟDS[Q5Huc4CÐj+Zx"E,V29Qúf‰(% B^,Ɩ͉pᲙ~ᓩLc҉%w ӎ hHKw砬D (?]߇w ^.h /_{nY* MAǠKrJzb[r%Q^%FqDFnz›Xk_S_mǵ7にV_`ϫ, :Z>;xԃ6477'U~9y|1!B(@BQ/0F4m?ИJ`_Ɯ]^rF ZclkN5{fΎ hoM'ؒЈWԞ٬m"c 4<Jv4dM>= ̸z@x_ߟhwR>q}}a)s{_!>+O )OpE1.+ּ~#|IOS 55oYP]Z_H{@П{NAa H,-G`9hwC%<pt!B PBaܚmL8VbnG(*(dV?8ucץZ?}Z  %rp $ B<{)`㒏BjޏGһv[nS?' ;øHKX _ {0]=+^{Bh p~_>U5{š++lhDF]j"i5yQү4u:Y)}ǽ5ʍ3Nߘ(LXV$t͵_#>OKU}*zY1,,?(m;v?='x\4-ͤװ\P98{B4Z>R%Z֊-ځNp|;Tg$/K23$R4? y+ɳf ڥ-_xX-`r4 V0XC)Onm*Cha^n=>E3e(/eS 1zgRHZ48}OjC<<4PPչ):$lsޙ4 ` 1 _zEyHhHQRb=!y t0i 3mG~^2^>"5 45%5΢ ikR+I?i[)""{'1UѳϿ~75D[_8IFa'NutHP]Ns-3 2zAiK=9kaE)D|GV}yyof\Qx Q:T(tvzQ?</R&߅G}aHg!P{ӪuGS qaeg/w77ߑº]W #=Uk~9JZҹ-='4/bMJ0d,ؔmL?' U9 o=/}e ⍵R+6牷z!(Yq7LKm{|:τrK<ŶK#%mYeJW"md$rsɓʠJp_ʏ ;FqU > a|@#~@\\)7)|Κɍk@\^v6|6W[@"Σ:av OLxp}oLN鳋?#wc$؇ոFQIgn-AMN""1{s#%(τC.# :b_^. *jAr)ЪFJ#^}d[_:ޖb̃E<^hP0ƳϪyk^CJjq`>#hci!mKH pM?jXu\Xݳ7PtIĘ""Bi}OzQ\ b=RHH^mquіG@+Uoh/܍lIoXC0pGAEmx{y3!O,*f?Z!QS"/z/ӿ8Řgмz %MQΤ g78hcB[;)'mxѵ TnW֥$ںCȋeIXu1!_ѽ hӃ'@8) RFGj+CA5-(jR[SEgp)?8Y`|X;RN /7V<*y6MPgX GA摰OլG!FSUrKz%'l0J~Ha֢f;x.ɭhwŤanl|S6T{˭9T4T6$7%2Ěj(d;Gf7Q4yrpxΑY}M0?k\. %y #Tqt1e,y겔M pg^(R)5[$6@;V)Y^wS.`Xؗ+,0Iۧ|G .(&ۋ#~3D0LLYa %YS*ECX):Nz3kƮ5K:+vBo&  ay_J2$~߮)5DA.hW G !'ȓg>GEj6awԠPp#s"$|ߤs&V|B~~T,hY.ɄP }9`]2fxI'֞4&q!tP|$'^Yx)%aoB̺n'Fc:^{3~SΗ=-j]naYf9_JDӻg4&X+5гybipinlk ~,qCk) mSPlc5 &s%Zk_ Hv5q8~7y6M q4ʳ`ʲ~VAGО;y|he3J{"z~&p}PRlҊW6AgGU֐keɪ{)"tg0O/=!5T<sQNyƳXgOޯ:]1kz QQ'&\XeMJ`hrɧ9:Y\\DEmd*%y$]6`=$O/hPboijk_,Uk흹c @WǮJ4SYKTUY,Bk*R{4]qszx=1xZ F./ jݭsT(MIV*3}ޗLmfY`9_+ݳZҝd5r r_&Ψp9dYg`6PHvQ!+i8+V&ES6/; 0Bۇd;2(#pvh]Y؃w4w<隸sH=SۓXîSQdmVERjl7;a­.Qb ;Oh;H=VS8T;5k|C]X)/١w6KkU)EFbfj/zqE8emyص|w,Gt ;@+|,h}"( EW5B{ƊR,i~3Jf 2 (!=#,fmc1%5`#^E#h7gְ0@G)`20|V$ S>?1Ma.%b;&\p4wx$¢|utHTO!^b)4/iZ˂xBy /xszmcд>/8|Q&ťBC\cԌ5B b@c4tR()8٪hm}K:D_4b  ¢?[JR{?%j Īnhl:#bbA o-*JU+ #s.0J=8>C䤢M cV-r푽SmVoN <{AJ>yX,i9@`/;+Z1qdgOr+ӟE=9AN[ҖfM=r~kṗƺYjuM IJh[I !u)Lb#XfPi숛庢@=yaոcyXײ; +HjmM7.]x㦵~~*jf/%~f( .usӑ# ~Ѝ/?ƞO]L"B>>MZ輈u^ z˕tw*Ir%4{`C%e5\hÇHV d<{pz-m`R}Th-{]dysyRj}Ay_'RB=`4 S|+%1Rmh?]x9A僂 8)`c)Hǁ ;NS{|A,|>gR=tO7t22/e@+ưG+;e2<;[lǖ#n{28N@F͸XK`M4և "vLd@u/Wbk䨞cGGK}XpeG1G94dJ꼠pվu)JFqP5)I`L?@c\[SyFogY< I-oR+wH7˜/S jIR>$ӊq5dMӳ潝xziu\[#B!(d:k2uyK=Xӵ2Ea=b_w8,VK-@7yuXx#s_Jp[k ivQ Z,Av[ڭ3ظ Fx(`H!C1_l%H"r[.'.o8#6E^/K jIMP"Iy_Γv|/ʫnE鞋fu'f6RP@gBs;;O^,)Wy}ʼnkspu];~PPsO% 3R^rA=wUs Ѽ L~]j</*s^dlZn<Ӫ t|zأf9~1rKqII,Q8Ԥ5onkgz<5B7S8A_V{ǝgi]Q J6vY.֖mΫ< 6i魍f SK0WK{N^7Jje#ҍ@E q2rp4% yB%O" (?0I#z/'៶P BM3 =k7c|x_ĭˤyN&]?:_̍c I`c;mq8("UܓX}6e )(!=P'H8Ri aZ0f~J)KJo;]<$PQYC ha:Z4AiYV,ʟWnԽ*4!:{>lmrug U"#U@L u(sUmXDgz a*-=_b]U'p8х7C _^ !f&X]M>mv@YeUSsV }m4{=;]oPͫ*8^g|5g۪&[ }W*0ʩY6Pƙm 9F|9}GngNSAސ,Eb[ 2H ؁_nS/pP'!cъh1'3HʕuDP$AydN?Rg ӌ2,$XTԑ+鹯)+UW7(dbf'_vUu{mRw“QQ9O wӂ; .]$ak_ÄW{= w8"l>ؙtț `\ gs!@#%L`ZwUoCױ4lp4ЫEť4/={Хe#iYo -Pw}!TOO m73gpe"ZI"Bbȅ?GZ[}G*6T|yYhO@wЇaCkzCe f +EQ}~/eP`eA \cbU [nr<nhYd9@HJ+}r ӧ!kҋHY]V]qa4UQ^ ec\cy̼ G8PZ9ܸQn oE[4t(;"{L#jW0>'2AUM",ň ]!g%<;/N=bN>+_z4]A$m!#<5,L@Mo;ԁe{Mԙs^$gܔINL\G 2j&Ɛ dI>{x$嶷-Դ:6{"Z׿*7ECyQVwgn|~mQP|/tAwN!6$Y]~ICOyShd"X$)ŃZysŒ _D$/EV{@mKn?or΁BӼRnwS,o.b&{MfU+!0^OEyrcz.<=]D,Y9cVp[d +SdP_?#n ~R 5RzW:ڋC mo)᨞gRl!BdᬔM 2ڀQEA IBՙOYΚ)A\nf_H,m~wЕ⣒68_!!9d}kT]#Pϓ^ ؑO?,@3v/Gࢍ@p+K S%}L6fWv:5s~Waצ})ݕH)=MSM Gl,4yސ?OcE'oC@:AuZrh08~e$W"~C5 ]SN|L[a^ӪL1+|ILJȅ0XZ/ro?z]Y 5̈́/R(>u_vم8oBɶ!q{f)8I\pȸ'MzoX]+qI.V#? F(d~b@}Jec >g49!i|uVt[pg ^ a)e8$!9 M5Z?듆T-q@ G~ ãdS)q\=?zz|t[[6:@IDATItq76a,-$Z@^, < &5*1R(E^Vb s]Z_G+|GL36Fu%/#q&5ײ]^>44m> 0@m.0FN 8p,)bPCcR83B\?Ǐ{< vc-ZK3x$yGk G*=?y)yԞNΝgpӑpi= 7iF2tʷʌ~S)XSXA+ xًHYPNEIu}1(kF@rbxLVƙ2~o<ۣMLBzTIo{;g @'Ů, ;E9י DE .,`SK|fxI 2ZɁQwZW* 3{u# Ӧ4rBXm~Yq@yl%xtpX* 6ILR U_QԢ0f_¢snV"h\y^#4l*`l=>4aŋ?d5 l/Uij)l ɰoғR,LGe†C5.  VB^ABo'es}!1fIgX|Vߌ!] fR؜ N.RN(V 6L|UץkuXEW\YXR 3wV@v51bbE"<_~^ t&fY`]F_C0KqvG{}[sUPm\{û7P-v. g6\xO xt]P9|#͸/flʹΣ pN@X|V2LKjR,= # BZ={II@ƉC Zqm*̈wHԜ2a2bhLW`B%u%)0oN랞\Ӄ> Wo'!aO]요xEP rcD!^E!|s™_ Lٮv:NǠQ.>*WUleB+Ƶ,hM<+ \(~E%֋6 Ȋ܂"f'ł r\RyevZ05Kv`OG]#|5 \w87ԡEgV֧iBA(nbj ~^Ud'|[yK#%=ߺC{oKiĒ#mŰI F(V .i]eTӴku$&+I@_$'klr\3: ln'Jm?6y]]!7|z׎yݲYčgvh8di p`%r<`WKu_g4ŷc!dMȓQ'դv}Wj T=°n Z1L[[! ʵȺ^K:ǫ`hݼљPc텬aB)((Eo:|a7v(I4#xUԑp~ٮ j7% Zc.M=9R1^v},7zE/ zD;dC(Qe1Тj}AO%ұMBGܠN AZ*7KTCBԎ$]w.SUB) X){)i" nsDh̫əAP@kz?7eB7S'P#}KP8'޹ȓ 7g}X<}DPd ǽV/!{ (KL̀(q۷k '$ цuNaLud/Kˎ!-} S-R,)&la;CS?4(!^uɱ>"&K0yWʤq40a_l%pS{zeE0̻}\߇9țΩDLO$&; Pn&ƕSW|ڄ֥lxC ڎH\5W=F(;5)ۂP!"scr0wyQzMnrTisgAa3O>naz A(*ww5cYm{'@+RQJ9~0:brZ"О,O>5{Cc1Fy=^.>Wn+q풛=y6x*u=g`(9OK,3kyv(CpӶ^R_s.N>bWWu͞/O!.DI 2"dͧo yp O&D?4DP R v{\A!y?t|1kyIO'Q)d ;ם_ _Mf@COni4[xo~\8(Fnϰn֑NFI %E,>< 5 p+cĘb/Mi DAK&]Dhy[ZTްXV5ir53 VV{3횴g)h. i3HB+Oy2ĄOZ(ޫ_KR\\?}Z3UG?wE%-Gev4gx)JI̕uͫ<)ZZϱp"oMx.OV_^jA }luXb="DD'@q $ooʣqd( ڂ/7!!:W;%h̗O $$vw[&h(VQ֢ӑ^D *Jc F7# ; 쯑%vxٞdI#`R7My}]YQ ߽W%o7".ͫ~P7lsw`":룃 qAptL2@:@/63=Hܭ/:pVV\s 56<~eN.?T=)jPndr)}R~lĚ.l87^1p+X 3@.jtͻ?g;1x2˿#4wIy<`5z|H)K>l{z]T,8VX@^n&õoO轡P{~Eh s?vu!@հ h,wo<' ϗOǓWWM|?ޞ>_X?ဵwT!ZYI11{b肰;,vE5}~Tti(+- *|9Y:ݷ1gZ0A< Pwi"C:ʶ #R?€V!L\uRFn͵\^rk,"Mir;&ggTpiSE)@+tqBa4^Gbd=2}1ŜnԶVdϛ،,(lDJaV>P։ 0hU~k}sۄoney|9f/ o`T3`UwF\1"ɇXeC {3 >bU_$1 LPf]~:.nj9EcOowPQqRԠ<ч5Kk~xŕU XN,inSu)RAՕv~Yġ+Õ-uUW?Ǘ~Xa:h14$o+>F(к3y)wGY`=RjAyR_g4z |'D03k$r\.:qYMEm  \XCf1\P>IxSYYͬhQpQ^kHR;Eًɺ\4bZݎ{);oZ̕JD,T(K1tHt6Ai~z~ZAw?-ċfeF`g@@Yt)2e3 b!7cK2<%{:{nm .\:L{f:oo}g)Xk+rGCg0 R ě*WCj-=u5J(V ar(c9<.WϑY1㚆$cWY8zlQ^6!sǺÞ e}f>őUZ(P-xwy#&3;oB)Ozy)Y7|P@Q F/6^Jӧ#+d_Jkk2@/-<.40x(;g ㉀6fji P*[2- Jtj6x}.颢/BA*ɤNpCl;-m:Ja7#ۭo$̝I6VUwuՒH̓-z1`A Old dH@[Œgg,wZUEY\r_H? ##cψd&X~[;S[>=AWY[փw0Q+j\5aW?;a|+ uL (M{ҏ:)̠(v;7/ύPFqxEb ބ@wyflE 4lHyhѡܳRidIJR7&Y2Q|_V9G>nj6%lVpz-~nM%\3J?M=qA p#Ns @6_O3@\8jm ,KcDڌD+/OX YǷ&#m3iMhɀl iFHe,G2HCg[V,v}T#1jY+A\"W r<:*|' Vjv9y6._]`& 7|^Z?TE|~(TM Fk=?Uy+{l|b}_ .D,/~k>_3~W=f[_(n/b0g|p0 20? r2grvS_HY Jsaɧ(?EKyeanpБT0(5Ҿg q$Zǣ#H3${˺z6SHB9^}'m~/1ܴ^|mBq`QJ[ ¿~d}gJYgB%dE]P\#ˁY W9!缭q@}Ccu1)luX>¿ x2&q 8~-8斊ϱ߾k`^"[IC 'aZ~#m"-m ÈУ]?iPW~Q4Vㄉޯ=p4ƭs).K9Q Oh=T *'1 Yڰ'K7A0D ޘe;(g6V$!HQS:0`b–%tHJl@((ߵ1yKYѫ4gO?t/nV/>x_ K^|5\#o~>'^zO/~oOrS }3t]q|G(Pp,}5zvtPԴA P/aO~@af4lR6ݟ~I; G;͸3%Bş-\7 ɸ1"8c :RS8k\>/o>Eg}\>_EYһ)(8^ ɂ>^LH%r -,\ٕu?_̱+ܦ|g]C_Vj-= G8g|:9xxBDI#5',(J%!Wcew lؤrk'FR(.Z& H @I737Uy)~Us.'XjJ¿}ZO F`,_7  ފ@ ￧9+S~gRkbr!v$֨L(, v` %!XN'xFA:WFy&o_;^I{hc^~8c0H~EIr8s` `[3swZ%i+U#pv2 ڔQ,]L2m]vSuy߽TjIO&o͔l&u} in2`&&;-e.TJ"@ +: ? xR}8Of[NQo.eґ-K((2 TU/$SQCmcct]٬Xduey^r-̺GӖ.K&]z_(T}&C- /-1^$i Fc HgsiqH#`-YPg~>lIPo~ͪN+gzCt!l(Gʠt!iKYF qc`H9vtxZ҆^f9}KkGzTLi?4qJ(}|OR+EQO~ZI&~Ty7uWDP-Umq;!m鍮#+ȗ\̽ХO.mvO]J(@\ H޷j"_(]gU0Ar,: >ǏhWOk4n?C @sSf '/^ eˏz muuw݇_ڪ@At߾:_(jWb@e$&_ݿ^)'?햐^dK{C izAHr{"v F\MSqڿ8s#"h\z|8Dw6Մw~ju:Wı"c_Ƃ۔Q^r6A5쒕a^ХI β.(a"1ݯ[ ϥs?Q{ ևVOg/FMdqC4Z7?:JR7$ܶk?;'O (YEw>gmuO`|9L4/_w؁;;~,7wc!c^|[/ﶬgW234a-K3}Z8~wp ŌAI6hNKwݶouv0: A0~/ɨQv auQ׻'AC{w<1 c} ^ĺn#TϒL%֋m)vw֞>;7e}C=+R<R Yl7:>zݍ_]ũz-qz;i{ #"MOR 8N4+zp&{;΄B-(SkM}~|r_vpD|!&2 6oQKxmpM| kſ*iJ=}d*؉ZȒeEiMzF(*ɹ yGF$#|N[?Y1fs|[qvb*u 1Gl%|r5,.x I7¿˂MI Xmce*PujBe~cX_|{W HuXq~,փg ^5 Ja#.wK^Wko˒X{Oߤǿk sw4;Ȳ N,Qh/OV7+޾b,8q6 laQԿdPbg?,p_]AEt]E\qP}g]r`2PfYj@@y_@&!(Ƈ-TZ`AC{c$Ja361GFc 7TϨw-i V>qD.;A}:l*K$yx1lD݇rK*1Lgs.YE|ޭZoK()kQb=y)Þ!(Qޔn:dV89gbdbjlmk+/!1%Ș<ؠ3s.o>BM7DO&g6s!.vU8aJ!Ǽ%%7;XaB0 nqƄqihc6ӘH9XճT-G'AXi &xԜvic}In)n~u^LbbWdij`524 >F~[֛/}8w,l5(߲`2{'>k(@oފaItAgn#Lڎ⫝̸w-kulE:H ćadYΊZ܄PBj \ݑ`bGGÿ,ڻ5!3`1 \,x#A f_Bn2.GlӁ (85 C`}|)L.dKuS11')z.%̃Gۆ7+'cF wOKƙS Vh=dnAlqe&+Rj\bta4T:u'U&=Vs}A(pX5>H <ǐ7`hHFP|XO2TsE5N@⫲;m aT~{~DMr @6`qruS¿ӗ!/{. + H**dw/,ǚ ?kHTߏJ'-ir5ABJw "`z5o 8c&u-=4ͭ8Y&2%U:dC'B ~KLi*ÅMY Kli)50<ڦ?mp>@쁉56a8;tY<&(,3yf)-CK}$E ULbϲ$ /…>r%$ۡчLbrsU|_:kwr΅Fiߖgg J6?{ՙqE<8]iSE_*i4% ΑE[<lYZHYH?1TZsѓYQk/i3; ŴC}I} sF?2q6G^ugsfQ<uutQCCbv9_[g,J<J^[NX/]%P*{co^v^wSƒ/dX}m5KTˮ~ʗS$pu1qAr{28r1( 0KyEq-t‰w~=~=dكȌ$cxLB m:>-e2R[; n?KA8 73_PsawÁ?Té~&8t.蜚NMfr}/}˾mvErČ יvɼtEǯ hDE(Hk{r 3;c;)(H@/4syX'mݾٿ̶i!DzA4wl<{z.nBŚp~u' b9WՅ"0+b ?ռcf+2?u5~nnk oS_QIŒUa⾪̠@35d/9$$llKVρ`¹"hf¿ Xb꘣8胳~]𥭀yUZT^@| y$HoU8!',w&XmU#a`Q^3U$n +v%\J y7َo.E.y)Zd1E! $i,?ZճFi >S'ԆF9LW%BܕyfJfӼ "/:$:XW\K< TrWeH[A&) $Ro  RR6Bac\df #*A#|ձmU\RcLse&Jr\وXYPEXeKh<=E/̪XJF@ZpVẂ5֢M8gCַ\,Ա&ʈ1m.sYlDQvso%y; DgA^gz;u5+_D8zk:BAAd흌vūic%u@R8+L4B]@X [i?h)oKEeiLL7XQ^D폼0X[Xe҃-KE8nC51uy]]vXs:Ogf! OA#Ę9b}BA_Rx#@VJmA >kbK7 Ẳ-+lU)q >?`G# e#x(b}2AQo{9Fq`a,y5Xe MRD|kA#TYvDA[Pg  %R--PmQ<&gnY=cx w TST6̩XRzL sYO\SZRzr<;{5m*\+IYwZac2II|d3y:vդ,6T+Iq_WJ;55f΂*'n[pKy<0KPK,#)PCJg |_Q)A&TCRY\'iM vVi;ʟXv+c̐) {E6qۇ$ +*pEATLlxhnYGa>͆1f$jUm`7y mJ>K͉1@!T@c|\@ZR淔M,߿)kO)eA¦zlyµ5Ի]˼:,p;є'??m)fB ȵPZ [谠@ƏYO`(h9%X1P,i*Mk+ȅޣv}s/Mϴ'n7:O!zt,rTJ[ oobVnǎ"k9<_y!Şy{m"?J=GEhȩsm4)0'kuL̫C< b*x]* }O<b? m> WG@I.xURvCZA _qѤy,hhmt`n4[a0bXha%)j`=)/ ySSaS<3h*m ҅ >*}7|O~||VC#JiqJGH'hUP>+@Џք}Y"94 |׭?Ǚ/dhe=g-Ȋ]1\b*HZ&UT%|eo׏Xڎ 0:>5W=52 ~1\h<V[J0ˮQ(V9Zx%;} {4{ݿ*c“;(@9\#%trA=3F.r+SyX<* &j #4J4FG偏WFp|q7 ݐN$ ^k dȚȊ\EEƆ@IDAT-)@,Gtظi11%@C\ RIʟRa%UUt>j@,=iۿٙx$tŀ`Om9  2@'{O2=v*az]0b82?J3J0< eR_&ގ&$H{x6!xvi #,%>;kѫk3Cl J6Fѩ[Lh 64WUB'\_@Gaj AVM `4DjklMTi`9`aM6?u174i8ϕ(@ڌ(鹲T[b]hX 염;L-0϶;[P6Gp#72zM*c1X3+ZNt>"벞Fv\@*E[9(HC#\ ("|Ͼb wERL J=!o$)s$,&qS96+j^7< >qʲSd1gu: p # vmsHآ 9g?P܉@l灒1!9!Ht\ƨ-IEzgCbzu$~K^~{>o CA$24G)ޫwNڎGt DɊfɈ(*yl'ELU%EzvSDzI6l%F{7xP~ Z-&2̚6*0ffurJBa|Lb|+݂EHI&ce~:Bm NFl> O|h2>^Z&7t=j?|_׽n=w~wߵ*GR@5h۪}Ck{D׮\RP[(\BJ1Ec),ƣ =-c9io}yrH>=[#2酣oI2Dmy+=^6-6e-cKAYIC$p_)*U7,/cF~kjmjzq?]%_ g~^H,܎$X`l57%>PR,T!F@hm8i!^m F//{"\'Q9d AXTPM)},$tO3D&o A0J,B NlPfY _>8VWmF!G*(a cc@w>iS@@h;FQ'Xޫ4+Q{w[~^D@ړI|Mَ*ih~+Ea(O㈠uML^Y烙qrNLWj_ u6 <5 hkf?=T@s\:?Qp0F6nAw:͍&[$ ZرDgjI#-9qpASU 毫z͚E0al=]MaD4;}dUܝEiDG`fڰ ~Ya '`2!BK0,e67n* 3ʥ"a$DWpɔ₸'bf\CY?47QP7;t!Unf2>I1\!J(ʽ RFd؁$~٨koM+\{2찠Zo7b8f7po/N .)c4*pJ#c'~"$YP9z' bTVþA,FΟڀȏfDRb7yDʦ,Y^4bPem&X{ϰ/#`;)ZkKSZJ#  5RMzr! mxMNb 2)8?IBpMyQ/߲>B(t|.XlUA2+J!u+r- d/ !kGj9PsEz6W~bcA1UeK~1qs[1)*8J(@a\8P{wq(?$Bq6fu:*k (%g{ﻉ.o %J >:wA8/^eW{>i?&OZwd=,2X/O&dC I(ZmhsyeW,K 3˅~wn2PKlYޏATsiܑ-,2{FеrxͼRCq+K%$'% QI L 1Q08*"2^`yQOK&RX]\(0,&jzHAlab;qefxXAf8?ƣ D PAD6YFCw\$w2q,v]{,b!QлaȚ۲^}~fY"@)'1KCuUztTT{ޚ_$5Ũi Cz1a@6ŷ~vzdw;l8IU$?&kGU֮ R6;ZOR=*\$r $9G=i ^L&φkr{~!KvJU0ƮQHMRfz?m"`@wvƠoqΪva" wKX| AFv=&%)tDl} `G ;-iIŒ. Vwy)wWt[b5ɼa5 ak|4&6Xa5Mm+ݍ* {D$Ԑ3ʗ&]|:"%1I%aϤtIn4q}TOˢD݈مāgRx)Mlpw $4C>]M=;wZݒ 3vX~eVsO;͛ {XkΡ[VV:nFsIbJ 0׶+th>bmR& vTפ3s<~fXoESϞx3ﶭ_K.d:AHFHLG+A_Ť%U*dQPd݅W=tnMrtr8|] +ls~l+񾂨$7{"Y2偝P^<ȸ[^+b#ଋ$.W$-}/t- Hͫ >&pͮ%-|V { Ic1|ϗGn7/R mFY%I-W%2=Ps LURQ9= I:5%-Yp'YŜuZ B#u/>~g/41~MX[DYBլHH5LhY{ #+8 oB%I)~k :|pT@-QZkUh,k?;ٯ {@05s}]6m dSڕ@Y.ixa`wLJ7;{ ޒvԻ˙*zuYv?|)3 O,1LzԼ*m "T1bX֐-KCAlt $eVҴBתh$!,N,UiU)S듿w))Uu"E=KYp׉X@9ahK0A_E5-ܖ*~Y1EM#wu { 2CDd< ZbOo:c_4nN1ʬp*[F 1qy%mҺ ]!vN6z:+F@܆QOY~?AMa6u|}YP1a#P,*qEL3M1L: l:1@vr 4F' Gg􇕏+X.dxÔO. +H4FYy6(UF "vL;,7BjV ^w]! M1N^l_dqǣ&PM rh] r,TˊѲAMlKtO㗂9AnDJ52k?JU9NnR殊@bDɖPБ#j݉utCn=oI{`ݛAtk\AG_Azyx|֙puYVm.Yn b.(QnyZ#,K4حY Iz@Ql@y6a 5LxEVH}(xto=4N჏&6z%x}-”Q,quβSTUzVRlA5.ai̛˫&,Y|C".Ȣz3o~|?|Xz~iZ=Q^gӣ|K1{t)AǸx^Qu5R`(*@z8fp;ϑPfJA0e?\k 䗔 ݒV>(G@ # !πNzփ3:ښZ0=|/d1 =*3R4 =v??6oBvy'|Y_#.oޝہ7 Bcɍ_]I 6[KAըRJB7/4羭źU9yV~ILkZ}R9!)ㄔ*  ^ Ќ^;7dp2<&r񟠀/>=`?v!FUk$n|}93; ceBZA[&KCN|hꉎmMh4pa'NJV[,X4."(5oXY䇕(~ w-u!Blg^ LLҬ{0)T1BL(/%͇ ԑ^?WsN}|u OӋCwc]"ʙ~ynY7Ϲ-Q S2H@%y닡oٙq go/P~{" Lf!-Q%ш๸אDm[tk{J1x܋u~8-*WV@ʀ}y{Gޕ5q_4Bɸc{n_rM9񃠛oӎ;.cɩKR9Չk7S;7 vu>nOgBŒ7qH{ˀDb{ms__+9-y+XMrdZo cݏ45v4wCǾlbR]#;A$婈ƽT*9skwQ z?!)LвPu_yM%n@qƪXI95\ہfq!: 6j 5%i?PA-͌{xI :} &J`p7}5儔BȻϭVCtzǝ/M4v7 ﭂."qlVE483,XDw6ZYK#OPV66RWS@n%; @ @'sYF>q 4@2àzgx~auk@WD*!yEjFAYs WPyX|֒[Ӯ'֎ .Gg]L" P|N R"Js6%RU#,ʋO2Y_{Q̒uh=߳5b;}剂%PAie?%2/WCܐ"ϬzcUKF\^FJ7l 5uqCrmsL㮖dť"`AۮnyuJq~25Xy׶4xSxg8"%o|i#&QlmMCPX>0IN_J'T_k]48;jI]\D*3L/,՜Ov~u4tVW?ZdJ$pU& i' HK F00ןJCEUZڂ\V0~g;YZ#ԯ}yzeYנ{d}zɟZ_,eY|:'^8^/MRJd>wYy}GYR-XMe%)i0 c]^JKYIjUe!DSB^%Ω>x=bԸ8,~wvO? vD(m@jfރJECY pm?hx2; ƴa2d b;&k׸}9GZXCYڻOu đ(D#F"T Mf#0_u]dV~}t۶Է[ q]7y*,}l`tx|UB#J~(r3b)ʊTJ ('x_ق@$!oϱhamq<,qR@ZM/M_fL2yMg݉8k߫"]~M8U$ިT9ZP{y\' w։Q^:`G^İ.P##鹼QBa^ s[$ Aʕ\[;3,׺ ?y٣ųSE୘w#a9ړ1ѺaF& d"QM@L,,JWNliqIX~x% /&[eDeu{J=e jxEY}j[@vȔf |*JFR:,vwe6,3~Ž7o9y,Ya!#s}Hi,qA0M!`l~tK4 ʰ?5L/Lʜ`˽\d̽^oMXaso@glb:M6"LbK?E&w,xxC k2ijS/0%vV0 o/`GC*& wӄ?m>NI!=cR'ix|5}ӺAeı/a!u!KS퀟xV/6rM‚WdÃ?x8WhwF5O"zϢ9r!d:Vt[.gE&`OI#*G;Z "0 1uP`j% 5ibvW'xodwb䣈$HIRa;:KU; .b:keڗ?%۲@I{OSpla//(=kzs έ/:%+]ҜN2Y*UѶ4εn;?ȕ;w }'Dk;go u{,+mJ!k+m⭯ 3{sV(Lc& PL>Y+|0UV c$ZTP1ye4g A6XtZ,;mۂe", w1 ` RvݖV1PhrybBk6}>‚ ntD^ 6hNYPYvB)ie?Rȷc h*W|"dS1V7Vu:^(U.blsq󣡢lKw֠k[*aD-擄T2sǸL)iMeM PPcLd: ^^5(匵=_z+If{.!oxf=)t^v tIK H, P(LX_2@p%m'? [McIk Sm8ֱx޺l+r1YlHz`X,A nՐ5s"fW,JJlդoqse6 DI)xI۱47c5r*zɧFT l^O{|r ϴr+^smLW{e@#6ĤQxLZ-#럔Fmg,jeiGH8,^ ݭ؁9EF, 1=eA)SS! &^!41{D12(asZ?qDU3P "*LZBJ%걢V~uQ A%eM[' f2AƇ!xx(FkHzr9DڄdA}EH7GD%vEKA̢擾߃-;9A|dW7X?7Tv້֖\ zX5ci3Y W&g\:VuOwz* ?¨1m4QD`) 6$5Rl3` *^cF;G_F0/@ZBQ}>RbŎ{V2Q&9}TP1y|‚g.xuq mЦ729Jѥˎ5eҪ"ړ TDOJx*_`'p<*M~kU/ u,(6M8R] >E˳[u; ߡd#5K *&MYt~º $VD}kTXb%ۍ 73B*+iGsTv9.ٵ\o}0(:x(+_CJm U]I`b5D됄+kM[I͊c*H2VXx|?>%n(yGJB#cXxT2 b [=c֢spW ~\rX_nfaRx;/)~X|"J Ɠg;ryIu@`F[6m<ceAΤLh1MﺼABIZJe9uUFCk佶݋vSP]z T%-ےͺ?Ze{8tс˽=J~+AL_5%UGJ~M+@?_)u8M"5_u"֠N]n|9v4 yc%G>0  \/]N4(F` G@<.!G?xJaĵKJ(AT0"ݴ󁂮]Yh P%$sM߭_3HQi[@Wp*s]}4(;&[b%': N _$zS]E?)2B}"61/r,X)V)M 4{)atBa(kώkQx~%=KkS?۶?tv $κAy7ZkGV{u=ضR_@n0@/ޠ $< kd`h} F1Y a1iX?4Dv !.8Qdr)rYA| L_SUQ p]>0k᭭ #5bDV&aBot>ø&E,&1(Q QDq.]*߈:F b>"ܘHsEy\i uFA>PH $ܡۃ*'Oޔudh(,n k{b$ό¤qjTXϦcMG'ޣtU@ԣ `Oi^]#PP =}(C_{ޓE_ A֘ (q z4 lnR,A'JVP12qCiX ޺<5@Jwl?x*OˤA)ΚD L 2vD*P)`#HFA6 A΁M `ccY!ߨ|RXA$禓6khhN3T`<僽HdP@-'35zd ֦鴧9%rCh)fPϾe[x?m-%~=x(Pq V~ˣtΏP\&܇g4A{0`( BZI”iˌsmg f8!}-)ih:BLP! n#}pAl%{/p)#P i-xw[֑^wG Nێ RX0odx,7v}sNJ`]ԉ : V`XUO47Z\H8`"2VPWr,BRBM5QS(<H^+?=(.rdwQAt's M0Ņf1Zb ʲ[ҀLri 5pՀ:9=7D޳((Xx=0Y=k1aAdJVMWFn {oh{d GE$7Xoq G JGJ޴(SͰEQ#\^+uB$E^b i^`|0Bԉ59)Qr|0QY150}񅬄ᖳ85XqNk&߹I؀l.B^ėEb&`uDY6UU7] 4]&O,y-䧘xI?ɻ9K1ˁP~WׇnY"`X T J)o /uPk\qN?0] ]6iƐrG˿rYA#Q{J-/tv4gZiq=j-%K[`q_1d:W&(M`z`HfP&ZPQ{ڱ,A  sV6wR~ESrJs/ϭ{:=}}@ܑohۭ͡.wM483>D w¯I ߐ[}=Ֆ&"a5G\W9E+`Oȣb9ɷ^CZޭ-X((8@ی;6j#-I/LJTCa~͟s- RL%Iqo)LҺ~Hw%VEF\/F`#pRdS/ώW_TW@1!#}>,xf'sD]iɣ}Da5ʂug,xQ 0h8aD(Pҫ/H0005R16`mfb6})6^j^t>aPA W0B1ij=oSzR ߔ>jb8"XEe}B "n) iJ( THfrudj2eWɜxWG+HbwjLF(u #;ˡP]/:Aіb\)Mal9 fXkdZ`)p,UKw}TZz a |Cwbi +V{ T\?"U_]I} w1\t`"9|YJ؁Li+SA3Tb X1 @OVv[񳧵"owҁ=XQ6"~XkȬ1{{(mVuDO6d, \=Lj$vD0&lG Jt}|/;isoiP9߷ݎzk{OY=u!cbXЖuLs}2ܫ窃)0mlAl V &_0J!$6Y;͙7HatVLfC31+Ύq(U֧b+ rLi%%Z $+HbX֠گeŘ`= Bzku d[Ř *Km& qvd[\ⶏTY JS4# UwոTwA=P!$dkqQ?=Eq-t4o?Q͞i>&>ۮ._}moX}ޭ[B '42 i{miT@13=]4!! x`_Pv-s_Ezr#zBUu% Lv Z*2)ju߽x۸q]vhʟ̐cG T!|#NA9_3OE!||f4rMa;4tcœ <ޓu+.(ͺ[ wNF)eDiw zzI#LеZgK@}}]Mţ VO&k: pnUcl795wώ) hnv< rddI&xQE\Ȳ9EY#0p!d^ГОDsB/!v,IU.PAI !7Zu`6'\J *&3xy^@hlu"]&HC[@ X1"V܉vr0CnCe;lXC?V"ʙ~d@IDAT|񹍇֨h-2b$V@G_mE>i5w ҋK,  ZÅ3R2IjKq76-Źb`\i U隒vfAj6kOR**f6 CpE U=nyQ}RJwĤ-3?& 3ޠ iȔ#%OX pyA嬞Dߑf4 bu/C22r}E:Pia(rؚs΁/AF7OuZ雁QbprUp!S1_8eXH(;Rk#L7Vt\hi!8fw~@*6CҷOώ.bu2(zXhqob jn+=R('w=U\jp̮sW2~{؃ruWw:I(Y|Q"bi@hA`kIvlS.][F5 w} %R#I=iE 0E04 wT]y (#eڰ kÇߵU'ZTxQ\ YpqK(jIeߴt H`&$/1Le{(K1: F<`]ʄe~)ܡ)X}pЍw8>ȹ2e;wW󽀂`m$I`e j ]#Wջ##`LٓgIH=0% b4E%B9 Z\Bb#8r`lla`H9WIX䓿/Hzbv`_-! I %ћ{UwB!!ѱ48ks**đ y^>~zDƞ! Ai,$nk&.>iW &1nJXH2wpՙ ]m[yyzzzQ<w)gHTtegXe Y+ MP~rluhd[clb!u ~smKƢy6zoo׬q'ǡ}JFf S@,!(Iʱϭ+7MRTVˋm_AL0 (!7'Aߙ/jr ObA\7YQl Q{R\e|RBOn;{ ,ng/y3mk8V~Oz3< |S6wy,wJqӭ-.FF^ e$x뼛snڲYy(u!sYo:f28HX@I?_QM֞  |D]cRR";3(%_+iG )1`:\H*2&GxUH*y E!xA`I`ΈOI !;B%X8]%kdeo{w/kDSʮ\֒9E̅seyŹggfOU즑Nq?$qA)##RmV=&,QA#7Ӊ\.P( L0W0aޯ\EJ[]maDH{ToIS&){]e?XsO겎ĻҾ_uiϩL&O 2I0"4BaP0S?e|"dW#l['ڽPL eM *FF@ih\r aҮ6[IׄaBOX? x{aKJx # r,k;AVM1aBWɈ"PdfAL_xWQl7l)JM["H?.mŝb+%xqA̔YG$qbN74PCA))ñ\wN,mR[ڵݰ.*`\X!9Յ{e].1 <ǛwKnIqE1ُ@Tʾx%o*~Ym(FwIȐѶ4Ct+p\Af'F#l򻧥,8‚>ymR[޿J1W2:l2eLr%z~| k?B /Xgҕt!I)W%ί(V>6jt})ЋBBmׅZ $FQ^Ee>$uq#|M0Pjޚq4]"][fl{6{@CPe7;ľmbmT#z# b9$?Wܑnv$ HW).\n~/!#@ <2(9u Kca) E0t2l2*`\FD[o">PB\"&e]B> \W)3bA-Bjh Mrkn&rP!8`^B]5+׎>-Ȣda3t@Cu $} m+#Ts]#`]NѮ0%oKR;DceG)v7k%H[7!;%ZJ3H mba=YfXcR?b>t5(?M P͵ l&0~6 (e:>G̭~.(|:zg\D%YwRXDZW>֕*"D׵Ecd D _ضRI"V"}XAHwJ,vg&P WY((kr%dZj ד|ld@{>+1( PRm1&U>BJ0+uu:<$TޱnGL$c+Q~b?Ig_\b #c]iu]d1m;?!~~D@"6 N-+:ݑ-m*H8n]jbE@-@k@ @h=m ߷!Ne a4,YN m(;_50 杘}~HI, 9I\GG(sl 8cWHUEȭ5Ej8;k 7gvisXc|urd!u-xXIP7~;T@10WڹNdiY2A }ﵭW=9=k} V-$֤J|m=G Vw,òd,S & 5RDgn,8Rf$Eb4){ )uZ[p%X_||4'PED ƅz$(r.EB%.W:PQRۆ'M`'xZcV{tlUo1ڬڎkA#H6`Y#ƅKశro2Ս,!wbbV,1Y۹7w2gAE!b i=,s)tPMAB;2,~m"œI,=.o߾ffg@p@I*|E)4R>(gIh!H"]kf\ӷ];ٝ>;SҜss^(y=idepˎsu1r.>h 3w)iEEa9jK4$rc\4+rwØǬP7"x,!/:A/UmTL4 ʩ%V< >O)}^xQZ {pz̆p@E8O56QrT/$kIr nAB1ӶxxI BëQp*IGXeȘtJR[4s*rjפv=M?/e}.ޏQ;w&`Jpž8TڹNwWFfM5IyBB!̳X@4JQD4G/k CFo{D")̒[)~Z U:@pLQo%E .)vvt\K*mvd4dv&ϤKQ@&דplr؎`K*Ezo4QHg.K1R{DKRC)T*`H|lZQ\QS~ͨd}->z@PS|[f'#)̒&"kcr)qRi>{QǪz3;wQ){@&{݉`>7y5dE:=9EoJ$.oa}# ' 7ԣTmXn y֔vGµV]B0{U47 [eqiVu%x3&J)*} SۡP{ Gc!j_!J @ ְPw!q `V,?|ss]pmYixtҺIn/;/^>OgcCFkΖv}tw^@42 v'^s[Ozj҅] ~r5}}GL^} ˶2K$k?WJLHqT?[Poa<!E|`X+;Ox؟TIWÉ%Viy>™%BMr3Fv4cHb5z63o"!s/,A:pnL57+RG}߶ik9P4rau>g!9iES)Nu+O=ˁi)/O:Y]vMͣˣy:[xͺ0u/%5t({cHxe:9`/z_։,Qdt~vپ,VaS[9z?ƀw+OCt!`@gxJ ﶄ.PRzo PR-ג(Ԥ?3)vL( aEœ;WU {(iٱ;(ZX*5G_sܟO=dS*%ˁG:ݢ6?lD?zvZݚs&|%Z<4?ͳLuߓg?~-yFa - Z]3m߻iHs(1z|[<(.2lro޳ߍX٩E?bG}9 psqsx9(xSJP Z8<=SJ$"_)Q-% 8MMj#k։C,)eXm\,BXE |t=~64qƿK  p(}~Yn F{!\,(ں7qDP?Uuشi]lx$xJmlFP"al5%44Y)-@i'mg{O3?=[x:4к:7%D9S=[*P̟?L%%|)E OLW~+')$ bϒVx՗U={VMP{n9`9 NhN|,smKPLBxAl5I/1׳+gxB?T^ `">ݪl ͙,s?Q~0oJ1/n>#!{Nf\ϋ.{5=ōնGÿ_g֚͵ oL2n0r`؇!%@Ͽ{2F\vؿ FK!Pp/ ms>[=ǙOv=c86,msϥu糣]PzvL?ѾiGۺ݆ -ﶱ}w=VGv̶cﶙv3ݿ:m$w,O?aGҕ}MRz sr'֓QF l͛XOs%?v;P3x'cyğw(bN8~ctƤpύ; _u6.ތߧwwEO%ˁ#-HpLJSro7;'gqB J%˩+9.cBJ`c{0GA0*]AG&x[uLvѿ N+qGpSմt穬'L3mu:4ڑml90%#_G:9?N"0[@kBh­&Rח&Βq-M՟~S:l9`9Pj@ihf@Óu/CKE8[QOē ђW} /~V/&|hrv%T {XWH^F:k<0)7Ë.DOF'&R?/ )/wxJ@зB uE$mRmMɮ=iS͙(Y瘤jCEx4Bq*kֆp8){8O.[U(<|D"-h#XS ՝bE?8'I!+N.9ˁrs~&SM#8򟡌H~.Vģ~8IMq:, %W! xy>rs>jn ^L= O~oIŚ~F˚=7K/8)!gU@[SB}uiiH>rE2Hw^gt6U򌧈q6QDd櫺"y&}QA(B\,x/W2 >,&,,JŁɝM=)S 0n_XBj0>tJ -j@a(IB Ŏ>N8.˦#`Z~l G _PI\S2I_tag< ~ާ,!Xe Qc#:1TnC…lxҍRcNa7KscU%e\e=\,wp`j*uo~?M_w){B(WOHLyq6e]4 +c?J!d|1`Rj2δ>:V*AW :cUdW!RqzWe@īwl/_Łk{8,'SgT)\=r`^MpS! A^ AcQ*sm\1MPhwZ@suhHe#ua)pY?a?|}J=%R^3=OQM ƀ_,Oʛųe#%Ir@IW={$+E)NZr#<@F5 m(1o[]I8ʁ}^W}Ӻ=5Tv35)pmtO_&uJRfmC8v 5>ێVp@ XF ##BHa &܎yv/O%!MYdQtʍ#K"p:crE9G0D_!f%.nS! nr>_< g p(<Ļ Cp<}  e9Ks1\*֔y+u-T *qEr<׷m(uP "Uڕ{aV?SgS Y;>׺4 LDhL5m"c)wW;{2f-dF ^|c 7:ӕj99vaGh‘RTI'-0AA7gy]8m!քV\ =0Vf}>^՛ƄDc)-*cԵB{G'~6q."a||!w3cAl- e?"szC]^^gUR]nDF%ˁq`4: 2))F>)ᒷG?_gݼu:?SJkM^s(4s|U:}X jrHyp}p?,d@ɷ lWima(2ykzZgK .Tҋ''}2h^,4U̇sPzS:f&&6AxgT$Ѫ9>:f m泞s dDc2PT1ςK<oݧK|yZR&ϻ~_yE䪙龣wg?@^=P9e,8d{#Xx2OG2j=(EK~gA@VN}>*Fi.YQsEf-]ݐȚǺmׯo}3ge35%sc1$Xrs!m|NTqk70 i*Q|TOdѼnUK;o[97"6N]^R֠G,{-y1= (gTsw_J Hqkg,+4 n[Ww?Wss(E7VAyOc"<ߖ rW47Syd͍p_ˁ s`·;̑`I?0nvULtw:톢˺NuM9K$՘RcbѠʁg;6tҌ2_slCKi({ź}jW+Yů2#dHpM] iF6;UXwm6w11UxQSqSW13xG2Ft{+D.WMrSރ7|9y{73E>x їzŅܹE.,`Ah +!4MMH girAQ^Pb٫Vik7JRQԋW:c?j !J@b+`H !ACxSV"! _6ZMQdzSMLh^[d,^V]|k_5ݶ(iϥN?롃"k=zGa|?mNX=ls5KO{?̸<9JD R5ad!Rk(2 ?(4Hrˁ^A!NK`nvAūUxGjxɚZ8ٮ 4=(`j > ў~}.'D,`AJu5\W<143 l`V!SG@E(>5⹽RKO%F<&ZK35.qyBS0|yr&vWLu[ߨ埛GPa yK".=g*\f?6rmo Jt&IX%E;P!R@S9!,YX$@N7IÈl好qFӚ)cx;\!RW=y:a}َ'xSvs6K8@$`!w*P#Ex 3iQ ED^dA)PKJ<%x_'({q[ُg|=7g/:EarρhNx2t3ڒvNd|kEȆQ;t/ z۴sopp)96?trcRwhcrd9`9RD.T!Z&`\ȚO*y^ȱC) L26Lqa0! @+/i;(- [ߤ jmEW2ZR$ NJQ="?c-**m-g>=D*<:;h&LwTn4:߭A9ިQ%MjP* 'E0ΙFbj5fk99poX%Z |/𒗟*l J󏻦xxf)H xi%&%ykR"{ y;aWBe C@-MD1-D 'n )FnV :NԀq>"}(cjG{K\E跔YOхI-g-I9 4!zJ|~<&gdgmgۼDOWcMka)M-d&,5ؾ-r X{JzvRX>|",D.){[&?jQ,~xA1c,ykw S-faQcXt d2 b cIZPȳg{cT1cHc?Ob( KT 7S|MyL:G9GHn2ĐJy'X'9ДIҢI/n0o1BnB3\\ZG9߬{(ɍirs3xG! nU!!m0b {N?QC S\t4r _Iv/Cg1 Ž]7 x\PJWX{v{zqaxu8\ѮG\=Sꏒ+'j_"-ܰ2F-pXF}3Pi}BBH2S<&t=/. ! 3 #j-0tq][Oړ1+1Ibh5TSq'ҁP$Ǟ*o6~6хyN} ڜ'`t,82rՖop:0t )]((TwjEAӻem߲zy.r"hCiƅOeOEx|zwB;(;P_iA0@6E0q@Y=htK^<<|VNꋒ9oW^Ka(?y 6v:w~~*& b1K>fZ,Rt=x4omm7$Ԭ* ]Qcr 0VWTPQX6`8>Z])j1Żّ Ryc|ZJ^fK2iV" -kT~x!vEΥ0ԛ֬˙13攙#?!0NKxs.3*_a.ו\&:{3XiXF)k]MGDCb˧۝ P@ߚT Hڦ=rr 9w⎼P]Qڍ}A淪VH;7⋀vByJljuqL$!EE_Gu fg^Jyg *U' `@nz8*psyZ<*ٯ)QLZYQD?=SU59UtKhNdrKkd1߭+`DH&#ɽE6"C~.۫ˮ1AQyAr`܁`e߳y;z1uR+~SZ䟽:Mz(䀁J`YBu)b,݂ˆe#s6v#׀%yo/MY)/ Gdҧ/r m XЍiiH#XUܭw VNPg4/rpj=/?]`eĒܰCи[R4&gr,ml6\ _c8&DQ+QTi!E6);uFGT1"QVOL)o%/ =EJUf11'v_\ߧm9In!j^+^ 9OTƋ@g!ANjB*$P1 %% P07x?($a 5ԋE࢔>#=?y5UEbt3=W_d)[>Pk*4O:Z0{-]_EI8Bi mk_a]X4 Q֐cGx-Kl<j"J%bFYX܃ sy(* u 9ܽC,Vvwܕ#O`lԈE0y0H^ц -"8PP|݈J !b<90nH:l<#E]/K0itۇ"# ȢAYo["xl.\9k?D*@3A~Q}b8HjO`1Ymr`8z;=*7{1ߕZWd ́VΨZg k!*X?7wRӔ 9J%{4qb 6-1B/*ZDɻp%\TUKeE1:E^Gtz/Ȅ.מ ATI%s<,{ʯNb@HǦ! S&މm؇2b@=|x"kZMS~sX?E\mrp7kM_(/U7hсISvIps^('>vVo>~C{s}DӶZrJ!^2lqNǰk=8n+mUK d^@ÆoTP- g[l$yAфF~o]2!f.!z&LOz@=ÚG)$xLnah"@c]Y&#dh0TAf@x/M%K_``}Hw~M7߲(h{*O۾lx_cL lF4T4659%Bd:6^h0}WXVAq;K j Б 56XZÔ, ^p%u*i459VX:`F C(ݦ  {ᙶd9DJHs_Ͷ)ZP`eɠ{}693[*0 b6\9"gTNJ9 uКvC"TõƑvd -6W&&>MykN6$ZاB .@q7IwG^iqp ++{|: p9Dƣ+g4N&`P;WEy6Ur%OoUPOY+`Mz$v~SQUTۏn`#ʰ~b,V39o tfh 0)L?Zª7B:'Bq C m;-zjk1x+ܫNx5Od^ET_8O/~SVV)5jU}2''Np:'ۋ-ڨ=)~ kK90:.͓[zvؖB=Kl:"=;F*I ]+cׄ|08ܟKy"C[D01^t.k2D ex(׼thE;XIE%岑o}Xg=*WzߖR"\.Ho9V Sg u֛E(}y?jj>Po!``|ޒO_UͬF yU DH*hCuk,hl %»`H.G6M)2<w޿]) f[#A&v}33! LXtk]'f O'ŗL9e LK[[2>FYɔԖ^46C=G~E1Tl6 q쯷>Qx^MP Lqe9R'kn4: ob^DŽ2m~f1}D铎7qhbQ@ 1@/3e@iˎWCOxưc[:PSR'tݱMMi`vO^էm6=V;h2r|[םRWǟwO8hxVQchRF_c0዁3 x&dq4r"ynYvіx BĴZѵeRS@`F0="|Wrhvh컨\KA1QOVt*=mqϼ棬Y* mYDz ; pP.rt8͍ eo"GP1a4f;/FC^j>Rs*ŰzSU/l$;SDIAc^ǶR$8$vttZ蚓W5[8 8ځh})v$$UjfreF/h@%"]bTVqٶJtwxqwZ3R>c#g/dpǾD< Xxʬ ].zp;!@uA>1AG)31by̺T+*@Dt\Xⰶ;>5)+!L奥pj(ѐd,<[IFiy]{|@\+ogJⳞBbm87R?aqOu[y09A=@#Is>uHVx r͗Rws7Yܥ[;5H-H~Yn5 ~Y$ 7T \cxzM,^$=yy"Sy)ïcv`[BϹ(H2(H^PK)(@FP4vYmxV-X5w`Bc Rg6#b~`7Zl!뺈 X#4 .aOk@Q19 $QiҬ{?|^ Ϭg&Ch?j3T%AHov3$ij6>﮼^> loIFQ~괺Լ UJKG iQqQ`YP\%C`[z ePB.t(O&VAmOvG"lb'ƅ X},D4C^WNtH^ 35]/5zo46Bv}e;E^19N(^A#a(aris%>iͲ<Ly8k֦ws""3bOh,&xYAEwђ0)'PL1NvOfxi o_^y߃p50Nk̋ɀh# Q Y7'yDhn.RN%8e 0w%̫T/0HZM4wz Ӧx9bGq>8 oGPne &!B~Ga q.Ep %PkB9ǂiR/Y*4{πK%Λ7aC sn+d1(YTFGřHڻv!(b&$D6$f(3{KpA5rC΄cL5γ uo܂w2 1MxRwشLT3+"7#)ߒ7q4.dnvj&g;J"zDd X>&DLK g^ơ"ϟ==ٙ14"Ԫ9rj:8nO}xDwbv_|iW}c콢J.&)+SY #$"\]*WR*&T<nnr\OtsMDcRY \{#%b qqo*}y cSɢI;j#={5HG=H8}0|3KOӱw(#l&'9_DD jxaog#9,Y$倛ngB ?Jژ~J֩0E6a/^y6rr =08DJ[ʉ1?-K]"@ p׺rO]f4dh0?~#xZ#PM['n~%4w(,*lۿ8(N(T  |qB_o> ~wUޅG^-ɿ05rL述>|u(Ȑy;Ȼ<-`Qc d9rW.y ^s!_  bTmp(DNpBϿqi#Id0C:D7`$l8_vB9Gw#Ȉij!Cxe>tt%P1k_l_DZԞ73\rk[̒.ܚ8 vwԽwHIv_ 6fp(U3(p2AzX9>g U0)Hh{(! MBϷ;Rsڮ+r}U%X,YX瀿tPKa(^J4~ `%yw Am8xpM4 ¯%ˁ|`M S-gOSxu:69@xa~K)-4k'uaiCyoiˏa▝c{XSgg_JٮJ6U\,z@aQSD,T-&J +㜛H;E4 sRAK$%Q! }-7lɿP1puJ |ؒyQB\.~ߩ$`e-TxQ9QmFݽf& ;~b"xJXZ@>sJ,zy*8qT-ю5۝Ӝ0§z6w1wTu9!(&fnd'KddR.18KQ'1ǔ ^۶v(tv(/ƟI7D0'"!a(2OĥMА3n8" 'iYoE8q@؂'K=͊Ċj3YLp~ղ2KO7 , ziS%0ygWz cjT2¤ @!"z8cYdypok3Ҥ)U)EFk`s#J:7 Jv:r=}ʦGF`Q6{ihZWa* 8' )y)w- W2 @,'Z戇X@9MgSh|8byT܏QjxYN[qj]g#2/RvixXǜOԴ~RY"^v򔑱Sgo3Q6!z–yPtFZM4ĩmX#qSABk]Ypsf&ҠpQ.ShW)bf&!UuYIq6A7ԊU$%Y1fcdis1UP;̩N3J$vܾ, k̰V{!a$  a9/? .2Cusscgٌܡ$.6skJ5>YZ0{]9Qh*?VqCa #j ԓ\h ,,x߾)<} $R|4NU]'v%hU0ʬ@Te 7!{;NEX/mo8>gصk vVvî!x"b*"!ќ~1 nn L]w|0*LORU<oѡ]nK}$Ƃ-)fzSxrsK>cúH_rE潮#"׎ݟE)[Jde=}g0'1Cl gHN7bnd옒d#GXXMI8?P>njPT(oS;Ovv6$x xšᙒ2Dp%b4 Zy 1RX]^4|/F2$dsE45rP?刦(}8pfͲ :YL,LRRQT%ˁ`x^}3 7"|Fu|Z FYs*HO?xdgK%>@ /fTf9&D N0u%¤8O}a()+=rT?epcp%?O/>oXMNDŽɥ†]|;sꙢ>P&Z½AeVݣnRRQ,ᵉP_Z` ^q}2 ]u wGEgp6 phQkȋ^]^)jǥH {SlnူԬ <_y = S!"Y܀>MVw9a5jSkªp>JEA72RHl3?(@8 oCik,  j Kئ`|ve0v *ei|1O_j(ੌ@O*V/f6hlήNG.=(a8 3 Kܛfh*ễs{%Un$pVH%ʿ;Ub5&PkEV55 f^]VL*],0>~&ʶO$Tp8r,,< t5[)DS+yJ+"!: E|J=\_f{sSsFJ4"ޟ?]Δ߾Ȟ*iQ:-5ueH cK8ƺ לVPps3Tق\UqPE&RѶ$==od*^n3:&u\P>\FB+xWA2\Ɣ<')ixu!D9 ȫ`Vc׿ /=Wxbhk; ,Nc>:TR`ᷟ J:u D.~_Sz;-Uj)t.r!x%Hr i)Yh^6:˙=_ T6tvg=(NR#xu$sX:0|D! `B`n@?C*,W{0qE`}oyK\h]=cm|R%׸cAG؎yM㽎=)8el Ie{R-n':ֲb%Px@o׵'*=*kSZRC!:_:/\m<$уW])juĔ BZھcJ/+Y)mK~GjE`8K}&RiOƟ;;2dcQε{ gH;&.;vH18JXX7L $Exл@6A,$KRXV芢?T>#JM\3jΕA.|׸7_/lˁMs`X 똄 9M?[w )PG:N 9S|?e (h=CxyF%)i,W_׳Q> g/ERe?jw$<HvC`LyDu]xB[{:1SV2F 8>pd/ 14|eLo?۲yi_ jT/F” 4g(Xĺhr`9w!+ECDL$uECMP9Bn5vkkiGUS1L&ʟbjDP%;r} %Or}xtsv1O[϶sjBv?x⮝ ]{Rwg8Z;8^q5׊R$Z P"ht[~ +#  Q?n#{[nT* M 5-h)`(P,dwS JYX,2~RVˮ2-ZxQ߽;KSo)>ꤐ}]vU(BNHd[5(! 0pҔl9P:d钆zo,ǭ(eh}*Jrh⢬rtS)IYvGur*oaXD6BK/"I匸d\}\'5$,X$Q#YaI.`(NkU ڞ01Τ}'eu_t us{wJJnѷ_"PB&j4+@>iOܑ$ sHQ@JedL^^=̇T,B*.ŕG(|0aH mx%v iwi@IDATh?OTQClh" LJ9A#9 "4-YIO(ʯ*HjpIS!dqcO[k<g3jQ)gP_w>.Iy2}!<0+wC!iZfsV;]k/i|XxL5;?YEαfP`p1mp҄7?{I5.\G$ :SN:yۄUcZp4H3+O#g&Pla-lDA/⇩"`=tC:DSc*  @eYcdpy2w-l*xeǙ +G4xhOƵHisʇ $(#G& =~PCvHuG*Ue1ΤR0' D^e>c̓ |{9!y&M>Z)n)3+nnv# (vA<ʠ"Deo] ;~dꆢzγħZT4]k-4dGV<{Z9`$jMS, }Cp0yA҆Rؑa {E<7{8m~oVͰx.SD@jNJ`"ƙvR nsQ9J:φ{k9P6dsgtV^6>ōg@Ϲ j%-)^1>ۺgؿp5'ӵ&R_C)g3 P}jFn2*𼣵R2@Xt`?X٣FO̖,-@\5ͅ|}}I,wGiWߵ1,m!b|0z]:W g!H# C$7 }QF~m @G.ynh()eк%kj)~)s9s)۬{(Nnkw5oѠ4ZrT[d>-Þ֥ <3?Y#olx"l|KT1oRN"x&OݨVjcii AмI<۪*If( H--*IM&!]߬ J/ E2u(q,XK k@c]<9t ׉*2@DM,O._S3E  [lEFtSkmcSh݅jk_*Rw|nne(xu5QȞ3EREO9Y͖\$csl^Ž^9po`T¨B|gK Eʏ URR9[X4.˞"]5KQw!Eqk!PtH;@ 8wY_\1n}?KKWF1f75`n iZ滅6QY[7!kYs5ޙp(XWI}a]kEޗנe{Vy}]$"P=E;w,Dx:A"$:Ycϱ*;aa[RsUt{::i+2)"r~2`,rq]+5J=?)C֧ ,~ӓ8#p@𝿎O`%,DH1֓|SuU^+;++CUeV߹u*sVfooQDxY! ac𳏴P(:1>elG .@ȺI@! b ߱~$骲ދ_ u'UCBtC)A|#mПuWІ:g ΐQcޒ@K) rV @%]/BoL`կ7- \_4;m|y^K=utkrq(HoiᇓQml2I[s½g^Own'GA4O뷼q̿F '(@?2:}f`@sflaE7znIP"! nEb3j4FN$lߝ A-~Ԙ/p`MM23eRzfq}&2!ysf  ozc_'S(i; oΑ^wW,vN47]i>W ^wͧ%}1?FXw8j ?.f; ' nRɹlIftj{aI1nDr_w4uT27 "Яz n=aLBSKYR-vOv0_9&:C ʺɆFAA32F.A׉#CK6mH;Ah Kd) `.xe(T`0ڥP:^>Uk b/ åcؼ`nFk?{B&7`?=?BƏ< sI~81]]- &Lìƃ/pyl=s8+wh9 bݟ?`Zsb@Q0 by?^ZC= %_O 9/u]C0ΝglMESCzX-xz)?~dxBggP/%JLl!]G<Ħ+ Gװx~i&b@ -bFZ &P#sh:!Vc ç]AϗZc4oX )G-f]$f8hEA44RlIh&gDh\ǎ1ya-w7nlJ-O٧mq4ru]g N>ddIcp .Tf|D4x龔&J+&|O]oY 7FSBF^F@SyǢG$C.֍Fʹ#h#Hh|@~v!9ΓQ,2qw"S} G1y/N{\sZ3?s'>@O'**ypm@fZ`D:l aCp% b S @fIPӜ )0 Q5tSsq/kUA?xP``H9G1jKUUiNw*9Uc}VB X>u8˛lu&z%|q eLv3|4K6&.=?nYw>8Rj3Hy>1;6].cWL7'潦h4yoai·zu-T^bU|C"!P^|2 Wv5Egp_t0a烔j?ov7͏ϛu|Oik2,h.#/wH`< 6Ȫvaf@~ p5$\~ǻߛ[/\|QrEr}I;w,UPH724Yyïņ #Xшqvf ÞI~{[Ċ8GHJ6yQ[J -k8 PN(X1`Qp ֖Wƈ.)WxuZIײ C&\C@Hpyw&3kUhhYBj- 8o:OoEq/ :; ΆW`fr$c* %H笍 ͟0&p+b dhٷ/ͻ_' vO0_V#-E$s]*Bn.a=(rJ0LlI%K6M>G]a0"̢C&5_ r7k\>jI2TB'sW:gfMt>qmh]*@ѱ(j *uqsz2-є>Op42(0^EsC_G"*iM,_q$7 X'7*Q܃wQZfT8oo fƉ<)?Ƞ-3{މ=@QF&&[]b$<x?nd݉Z*oz~ ]:!hE -dX`ѝ6*KlԸu%"9gិuTVJ7{nu:E^ ;5y;/V/s5s e R燩H~f}CƽB~y:MqW%%dT_8RX' ToL9'Jms¼K4yrIхėba Ņ+Md P+\o{I~j)@Wͽ=,i,l."cvTU<9;z]{!Js{Gs7mRxL3 ŀgs?h9]KssΌFW m/ԏ\`,d9>}F@Df{G&}YS8H3%Pĝ97A\ǰSXCUĀ$]XCP}O+?S5(-A}e&/4a] `bU}p|pW"ٯ73P"HJ3g15ۯ:" &KQ9t7*ByіF]AuqqB7IiCC>̿m%q3ȐxQhB4G$z)77Ȱw;6^bsw)oBdƀo 7 ZŸ$b'(Gg%rT$lXX(9L! VrY\~na@37ARֱU!B0~-Cf~|\ڤn'.3/P)$Oc;:뿂8X{Mk>e(֧L>A]j'jO5|ǘTG8(rFf%A)^5!$eJ" =Si̹θ; XU}Khd?|K9gs4"Sy1X>oNV썹YUKQP,L+-.\T覐$AAXd/gf2g>3@GkqrSEf ↕[2xXlm_ó^!ڳ\m{r|aDz}͆߱4t[?rۘqU܋]~ ~T-^! ͅ29Dz3;u&n? 7rVJ1kۯ ~Icc]iv">2{Y)F-n] 3(<=gnnؓ2axyVE_KGx"?t4%+ԵpݣF$TsW5ggy__v#SII:sNp <1O M5dBIkB^I^D¿3DL 813Mn1h"n͵{<~{p(^66_Ujʃɦ} haAo?>,u4o_e=G=$ 7*b(EA2Qg 0} w (SG_8=g>#D@i5ڦGB OqSQllgq'x](WRLkDARH`6-pZH`/X~ P闆kEC4ifd ^2jCe ظnS|8)T1U X꟔NxhAoiv_{ o#oi w]XTNF R۫mГ1kG&6s]Ha{ t&v7'x'~KKǶ H_7 } Bq& XoD%GdW(*hfeFO 44HMXKړm[V׍Н+Ek EXD]v& WGL{VmבW &±qhacE uL~_M UgOnԘ{?6Lcua)Vf>ChZ㽫Z2;gJ)GG ac=cHW շi^ CyôqH{#SKw_! cc"ӷ08.Ef:&HTR0ݨlWG onW?ay&\,YU -nDB .2DkLp}%ϼ-dk : xЏ|MeF)I,34:#7LQ_㢵rͼ.U$4`z` ?%;IYjNZ~-yS5Ĵ=s9HmITAcO˜Tp`$>44+CDU󶵉|#Yt}=2xc<!Av11`V2QnWt;i`c9 }Oe#KFE#F;cdRX% +{Ur]Vd3 qN*0w21#7nSxp%$կ\/!猭ߩt3#Qv=NI4+?IVzj0%L*?c!Zӄ44g]w]rkުXȴqbUmm4aDlɨ:u. =%lVJgsݫ/8a$^I2XO` wk`F;.w s s ՘F`lZ& 6?7_ǵ'1q-ɷ3i8r=ծ ކ*=kVz/g}noW}ſCa"CMQ#)4DZ15NZ&s3 Ɔa8Qϳ$mv 6Nޭ䥝ZڛF7a0k`F֌  / g&yFjgᘯ ~K:(2xk=BROS0yLu .)E'Zot4.b vL2/+`f?f܈$:#g\.N:/!AtUB@,R: g=/L w16r2)sfKF؞i{LI74ttROzg[0M[W fS socp 9 %cp :J#~6X)8Vc$%>LuQ;׀ͥ2nF/?}y6&_jWնW;̢!*?XSBuwEB@lw0K^MI|&i7~\}/.*p 2ddiq|?1e QDs;'gqc@frn=`s+_Rú+4)Μ0|2Zzl,1f-:c]IעBޛiݪcҪM3e#iTN}SV$ Pc*9 0e%mztY|˹o&7O ~5#clZ`F eˉcޮScQŘ N7 |GZ&?`5a_AĢK?82QM7wG`pZ~y6:ДUz(h9HoyGR5煿1=DE\_Ĉj/9Gh&nV^|+lxlS"Ʈ D]sB@*]db2ZYiba曵$DDmwlTѴ` g :v20WN3XYُ_÷WY^ Ff@aw!fR|+6hIrįb\:-}=_]9;kX1EA1j0әZo^3&B۰ҶAk"qҁr! ULSkGaMcAEA_8ۙi3%q & @79䗴T{1ONjqL;[!jNx?Qep}|Szcߙ1>K)}ȫhf}nJ\[WAw/\E{yi4MO…qׯ|A-7GȮ i-ZN]hK+\QN썓tB45B@D#PJ )pV0-GB83'@|_)\dhr{3'enpc(w۬˾œ]:sh4!)e?xz>I+@3.RUxBOLH5g)Έ[St}dǼ|ťӭ-!}Y{Ɉ1 v#-ҹ{eG !4ץU h)y -q[z(@Z pCwS?զ%6[DO_{A׼A|йjjdǎo'7lѴާ~.qiw;֑B,&86A鿹wkEGic9I?Eh0!T~sqEk@u\\$K\}yý2i##(B@C 7W,&[8 0씾s3&%5]i?i,jkGsFZܗ&X$􍼃)!|HJ]tregHWH<D hE_?pAyUדٯEBZ0FŌM'5wE#D!؇$ Q`];i;}Owg*e{eP.2_}mǺf cJ!q6 >+eeп~pޢ+@:VRJՆB`LqCaR`6b y޸A7_?rӑTc|Vx s0bQE ˉ9zOQnʢ4!Dzo9!(P(Tu>oNz/ǸWPTQm}3zp4WW@+0LGn?f ;`6ۥNRdx8:Z5-uVb|&,(kHn'IVY! XdNs19֜aGl#=jt#hD+nRFgv'm, .L!N?c$#7Hݢ&_6S53  mbߩojIuc+9L_!@@?>&:}B`B1jTuUSs-z&JZMeюs=.Zk|w|o<]k.ZB`{Pg<-~+*u?4{@_K@V_m/(`44}Oa N0:Y VǃT>.Rc+ "G?Hjt DWuusXE9Yi*,B8p=z#'NGK?{K6پD*^ A)t2hWV8s)׈B`W0nn?|u]~.,a@<u8bD${~=™@H1(_.a[\ XȐOjEW{?arÝ6EXy h qS/5O*'DB@!ֽ!#}( r!0n<y(YФZowmYSFÍa 4]RgP1:3-]f:"ϢԮ)2>(%aG&vX tv}yՕGʀkIw")Q Bɿ(HB\>*Üަ ۶ ױnN\{|,)fԺqm0*XDRp!^,_Y]/p!qmZPW>}u'(OCK,4! (&+XaWd/`vg` wHW`r*M&E!@y)[1musjN~>F /ٺ}8)|! W?0g!s)繅SR&*<עoB@dE`2/uiJ+ɵK٤>'ZŃ ~ȀENh;B@dH K'Z׌"e-["umGgt976DJnhN(AojFw ?s#fݜzo^:ƓsΉLYcxƹ+P@F=ʌ'pdpPb%B`p4DBOO~p&+È{ X$c&ѣB?n},5 ww#ӂ55hAux6ݨ5TIDATER}t8`^{S廅h5W|2љ!Lbl#wZ(X5&}3-݄RV7:>2Cˈ,,ε\Y8LI! r@`c1rVUAj4A}x''%Qh:^vп{i38U4a||X3hg@߫bcDZlS~6O78X.Y! ʂz3E F`p( HCxzW73S7Y c1B;`:K]a yz^؏`GFjdDCę2t8<„?4Wm:m38׬!5ԴLg!R6`U$vj]v:.!X 0͍&V׽ F^x8_""t"A{=D,x#Pg|v DB -| %oJ@if*a DU{k˷m/ƷX _3B@ xWЧۑCףFDG*;׿Nz5D\ ZpsigBJ< UG-Q(˗rkܭ\a]5Ew /E'x+(4U!P*T\8*482$( I\gt|ڶ6E_Gv px]?$85#`ȹY'3 Zy`]YV f%`tΙ/v2n|oSCA؝&-i!JQu̗ybco_}ZL@]NRŰ ODŽX-m̵3Z/S]d] .Eys4n!?uS3⹸ow|vmn>E2Z$:M'CL%i`ZUcKd޻-.YQ=&IA0뻯X>|]j}=B(sAZb_t"iuB@䋀giʷbՖ/]hH+&fca GA3RO߮:6DK{\/Ҍw:˘Zǹƍୠǔ| 6̋A$"0~V+t ovx7.c0 M 9FW<)-S?;D; CFvow̕~u-:w+xټԱ!@Im|=ߛOQŞO ϕ3t!^cdS0"!cF>_;lK6]}?>RC: }DvTE#dtqZtwU" 9TkX94J " 6D.#~>hk7qЋ5/\dlgfж%2s&{4#.-\{6]]D|FnMI O^u|_ShJJ K}k\8 d{K~wpapY,TB@ծ+*8j"Af)T3i6[d#27x6"? }pL㩳ȓw?~:s~^!v$&go)J\.)Ih 2o~0ިތ@_ok˪BHf.,‰.蚼I@^|\B`8n(ž]w׾vB O HٸJьFDDuGoyRW->LMXݣѭ9'{s(M\=_$ռyA!oo>ph%Ch >xgn#F] 4̫h 1CAKY\%{xu B2 ZI'Yj Z*.9q)3ul* `F`ub l뛏Q40K:fQ[6M.& /pݛ0f=drgƓ mMTS-LjUMc>dFnimE6(dFf|i ih5Dp%kQ/"-wVE=!אJz3u mT.}C~wdz}fxbF0Vp8v`puPB@! @*%8qT$SU47Ƶ'B9{;ޅ1Ȯ/lyZ}QxNbA&, nƍD?w qʁ\7*iO`V 6 U 95\1bLΔ^SIsIQS yb ~o azLQmjTH0" tR_5K3MG"@vg+5`] vs ,Ye#VIsL#'tUU0J #,;ڶT|qpuŕc ?,SDB@! 6nڌԞ$J6I9 y章|Y1y}Oqb.*ij<~ !h7G?}|2?}( #; :?%NBz HJ\ދ㓴NB@!`PD7hBt KG_lܱ[i_Bqf"ME4FcL_$4ۊy$2YQqߖ䌹mrI_!աH! `Sglc08nTDBBo1xyh, c Fukmfe<=Cƣ9k8nY>ʍ.r@$B`SH)3]HJIfO3ޠ^~M@*6(a[Σ%@Yv5`eiM, >[/pIĞk6ۖm!ݺeĮ`4\ fD}W)OmR9! XuT{Tk̿$~$PA7ݟ?2kQl4BڡIwƣ܂)#ju-.R hgKruc/S_S=a1eڴK"! F@;M߁ fXf,5 dO 10 =nn|OqG3 An/Ri,$dB}Mͬ),e<]%wEÆnJ ~ʴ/hȶm)"Zm]~[Q5B@'ޖjX7CXuVF3 ?xe *3 @FC֑iי2s 1O:ƿĜF踙],zw5 ~s|G1fZn5x Cl"w'kQI/8 ?W\k/! ե67W}r[?%gX 5jEA^~с){ћgrjl [y)vyUR6a%tm~T&8&HFؤEej<(z\7}/Ծ(TL7 U#s@dF$B@d;wFޱ8z2}3AFAðd]b>0A\C G 7JDs0Lk8gn;w?$y)jDB@G .iaٞ4Sh9o-`V`DQ^ͲeVU:+B@ tS$՗DP4/t+c1_! V3kj2.n<o?~ԫӟڠL/>`Z@B@!PFjx۶ P9׿n{3;x0` $4$5Җ@A8?dqSR_U՜b4tdy'@tB@"PFW<щHBUaj.=okdQiPV7 B@! ʅ@E r0V! Rƃrh3QQٲ ! EB ,R! ք7`Zmf@)=:SO c-W! B`MToS5#Bt} :k?Z[_EAjU@:B@ -+V #EXѩx`hЍ:]]`K~Q\t N- !  3@߳2z zLC6<tz CCyt O7A_B@ ~=!JbVG-x0?e^0^_znl~_1 yH?^꛱<ꋎ ! rZ[Y! +F-WCӻQӴu`ǣ{8Cr"0& #B&TB@! V,V *F@ž?]:fЄSp{DW}C3M8t/33LM 4b @ kϯMB@!f'@EB@9݉9򬟸Z"! Bh.mR'@^,r~jE[hˎDOgQ(P6{qdi@Wqh^4z2&*ׅNc.X+B@! H>B@!8?R5oCdNǗ>jCVFd6 ! G@.ſGX !U,|P yI"'M5Ġ{t xAۯL稱6 ZIahqzB@!`v\ԲB@l!̋f`/1- &! 8' S^O. ͗⧞`]U;B@! @2HvJ !PZ|@$֌%FI|. @ .jw·(S Fp؟8ҾK]UT~j~5 !9(B! yԫ:(^tW]./ c4ߗ x85yj,85[Us匝u3G00OlN{xpX7߬=;<7Z0H! ( r(ʝP?;ifԄn oL )iםlvoc| $?1*N_&WwnJ3!a?3AZ)T977#PPZ! y @(!PR\ `InF'-5ȏ^WI4a)`}'B7[]7 0)b>F\Z0GNP05<'M$ 2]|1! B0U! V@,lz>~ #(N&7y&Z(@Àxd!0B"e xFU߄B@D!8Tu !` nbɆ@,Ԁ72=Cӂ7Ia ~-Ll@-o |9/bkn4! (~!`@(LHb;*2V =^}>_ ڦYDB`Mi)wSeXP{B@$B #ffTX! 1WJV YN{}n/.6JάyCÿ /C$(0wb&Zz> +B 1`pnL2ӁOve}-j`u\"{֯ʅ(0[பk[}N |\׊*]km31wF;|y[HqxcI}?y!@??aCKB(@&2f ֆmYfQurggaLAݮF{N4|)r.״H ;yn4WuuG! R! @*t u"@氝˼b^u#K[Wg}2<y:T\ !*^ #X7:,][㙼Up :* Q! ؜jG>—Wt:uB/KU3cXdex==DM ?8QSBM+@$H -C@-% &9< ^lYUjo0 7'λ%QC 3cj-Z3i2D-?uxjra?*^ M /t?A8ջ)]DB@ @In)@ o >C4[UgXzd'3 *qJG>C044}Ӡ6m~DB@"TѨB@!Px>u찿?&ZOf{G`!pg>~k=]b:/B dOW R#@ SB~ II&@ājMw?5t23|h0&Z@߁)Ԅ ! )`5]"BSCPVT DL3G&n0mtg|qz)W=D7HiS/zbPsB@! Z|~1 !"F^B ODnٷyZ;mǴ;+C⥼Fǖ B̿-Z*'B _/M=+v;!" "՟'d0g f\5@&B@""5C`[:(B@ @ Aw_5ը{1tjtOB@]B@]!  ) R8 =|4{@ W/Fc$~jIԾ.usppV6 MV1FʼnE@B@!  @nlijk/q *Uc, LGfnsB@!Hw^@ X !}GéG$B@ wc!i:xBzSsU}*dUB@"Pc*!B@!9__zo/?! B@D:]& @ C@6褉/{`w_yB@ y_+! w{=hjv_! B  U(KD,}S' Lk`FR]zc3TLxb! eD@25YE mMN#;wL ! (>j[=B@!Pzf2^@`tP! HӅB(XFP~n>1T=B@! ʃWB@l!n #̽,0! B ;C JR֩[Tk{_wF. V1\@Uu ! (6wB`X)\#a*Պ v 0xTb;؃k6iiXy5*!  B@!6Ȑ^֞m>l&`Λ{kς+vZivM]! Bp7_z9UVq쬄e+BP$B@! x@_1}B@l+bm%B@!4[^ 0fu* ~;7[#B@! ."2.b1 !T$;Q ! B@8 P$f8B`@oNBзGB@! Ȋ@nb5gff:GqB(!JQr3! B`sPKȇA-c>}|x'㙹E(=:ӪV!?Q,ںJEB@"@ިz}T`*-Efx:7SAgf<Ī⍎Zތ ?YZZUs ºY6w[ EL&XEB@! (M]7-j7 [͖Jb4im  1_ac"g V{h=:d}!X^z>zssc}B@! @aZrt@?iw U8:iB[3W0uhGpF߀6AِlwL$8??7W7B@! 65'-ڟomJzV1/Sl ۺ2q??_VPd/Qvʹ.u?tvkB@! @`D-G?s{ `*̷*@>``)hb9E]tw 2d܀c f-p5׽>AYKoVۈW L`.J*|_!StB@.p]oVttozwUF*VFyؓNFf5|]Q ب! cZ0hw'A&GƢ+o\kE;ٌJM}*#DChhCI}D=rs903*oU!@ ~nf>!aCEvlh ?_]! 2#D`:6~fBLAVBݩ{1oxh_'PC@rի5oͫ[J>*M'k 2GLmi >],6Ž/_'O745+$_}d&㡄HYs?C ,뛝׸f{0w[r#q2`gӽkjSg&M)Pt\!  ӒQ2>T~7Q-3Dnu 2mO@+%G~:330: hw!@k@m|/dO @µ8(<5\TB+ \y~EB@y`s~8wDo'-B@!PT4 | jB?*%i}&"6`\ܽL@#H$?Z0lj_M7&К;ߺ䆛B֢cR`7^iJ @柖@Z%?G.! ([ogs:sn/0U`P`D/k3`D l ,B7wVEQTO5''[ CZY7B·׮3eCBl}EB!1][4j E!pcfɶp'sJ*/ 5h<켍, Hf1FW(|' X8x+yfS])?Pw+BJ`[ʅAGĥFYh ᵀA/. yBؚ9=?l׈5! @Ipwa1-0 ugGF$[{AmK1U?'dL})n.%C̿w;}Ɇ ! ֈ33 8~<NnbIW[2c ? +h䘵b~58%q=s6ߣ|u!y WEsLP8wıt \WyqǪTcZx_({Bl}LE?o|x=oo [TN|{=ύMa {{g~4G&"]3 i?]=,ᅃjiUn_NRkwkhB S|xU 9[rGKޯM[t/7ptxqj񘷢߹f)9hdr݄oG54a?wwcyߝ܋Vg߬gV? "O6|0͵?-LKΡs^Tg[ۆ__( BQ.޻BIȥS,l:/; 9R7 =R<}ܲߨsnyy豿 BY<_{,=Uy}~` [X.ta~8Xwq 2lV*oVe56*q:Ԋ-jQQ,JY=Sv}paUsg#$Sl4t? % V46nI6"dΘ83OEP|1Ŀ (>/ % (>P苦;3ie|{g蹪X-2s=+WQ+]L6O w[C{_F qb Uvz?Zb1@/zcs>~if,ӈUSjF 1_Mjbuݠpamhmçϙ>a\+5%QKFkm}ۖ?ޚD\!~6,-7SثŜvķ5Z;[rmS5{yDyH}r9|-ăFAJjI.[/]mK 7KRDrYQO-Q||6 (0 MXd(@h2_f<:”_δ*d>e\c?~,7?& ك^2Iq2"y@g|UP`opIDATX VKoY~8NxkHh رAf?@b3aЀ`1i@ @(L@x%xqv~UuUWuUrzlHdv\٪{y|Q~ݨqv)pCWrj\( (ca^ ?sPz`?X,BaEE6Fj,q(l%օ說A=6 h L?%O7O]| 1rpbi[}jO-`d%-…Or @8 7J N2FSUfT0{qs=VpA27#%Q?[}T``E˟> u5];7q<<w&Vi:g j)4. t2mC>0r_(񫼛+KwqyS,4;6<֟"a0*5Tʃwm|Adlq(l>'c2lƷ_{uI{!ӄd(݇8eEUP{o%+hVqñBcix<&~PޛHAn" ;>{X] oke`,~Fjl ~/?EMQ0pudƧSе˨Wr 4jOG.W>"qqz̦Ai'y%TPH Xiz#<}wƇ#c2p4m S|4m2 3LEM3gz߉zI I\-P`S>AϿC? 蘟jihҁDal{_~ ͦVJ\Q톋0HnMZT0>9VÂ< A$Х~?DHg3q./ԡRonb 6d%\x478bqk[ *,fg!upfv ֻ(iPdz| a 6<Q!#'/@@RΦ`iyfݡ1rRWβ4_oX~ґ%_bkL j2AHh2ɸd_4%e i9H|4gKa-\F5Kex> !۱Ym1^" կ K.X&JÉ\CfJWkԺ{>@Eɏe;3q$q> 2|MetB"OOaqyFR#rN\nj9)6N.]nzHe Rdb hV}IAKgh.cId)tzF/ve$Œ Px#<:/z.M̗=2K kC/+ FIa$GëYRcL25<:IǃTsg#$Sl4t? % V46nI6"dΘ83OEP|1Ŀ (>/ % (>P苦;3ie|{g蹪X-2s=+WQ+]L6O w[C{_F qb Uvz?Zb1@/zcs>~if,ӈUSjF 1_Mjbuݠpamhmçϙ>a\+5%QKFkm}ۖ?ޚD\!~6,-7SثŜvķ5Z;[rmS5{yDyH}r9|-ăFAJjI.[/]mK 7KRDrYQO-Q||6 (0 MXd(@h2_f<:”_δ*d>e\c?~,7?& ك^2Iq2"y@g|UP`oIDATx[Yl\yf>Dj_-];}I_(@C_ڇ}+>@д)#kISuۑ%KLIIqpr}H ɡm̹w;gM$۹r{7#: pO~+nl>9:r91<'M!Rj!GxİnEm4h4vįѽ i?;=  gǒJ EJ_x,xy~v{Wm,x~~.XP I A&РNV,tر5:.s\kQP,W2׮϶m[W0}ma6Mh\pТZ:\6xoDQk}arH+Njg ܾg9|Yv?NjvzE~]l@KJE8~ 9nLء-Ƕ~t'`~k59v2mx~RCPePyJ^v<JE `pvh0k]P8p||?B.COcCpX? @s%Eo>@X v]Ϲxg@JA&}6NYcA3!p>E,Qw]CkxG߃ۋpi\x 7 ]Aݶx;c <ԺwpUUn\/ s0Q]*S\/:2{?m?aDݪj9V3ũ}x= UkuX pI=tVہ|_MW?Y2'V* TY f/6ntl6|`j*;* LaӤ"h︃GuB` D٨/ۯ@2 :d&<#Cgbv%xWtO0?SLkS]OʭM M=H. ;Z5S"_7qb؈ J Otj1({BBn?ܺ@4۟o4=[DI; ~ou"8cV>zDLk;_^a޿Ri#8vMÙA;D@P:*jDh{h@5o>`"C9?!^1q/SV!Lli#^a>1)ky@vzϗyw*XwsP'=I]Y*мtNR 0F6c.>{Y:VHckU­T=)rT^ CO `uTZIoPʥU} iz3s;= | 7xgp{_ 9{N;эMg<;G}FܚPʕ$ %|S ݑt+t6>xOѨWO1s7L+rz @@(=; " ST(墁hLyz7 khTؓH/g= -}2Э6N]8 dtmaemM;zM3مdNT )q wB9 əAWO j<4p = <3ڟWU2sXGKJaB0>|Q^F"c݅as)zQ*9Hs?T ]cUQg9eܽy̼IQ~TѬאNN`eV$ {Nc)v w 5/@Lpa&Qҋg1wD fLu,ΤEzbmlfFr~4 YW'XZ0!.p@ %CI q%E e%N,{^/oGV@j~p16<~桕4K9 Eƅskj7d铅 J"zDdc^[761W4pȍP(ÞQNKYeb/xNV*'t#~xQ.JUB,(bn-->\rӵW%o ed Kr KsYV=ɘ#c9 sFht+qc'{Ux<~4[I^V=W&IJJVu$5,7" L>⑓H?u (2$rXO&<ǿ0MC3c7$'fvcgLx{<hdRI.| E#]?J祢LtЋpfXER6Uj+,+櫰zz&St>1Bhd@@bq? c^Ɨ?hA;d]|kt '?{ gacN;;Md\.P0zAƌ"6Z1yav+5Hm *,tS[cLeTV!dg(S/Gg-G .$vJ2JnMMch3UcZ5Ebijg-&N l&pW>Ijh&؈+DP:AP.z82O[^XgT0IF2u%c#M;ҫ$ x/ {kcXu&2\jJ&덜 TpEZwO0Hy^!RI +J{5g )Q3_"mvs\$)p,O(Ӳ j2@{S C,y9V M'~T\'V>[A|6KWL\2uBv:EKȉfɾʬrE&yR Y!Zr[5<~}€kzz}Y]I)c5'6j7<%5~1W (uT oFBLf"qtlY8m8EPf&q}>T5Җ܅62+ZyK4Mk;%ڴQjs^1y[zjto-꿚[}5uSʤ[+?%='aN\ƍFO <ܸiL#?Sy9uϯUa3Q(h?J.LD"/-g2&׏[2 B=G\1rǀS-DO#"k+%C쩜s<1PĄhȰ,~i3&-j\,pGJIf_Ɉqs-vBgU/e{c Ca My'>{!Xɚ26|Lc}i9͝M/M ҕG((!mN SXI WF: <3Q  z gQr2 5e{1Ȁa~PQN4^)#E '] O\yKL0gLOv6G8R15?8KϾB/HXP\}~b\ ֖JU AZ)|RU01HX;X^&ƽ%%$c7\3y C>m7m;)>LKMTf-G0DIYT]Ns=Qq.5# &d6 s[^\ -NZ\gcL:b|.ﱉS,sen#Yj3~ *\ܜX_)suRu ?5e,7)~o\QFN?}C LFi*rjÏ81Hhk 5%h2V+n2kQD^"vk 8pQ \X8?Ñw=RNUmKo ==Ɲ"KRyZY35Šդfv(0Z()_5~~uMMn"9%kuKo_M\ 0%kJ\-#~􀝳*o Z6/9*S}g=ƽJ{5%%h[ATr2\W;n*Rw5nfXp=}6٫onKxRA*%MloML КD jݑ?ΠfUͶ޶7²a%HqSt۟Is$jZm/ln滸+[6v]IENDB`ic13=PNG  IHDR\rf iCCPICC Profile8U]hU>sg#$Sl4t? % V46nI6"dΘ83OEP|1Ŀ (>/ % (>P苦;3ie|{g蹪X-2s=+WQ+]L6O w[C{_F qb Uvz?Zb1@/zcs>~if,ӈUSjF 1_Mjbuݠpamhmçϙ>a\+5%QKFkm}ۖ?ޚD\!~6,-7SثŜvķ5Z;[rmS5{yDyH}r9|-ăFAJjI.[/]mK 7KRDrYQO-Q||6 (0 MXd(@h2_f<:”_δ*d>e\c?~,7?& ك^2Iq2"y@g|UP`o@IDATxiluߗ]]]{ۗy/lR iR"H*lmh:B;7/-ALʤHJMB"`f0_wuW7nݮuߛu-דkz3 2d@R g@R gH1܁dA 2@C d )@j@&볦w ZЁ@vA @;?kzd8A @;?kz2L 23dp. ? @!Z)@q?k Zi2 R0d4rRLl 嘟5 . ?2gA^wpnPOz9ޏn Wij?g~x8 :/hE~jh"k)@SA 8 /ZQ}5ksAPL5ﭵY z p(@Ө!@AP0Kk^&3 AXE-RvΌ@_52;ÍYChovWJn\u͍y }q욛{O->VDBD]Bcn#Wdyѹ E+K}͖*<:`NaK6 i@zK#f{Z-ou-ז=Օ\Ғ4g{ !D!EN9}\8vNiypH/NZ3`Ksc_W) 2熆]Vu={џCTfh3Z3<)}^T{7ֳ1`ٍý^s0䧛Xǿ;U㟣7mx ?P_~nj ~fj֕Ulc_QC_ NImC/FH&dlϱ>w-) ?s?~'b撟*D[g!Rw}уbg_z (=ۋ&| e${ >W} 忧WR :)\r_Qo`S=E1z "e໐v`}`zK/gyZĿLRZA~2'Q</JTG9wEʗv8Fp_:M wܗ###{̬wwJ]xm(=P>~ Rkz&P. l >,qz>jj! $/GYszO*;eMѼ`ژZO L5`+n>J&fvP n `\~P:-gT3 (}|҈N1@:83!3G6 ǴcAB @J06$4X##SP I.R2v.)mSⴵ_T3%1  Tc? RkVT32&x Sͻ62 OFTfvDH1 ϳf@w-4tzLcOtb?0$8@3akzz`*@ZP=kg?jf$ Y V`!P:>Ngonu$ᡔ!RB*t$L!JA0@ x ށ@dn2$'irOs@d*m_bnP,8Ej%NN`3%!V2F-,Ø2Xˀt wͦk錈d`pX\$_gcCR/xi2aSuQ=#J֐ߒoo}5)ǨLP6?oh{:S Φsݽ}Exr3Gt|Z_wł++ט [ܸZ)W8E4@ \q?qɭnFVvPڵ5K+7zUvwv7;߰\kçonhCQ^*˷L!ߴZU#8_l. elqյ]~ݞۛ aHK{\WzwSt.f#nn~#ն[ ֻ_р7nn|@(>QidK Xʥ%]{UDƂ5,dAsų.?2kOm7{Y;q sY ΙYYaD ͺՅv&V ::꾱r+媖>7L s/^r75?y%$Vλ\~ҍ⯻ϻOt-q_zMMr;%*ti%7]Im1%7^s(p@獛b`%o06wyGFz}a [nd%` h` w܍S/룮$p?s?}wgY>0>v(CO$DݟoĿXRu28sv ex75(/^i@KHo[ (5j?f=]ncw?~cRJ;[Xď!ĐUVdG755!wQI㊚s7h-U"hqMΝyc ɟp{-'ц`KſImj˜Jq*%=i:>iw[ PXB&ó8E=W=+]?cX8;WQ(ӎ-MF }WIMQ`Kw$!4F[8~ķ%-X_w[ f& 6 y'\+C_kym>Twt7 v[WR>YzDBt?Y'N) 婆O}BS)hGBX'x=b=|>~7}?|gy[0!)9\Um`k{g;$%B~!3ɘ P^ D/{iڥ[(Ƀ1f}m0wIg_Օt't/Hب.:aE#*26f=gNZ |kk>-mxpOJ-^i'Xn{ zh꽒I%1j(gV2>CDVDG'l{[ZzCҔyW,A~Jq7_B>s(z[؜'_"Sp'}VN(RGbUV^67OA>p tPpƆ' Alŭ./t61w3Oje[-Wo5Bh01崖 lenb p} ^0lLEwT]0%,yǽGRIc$_ƺ3rFR$/!t23J b@ qd}̛!EZWqE oX$ncah@rUr[ Ce)SSHE4M'd~\xR9ݹgP861zF|&v98bzˉGт`+QCѱYq+ܤݾN?9#Q$m32 Q O`Xz ߐ)܅oOs]t"+ݰےϺK[wSG$zK.E$hqg_oA΋Y--^;̳h<ZˆKXy I^bğt@\G"-FochSICChCbvs-R 0f p2]"yx_"~pE@rD\jjc IEYir;uè䪀g":dXF@٨]b "¬8׵\s?%-ǧ!wTֽA`": ħK1 uXT @-ީ$V"nLj`GhAQbц!!b4k8k(/v@˅Y8US7K hFxѣ-WZ[᎟w'N}x2U@/t}G%Γ_ČJT1LOB҇r!4m"~Ƀ?l 0XO !NklB3K:X6ob(ڨ$zb6c@b95/QM-`FpDlOWL*hJ{7ri>U{!$֐rbm憔̒V_^uO}Dpqj8ȉ"ެxʲ `u)D^&Fƺsy3@Qhp!,-3bY+'l{VTk[7c<*Z:88`j@۶޽MˉNkoĜ2A\$h (7~ZoO4[U1SS T_yE-ĵԔhkz!2oeҬHRl?/%(iweIi$ ?W4 qޠQtSy˘Ӂ$PlvFY@%N]Y)[\-%l5z~mDVt//xXy`25함f {~W͌ vKM =_ Lk}6HHH ıP! ,< 2'75zق+h~/+Qҽf[Z枈g`CmmiʫUW.c3;Clɗ D5yFa`> r25>4oLoږؿFZ'UwGS\BTckµW+YwǞV8b}Vgoa$>ce)P4Ʊm_qyIH( -˄l20$qUnQfmsw!F\pcӚphCOUD_-5ǵ4$L4!4tb]k;eQQTO ~c,{lF~ص&Q}X8}@kUR9|c|}+l!;JyC;_rZ69|`o̳;1ME`}5I7Kw%kmT7 98C͐dA&H졒@}R,S%28@"thA6ӱi/ X-̱D i˹]yGNNxve ۔JwHU^*w+87{U*u}&wqFAZPX# Zƥ#3Q,a[W嫠a ( HD[aEeE8.= `<_tVA\KLƢ:Y㍡0`eKR$ P2*9R6WvAG5.ݑHɲװ&3R3vB@FdsI=0xÝV1ԝ G? DbzvIUj=FI,gJn4g1dCє؍/Y,C 讴v[QV$ k pH2nYiƶeՔx245={ڈTi: I|O~o`u^b3 ~G~?O%XM[%%3DKuUج ֜$iW &l@kރ4,Y(a I :řS<9qdMHDMQQɚcğ-/iv>VJ+Kë۲Hp+rSgǿHL,~_E+_o/͠w0Ii;Z8N?vJ+S -i;(:KL[ҌVfIxH5)%hp ]C޽LN)VdѺtS.sF>Kx#cUU{WmL[`BK O)|ǍO-/G~x%휥؀T]Rf;4VQ5Nݽ^J 7(`~^eiURtz;\BVV>4!Grb&uP,‚ڐCF|ez茷ʚJ)/t} eR5:tGqw?1-?l[BNA8`_qq<:C~0Fj8G],ݑc/M%<;U93!(rf4%cL@ر8S߫6#rdcO1{T_IgThƧQs5G;lIcO& P;ZbaI%Mola  ehD}CTy)Ҁ3ɩek7%N}_"UCr0Ɵk8s{feHK[_\3 5{ v=,/f-@Lf繓/l Y!jDQwK~MMQ*72KWdbq7+,z$V, |/!Qv'a|͕}k!((A)iC;^uEr4ǘk .lj. ҫ讽g Y[BNSae|C!G ƞ8;9Sb507qT"nbiSf7Tci0ˀ| wN~y/9|Hp[aC^t ap{A`(H&vX0޷f`Aq?k;:2~n½鳒Nf _P=Ѻ9ML8ePv똻鏺c !ss݉?ꎝx;aw܉OYIłH?\rq~Gեm9moA_PK`]V3%髷ݧ`~)]e0qLM7A'!5$\kSDR^%@-hg^@hOyMf0 &3Oh^ƿFBJEQJo!i)?mYV+UI~lSBnqp%u*5}AL %ʼnyƎvK&|HFֵD[U"E^mgOP4hTWdDL{_{t_6%n| jv!|'lf$BnwȂy(W"PQOZө59){o^rdKFIkfVJrJc@S[)8\DUW\ywk/&V7 4#-M+CMubUw7Xr ω>!6rA263SJIM88 0 `@CpLT-M1) n1WK_`o?#E&5u8X%a+r W-߱o{,.^-e^``t c:_`d |@( \Y@BX#m28vzR !͝ਏ7ݤ/aL>7OnWWZNdYqL6b(ġqYU4wڲ8rEmwV'}ٽw]I#ΥoO~=񿭲[ptf wf.K _~a>li}ZܵNU+g1\5VhǎAx|へPWTGrI JI h%åcO˹2Ow ']rL?q2OTڍ[9>~HH0ң붒BWs0Vk`*^_$n*+(poAbُ ]tM{% A(FRV"Aq p۠HsVXO=5Aķcztɋ9~F ffݓP~f6L,K1-oDr!s,:'N\q~ԓeloI|zÖ Yli;*Фn9OHŷ~:PvT ݏ֯CWi;ߧ"ޟx9ߐuUİ%~+wNی8]]n:B8wFdH;_3ZiF2siy赑A㗽 ޛe6 NݴMO-Kr8cV@z@$Y67W};QfKPVx0 t DMVYqqK`%ZZKqz] 6K/0]d\ٍ ,*b!0n*%pPQp%iv 0()ލ޲ފ|P ;|D!W :$UhypVD=rM,6R(ڋa īo,!da)ˇ iiUI ho0ы *ui ߘ$u wF3q:$ΏqǴ#2SS=漯#g^C!,CCoc7@*Vmhc ҖPSg;l2-%olܰ%\%7f7TT^.W?cyxS>RVq$%ɩ=6hH0p<MyBWc KԃCVq 74jaf6{G'VTnyHRg*[ vKl!mᄯn:Жƫ[oO(-I&hjmׇY r[0^!Ά/$`Qx>QYlB0S0 8l<F:;Q\N|e~fȝ88TWdX x 'Wՙ*EU8Fl4349RQXE-J>cp ucGns~>57竈8%mg`ٕK)Ɩh|jRrÊ|cȅ^̻GǦe 1IiGF屗~VqIqcߖt`F;QU14AщK:=B8Y= 8ShJ B \#*JU*B>!I$Y1A>Rp"l/!Du *f8V*rDR#:m~Wi@Rt͛Ю(H ;VmOA4~ ql/YbEV6\՘:(eOQƨz s'ݍw +O܃ ;~8MkX[3FA<-q4pcʖ2X\"Y67"m{-$M:CD~t?Ș1ܑ,N?[VW+^8LJRե!"1\dTȤmԚ#YX7@Qd}vH@L0ѦVޓݨ$^ekjG}(bGk7YHB0Bbc0>QwS/Oyl|p SjW3ӖFI| N*s؆HkJ<KϚxaM5JF@W5H*GMޒ4V714TQk>av<vO8N}r3nlގ3/m[A2iʻP(C7jKN&ȷ1cJG[ Mq)掎ۺ~`lCCq<#/Fq1b7a/q0_0m+3L~Ռ^(}D*d&umb)ϯ6%TNb݄-̗F{F[HiQ)Fv 7@h}DZJ4siE}n=7e4%)^aZ+ebq8K4"ݭ9#vQpڜYpZ}nx\75Wi}. 1{De#QIu$訕1O\Ge%Y_'u28f})WBDeƝ!LY B&v,iB7=;Aahb(څ>A {p׏<N.Zf'JcMK'xw-T1Cu.@!3kBH' D /m`R,إk4-;WARȚN;N"3~ 9iDbZ>NүG}3&`9*fꃜyOI=ҳw #n<3ŀ@V/ ̅{xUPb +Dk"ο0Et]`: J]unju8 <UM!&~U2e;l0jJbF9OWTh\ux\^Xȱ.ҰՉi.nC ܔ]){48Qe[ xa6e0"'K&^'ƎpU)2 1AeQ'KdŸ+ lHbV㎬Vϛ<GVY>>:!ret6iB0,>%X+`0goWܢ0BeKQaecz2U1_/eI.HGCr 9#xz(<aQnyIqt(cva|T,BHQq䏘6IHU|_[nHg E%B0Q`=5nmXzsޣ l\db;~|ApVT ^A275ҳי:\'HfJb?!^Av$ı<;aɦZaߔ́ 9 =z4%/b[l$ `9T& a (z'gBY5A' h茸ܸˆHT*PJk+R jEO jI'XC6LQ霖FQ #(:=>}>^٩3`bK?[VH6JzO=tfyށo2.iMʶgY o_.񖓧dTD{VShԏ˝ZE3.ZtaK`sZg]$F40B/w<|y>%472FbODsVmj/7+sUSYxm0m4~Ύbguא܎fD_ck'LΡ"DȏƓ+f'6~=l)&ݪ4IL~1:3况#B3H q! |}ND! cZHg>/kC e#)VoP nyUJqB$`m`;q0!8=h@jYi^ RQ\~aK4[8žӰGnjr˅ayQHk)\'32Gg7 2khI9֥ kfg: I'LK4q e`M !X-p{i3!-0NȶߺO[s},yGq ,3'lS9nOkWfoeN0E9|ݓ#g>즏=iyRw۲zqe]Xf#Q$dnJpTVt~eB_/JWֺe3Ze2*G6m1Yyv>ԗ5I}~)%6i~D#!lk;C >V%xHKtA!RY*=jڻiwl. Sˊpڎ(SDO.u))WtO8p[jDRΘxcҗج'9,ʏ܄wȚ-NOn8uk)c)zx!@PJq2S :f# 1Fd4`| P{3 ? u#8z6`Y*4Tcq "b>+&5}~êj^AifF?si`D?8n ++$ɸLs{UU)8"?M>qcU? ?l &Ue2 mmD\Uuܜ]Ro^P&C $#,>+z=%&@aVq`H!}PRVp\+ij-?(36bX&;P7$g_uCξ hBDnQD+D'š/Rn;*ZEssĘCri<srh|31#R_6NAGFFlxI߯lz{#8FuFNq ̓-f%<9jS[idl_>Rv5z)ffΚ,sM- iԴ/6b=g( l3ds ^d2)ֵcnt1KJ3s^pW,J]IM i-׺ j!+t褗T[_a{σz[e+ &e#4Dv;aZTn"Մ٨/$%-c 0xbʦw^ka < ^Aa{m`ܖ/rV8ZHN mQUaH7e1UzhAZeX"7AR<mBget"Ba秊#s"_:!>XfIΜ5`yhu /u 5iiI-3ZcdemWF4Q>l]x0\Izo #?e˪Ԉi`jӽ1dh]1S׶vUJ#"c7^uOfHdG=#Z8蜦7m~$yg_n/o\Yɋ~˼"@׮jSl8$=bPgb74{b*'5*=$Hg0CJb~^(Ж6ﰂM+80]yYH&-/+Gla L|H{ pb[$L$m!z-C5 "|̃6"ǥS( n 'sՂB$koIXxX4۞HF>.&\Ab5Nq9!!hˠϘ[.s1Q&ݲpeZ4z3fܑ3bsla507ՠZ{f4(<5CVߕ)}$ʠQ|;R:j֧(Sji}NLgϭ֘Qm{1 \{b% +g`LիKf -?LHL#D$-.Ҹd!KJVM-˰C H҄N#v+ f,ܱOϱ( 3gAջطpC8rZӣy]x=)1C[ot-y qr9e ;d| ?eJyg%BR jz(cI`FVΪ!1L%ͤI}chϯ"WY'(:).WNdց a3rPfcRȃ}hka -vQnI'OIde }Y9vh ϩLh}6j҉pz82-;}N' 2!%yٕ发;o=Z!`cY (x|xLvघm˫6ݿ;iCi()ݕtFa% bDcDhprr) u]^keRSarRqo[zyS+"_ϝS'ǰ?~+'4/пLR "w1dzN0۪;ĠP~B l)񀅥"vR2³.~BBIƏǤeFR_pC,/^&IԒVSHS|nJD 32Q7墓 PwFY|}Hڒll7ܱTν[E\,o`NY$#B $QH#"13sZO Sh# 2L\R.ޑ@`L3>LdG47/. N2ㄼc\}lK% D L{%?ˀ惦a b|QX_%A)YlOaHD{8l3VaIg%H,=%4F>6&?1 0ZI>X J<3?%F 4w||+ ѱ#Si=H!;ؠ|k793&C̅s Ft21s-h#_'mCCcDKbM U=Knl46Ð?W6G Ia˰ [J ||>bS3NF괏y__!hpE (9"όA1d<ǷQq-=sTsqqY#f[%"Ltx͝8`|m3s~FDvKU m` *maAh db6숞4kID3ASJK` tB@|OIhh)yx֔sBK}o/7XPC`f;:)?چ1c-0Ww6DxBalBqC Θu(QP\߱JV "s51i9?.9gM y5"V -;H/;\Ob{o8:-R60俫EIs3p&/ _:dL Ed=%[|J,ګ6oyE=xNH˃;LbFB!uP&SNOB>Wؽ 8"Q 1ZW~`P|È,XttN2$CCI׋<` dz"hNa :~SeĠN ,Byd%cE{MA AǦ 9Vg q% BǑo@r{M<AKXj@:5 1Wfv2 3f;rLCxS Lj o߁ HO `ƑS,w~>;=d;fr/S$8AѻonG( $;g;)N<Ô_LDY.b#j| V0iEd{̓ԃQ70&͙{2dYQ~ْZ4dyh#0b̷Zji` k?* l1?!qhi3&k1)< `B83%$.Pʈ²+QbW,bY ;Zڞ}K7 axd(z`ʃKFWK=:">(^R(mIKW/Gޝ<媲v pDŋM'W($'O!7n|vX[ʇt, iMA)KF;1s MDMy`.ݦ1S{i@`)6P:A]IXN'#tO8E ھuˈG’j4ȓs,融05#TKNJ`iϩ-U!=͞ܯ}o[Q&ߨ]lE`!f͖"VfMI-(kfדLl lP+]B^m7%|S+Ac,T{:z?DڥGpCriwQ/{3 Ѡ@G?[1s [K&XW뇣N<}A'mT |ם!K-(30SZqrrLD q $ŭ^ hP}#T%Ύ5Z _td탢2NNӉ8Xt`" GoKJ<q1~R ζw[I*FIo%z__ja@mU{!UbVW;(㜤 ٦$`9Y. 0_YVƓ9)a/] qs܍҅ y)?hCyڂqo7m?`g_{,n">:l{>:ƺN+2Bra1E}AG%# G",5ݢ4*هgg\_YO½V_uzA'Lc/ND<1^#+gl;pYM !8JoaFL}FU-6-| &0Bry,쐌p_+?6VtL ŕzqIg>s2Ijc[{I4~I50 wc}G+^Ѿf lZ(ô1D:&KGO院P.2_t< "%~\3^p_|yĹoX B]5PD>jb-{Q!HMc%YOA+̈́& Hf~V]gzD0wɌOTe{0{NC-Rp` h f}+'`j)՝%e}KRQ d-ʀuXhĴ\W vRl`]"+sDHz8cg%4̸]y3\B !`H,υ8Dq@;?~A?O]LM tu`rFQW0Pvdd E; oni$dYgvkwe\bV.A)F;_ S mwm1N(~7鴇WhNyla lc-"QMt4F8(f F>3-/-&!NR-o0€ a0hB,N$$KLVHE961Zcx0;$/ˈM(/ޖ@1<'3ZON?8ԃ8KCv]/y !9g}V 2TXk7!`3iW< ÙψI3<'Kg~o}.롘B 7lz$ peF8݄o!b8٧婦N*$Dx0%qͼwٍ%Y҉}"K>Fu!x3iŖ1>ZE=Я0h LM`A$߅o+pĜ,~DlX-T{;YN(@3|+oJ黿}բjwя^mS1 g7rp7ߢO6`B|g  ϗO@Ȃzg?pR!cD(C) &/t ^[ !yӚZ0/juCRпAŎDH~wG7_5HZJf a#p'&'}D>H<)˂W4e-5|U=@\4i\B۩r,Hb& ~O /J2ZӔuDnHG1dH>&?stXr91VXxf3ޖ_@8a4<7 Ycq Z;u! w%|G*r:_#gѓ϶ݶH{ @1rb"S`R=i۔D8n0eKj@ Gv*oo~&C̬H{F[oQRyO&ҁ5.oe=Wi8Wcw\_06l 3YOX%3 Dͣ `~۷X^9 ;nj:3&!^;5Po?H2! p͗~,x̝${nRS/"&6ai.ǴHbO{*+a!Q// }h i͢S/w{T`>$W0(^.#ZA[<_=s '`s13Oy|, D4s!ZIʾ~g8L5v2CPRs^@0`PDZOQ殭ܐ( ;fQԵ e~{IvԐLNT/ԂiÛzo\ײ0~˙?eNaZ>ȼQh\' aes_QGwb< a$Qt1SE/X5Y-Eaep2PW-W @p `}2.^rEžA-?/ACH$J宦l,߂тJ%yyyZ1`I|`٥؁*nA$0p \{HsGI%>Ri gF32fKwgDPsAMP^DmιsϻMm6XE-!;wn ه$/~.H"fJa+xtۛ_i!E "(bY|`a\smiLYpVaP]HÖ񰓓GY˹rԕozYe1#M B5ÀuG _# n???9Ids+Jl8]b IpST*Je@c_nN9NB% q Ĝ(( ;pJHN|ڻ~7CH/h+LlS3OV@JDtA˦qsg&Jṙ9-RUO? BD$0nj\t+UEWv*æJ8pu'ÒN(YR<7K >fU/6c Ws FE@r:Dd;c{JW!/$QdCt( H0EwZbPA 8D036r?_uߍƙ'#̐`;5;}2 `=1ĂIyllt#"V v7rLjk,Bon1g졺(1"`_SKԔ2gﵞ9Pj'E霼 "[Zee8vHŏ>SWϺ_A*9<n0rGNtFA^`p\[r Y=&x_`okf.LZCTEiRKZczK0| 5i%yR6/UtVBʕ(x e.{@»G1v O\%wšnj8DHѓ?x4>h FOC 2{! 3N(?0ghnwF[KMafu~AL,1ݦx`tQGZ%|!0i픡4鹒׏uܿH)*&wfqGICEmF9  {-- %@'-HlQrl]%R$EjI$zjwvfwvǐ 3;GuWuUuUyEӆݤYq;:_ a(.-x?GO1mQsdy/lkBqC6qE$h~l(puj=@n4 ܀Pl׉9b% &uv`G0v@@f6ܞv!tQh3B4^BCȲ!uU2(#ǘ2,>VrHe4y3@~Ɗu{\ --'CDT?mIu(FT K=[(ۨi$҅]j \lzP~~(RmlF"rȣ !@%NQb`6 Qń$Nv|Y7~dXVڀyk8CўY%"lnKν~ >T(+!4Ia\VX7,aaL[e`oz c&Ì]&B[Z&41i3ms9ز R/m27 /"mN6{*\%N0AS Azc1l8<7 =A.CI7+m+׃r(atg Pb?Hԟ6el$m]$]WtE~|a]E0~WFc^be\=߷عG$QYhV ':͇+){n.g6 8-$ X<}w㺗9&*Ǎ`?-`:͉Wt,TR"ca 6, e̽G?;/2ȉ@ `߇-6iqum N >n;ű`Ŷ΃LcN3L]Ks=ٯCMjH?7w-M*j8gwxX.WrзbvHK ťpF=yL2vaGp N|!uV~X{!-k_0O3*I$6G,4-/](μÓm~5Kqu9tf~,QgI۾J}V&Mp u4L,OF' {?xm{TDBmF4Wo'?}{q3ᢁT RBT8l2}XD7ɧi<|¿8%j-Z: !X7-y |๵Qc“‚kyZh(y_hk1ط:e7Eu96q&|ol1;bR\1+ 8u;'@Q I5 t3;XVI|"fkRV̽(źq_M?ѕ!2`<}FcRoPo*2F4ZZCTl􎾃 \b`RzO[ZJ.Ͽ:B8NE7`DSޖw|&O+#l$`dnM=kڲyT2^r(9rU4@<<=ΕZEC㸚A6d1YcչX=@ iؖ!A,({,>Lˋh>V bI K5>isMZ_cЉ>Ra=y'_LF*$T67'wĽ,&7Ϻ[( $+!>m-,;4Edu%dڶ3!+$IƔ2 nӶe'"8L MA^?vDPPX^>%(m/LpƬ$?b́rkCA6 $4v,dR^Ʉg`bQvi $MFgd~2rhי 6  ',0DL,xy0ʚW$5B|^PLNx<՟S e9,a\- `(:>Yz2[ٓK*Ǫᗨ4 j-;!J*{lˀ U/^V~OrhT: `܇}|bɿ7b-QPv)-d랴jPm˂nĴSZ$b1?Y;!pR־X_7mC=1e Ăkv+*Or?/>~d ,]hl`X=/9cD]UuS򋼩oM.-Dg.y.3o0PFD_D@;[[|qW& bpKpazaE&[$@14aS`~'*FOs?inRA4 5@Lٸ|OyLF:E?<\'jbCv`U cwL刟S,RX}vGܢVב %LҬ?ߪ\Da$B psyț(8"z&SU) !X\[K޶ɐUJa9n>q)á>f!@+a۝ %IDATN2e)ۉ'B?Nu s nD` '% `]Հ#/l9f.`hH`5{@DKW/wd tb 鄇5%XFaec1B)ˮ VcOty8'*'懔y8~OJ3C}iL4bÞ+QGÊQ?<7:h{iR ]!Liơ0%Vkd>D-꒿kT'rpDyBǐ ciYD|HfGQr#5G: Ep^܀o +9'Ff؁LԈ-XF'N%NLltf'=4$8pm&~rwlIaŁ6f ƝIJ'_=:-~zs~_^A0GAb*O4fP^`Π7 ы]{Twq N$.rz?fWwjYX,tq5"ҋ t2gʔs<&&#tQ|1G.s퓐x;j@`n8#o[֘ټm/UnO}dG V 'lS ljA[)B2)봀 e<ʰbsN(22W8Pԁ2׫ hLQzPZ{z= 9~ 2 +/tWmpRF5/kbg,`nFN`;O}Ld@`l@Oi{*#'\L󪒏8!"}@N xGa^Bl҄s t{إsgAOgfWS{DpM;ԏ> + *M|dhWYq#,hg^"X{_1ieەz C r\K^jo lD ޟ+L"@5';GLD#,CD7[0GѢ=+|P$GnOa"^:&ۀA3R(;;"$DdY3+HNEm5DU̞,#v(c9*!0ERZL4˭@xf3J2" Bk͑_ ?%K~8Qob--7pŗSܿIo~{X3ЗU}p퀬}DOץ@\44wl?n5QQ+\ )DP*ܔ@!U'H ^ ML^5X}pvBLo?npBPz~WDgTU<1V e nM @^O!Fq?1aeP6׵-IR:Ǖ`+؊;="H.]uODܘ/?;)-<^7{]q,xOddnׄbNܑ'Xe8 ghĻ):UN;/ 9ee0 lՁD byJӍX+` M @"Y?ȿ#oS^N?հ@BHuCm 4D;UdG:1A&kavG`qGjClC|Ff,m]u:)$z"L\y}w.似`LS|WKTgd(pUcѥȷ}$Sb7Szm&o7L|7_ A9ll!6UB2͓ri }|i0.m}W![mBp&|ɟBpB쬾(/Z2v z֔s EVK! 2kG]V-q.K3qD{>=Sg3K:l}J@%x,A? ն%/=C5:43KƤ%g<%R)G ߷]ԈY|٧U?>4maKCJQi͟0|Sf~W2.$-;IENDB`ic14^PNG  IHDRx iCCPICC Profile8U]hU>sg#$Sl4t? % V46nI6"dΘ83OEP|1Ŀ (>/ % (>P苦;3ie|{g蹪X-2s=+WQ+]L6O w[C{_F qb Uvz?Zb1@/zcs>~if,ӈUSjF 1_Mjbuݠpamhmçϙ>a\+5%QKFkm}ۖ?ޚD\!~6,-7SثŜvķ5Z;[rmS5{yDyH}r9|-ăFAJjI.[/]mK 7KRDrYQO-Q||6 (0 MXd(@h2_f<:”_δ*d>e\c?~,7?& ك^2Iq2"y@g|UP`o@IDATxidu/LO4ff/Iq(iAdRK!rv!;aRa")J]D b/{7_ͪ[nm{]u˙uoe<'O<9µl4F  j3̌i>) u ttR5lKmE EB@G C⿹W6sY1ڛtf2UZoS__(" ! @pO⿕lzd4_ h~w~dggEWB@$l$@ & Dxz~.kJzjS)7i>OyS.MB@!Lrc#r@F0x̗dlL_zBZj ! h2>cv3qBJ'ϗ_= VW^5=I{]p|d䄀B`:`, `$`:1Vx.c_Y_#\7/_6){b@! 4!䰲*q<WMJS)̽ {\p<[Z ! @+ʐWGŧ̅YS@CJ>^~! @TCj(_okGB@!1}j_\B@q@@ 8u~P2 ! h! D=I 0Q} !  1CԅR}8f*-:n&@&Ta! }F@ }m=mHB@Lb e'&! *c4>ŲYZ,nwLRb $8B HB/P4`\KS,U{ XzB@L1b'US% D&3P=p ! $DB@1S6 'B@ J 'Ӎ)Y Ws]z;@"%1"x3; 1}! c7)6dvj-%bFB@!0!U5/ T>B@E@ ݁k.KN A@ @br,EB@$1מjq=RB` 0m"w! ! `\-B@!`h! BLa TZB@bZXL͓t*芀$7*>vZ&1(B@! @&@0)B Hpvk7d/LO_Z*S)x5[! 1jB@L)b ` {]MB@#  !  LE7B@! ЎTTt)艀(P! @2~UB@D@ @Ox(B HfnzP!  ` :3:0B`0enۘVB@!B@ @y`zZ-B@#   ! H4bݽjB@xh_m${8! @E`T-B@ aR\!  A@ @B:RB@!0 bA+)qT;F@ RSՅA@ hpT.B@! & 1]B@ `48*! .UV! h0B@B@ Du*+B`4 E! D! `KB@!0ljE'Ta! H0R8B@@@ dj)B`)L! d `2i]@#S ! &1mB@! p)B@D@ Dv*-Bp8~zFZqB`tI!  `bJB@!0:K$B`b01]5J`tX*'! " `R{NB@!p<%B@!0Ԟ;Dgt )B HF?B@! B@ Pp)B@d  V!  1CHHGB@# MlʙV]B@! `D@NR6V &`LuB@1#t2) $UQ!p8Z|2#`,;FB@#bl%B`\0.=q!c[E ! 1c1GY-m%[!0~m-0Z<B`0v*KpX^!0>7J͘4VtMje5v`v*U!  1miإdR&N}:_(`gKÏiS7L6y71уB@#`F\g3&˿Ln߻Žw> B@d# `w]{cTIUE! ǨI<*B@!0IR/sc-B n]5ưkT%! @b0] =S(UQTcruY)! HbƸfc[Jl!/PPN! 1J1;7C "''#!? !  >>l$b %3͚Y\)뮀=Z&[/B@E@ 2 X7pS` AfӸ&8 KρY o3\Ɔ&UU! !p @@rF|jC]}֓kj ?<{Fa^]#t נlc729S­f!tA= ! Gh4'+V3Ü~XiR΅3HpkCx Eg23>7GWN4o_~+˕߬A%Q1)3t݇q ~O1.x2yA>њ阯2hrxLx g6Cu gfmLt 3 ! @"j pD`m4#ʦvd \|zZ$n>3HQdؖg YGj7oIig s Ҹ<&> Ww ? Zf1&x&Ag?VTi3ܖ]\ֳ?r]gS.!1AoT!6L@:#ߎ&@7\5f3P&>tn`?34Э@3~Ռ)%řkzC¹cU<}q-``̸AdwOIR[=wUgGIb]8>m 3K]_F 6 3c3,`T*7a~'rfk/"l XLsj0[x8hoՕMwVP"wF!d2iǟOǔ#@⿓B_ +cctxٖlGG7= H 81^C=W3G>#fj4xx^Qm@[(qnn>t:e>/4ss[SRdZ)E#sG&ة1sܺbY25?>f>\h ;6bJйیDV/˦38,]oaK"gm.T1#McO?oپaJ`"ؒ|SB+|Ƿu|>dn>|{"F2դT,C0{Fp<\wL! .ډx͗ld ' ϕkQ[^&${:1ߵP࣏=a.]zĿ?bL6a>-1ӫo]5/(9! < \H7&ϟGȯ^j{َ_P5&-8s9}^"cB0\x7ejIhpxTXntpss\RE$aﳳsfnn+ k3e@/-AS@0׈HG#0c*咹'Fj, H^gRi(u_uTxduд7Wbb[_i~qh  B@ uq4E8Pel!ph:?FUL@'B@! FQ#:!YsZNHoB@# `NHu܊Pz ! ,bt 8[H05@]=5] ~H BI RRуvpvIy C@sↁ  Af !0'Ň%@: #u*z" '< < ܎nkؽ68"L I@ 0@tZ)C@pJ^,nHa֩EыEB`J`J; G”5[iF@)z` AMkTC@~%5 ..[L%bhKA `JFe=bL!1}!J^:V4lMk yܭEݐ:0u]4:~ @J:zJ:Z! `8%,֌]; @` (a-Tsb?y E@ }0Wӎ)@GL oZNPPR0O??ҁf !0H0]o (t tZ)A@ (%0$k{6I(PLb[%j%O${8!0,$'!m@*A! @@ `%+uɅյZ#^: SVcçZzJ<bj1"xN)iA@iiSE@ @_e@V=)$708r/@r{Z-B@#   ! H4Htvo\KMam wGJ!B@d"  ڿU [1B aHXd䄀B`0]l-5ЃB`0u]?iXIq t !0:0L 0)~'jNJ|E@ѫb$ mLO_Bb!p$c,! E Va5H!1=In %ٽa||~B H 0=ۧ] oCпI G@g&U}!0B$!LTwF2I՟;?h؁@D~S @,g9*yxC t0͠8 P@AoJ0= Q! `THNZ>^Oa'^_SJ!4$Gm4 ! @1DuIA8x2B@ @B:rfPo?0ljB@IG@ AM>(J'dLrV#CQIU|pFx,PN!  1߮=G13j臀~%4ܩQrL1KL'b߃g0u] .Lҽ ߚNz>ȿ1)u =0e-WsBq2U uu*z# 7> m m/QHh?w6K]݉|"i DkZ!Ick 7QD#_Lz}B`p Ub: H n  iC@ x^Jfp-$L Pj0O*OPzLL8 O P_OO_BPBí!  f5K!1]IvO:V쵰So #l0_hlBLX_`CQ?nK%+jf gi07ktxtӡk!Nfn @J{8C7I#v^bjB˕ f/_4VM&#IIC֟7%;$J.@ AsA.#)+:Ѥxa=iо7ո"}Z^ǁB`/W8dr@i<0rI@PhVB`Xd#P,WJダcIK &šg]T PLJ"n &1g#1Ɨ? Fe!`zhP|ᴹӖґb2?X!@o;;t0b8N-0JT:Ixh,{`PXc s/jj,TKU8r[ȑUwʐWqԯϘݻͭ\7ZdʩK2A` 6&LV6ViY7;==8:y!Z7LNVS 'IFG=SH ewll]S,Vm\57_yOf~T48/D SwWػЉvs[fOY4E'XFJ US}$+2hvaն!{=R+'{۾i֯|ӎ;^~rxD7hL .q޸n%Mn5h\)% *Pb 2gNӏmN_|/I uuxz#`)H]"='/5[yqyHLZXx1lټٸI}{y6@Z0l~?<2מ9zyq.'0rWL&{ڤf@o}\z_>,-辀KL`C Aj_5ސ9(hg(6^X=^Tm`Lr]y&l{[NTb;XvA7Pz /ZeZ1a̯[/"asQ"@ @K pܔ~b:rN.}( l|ۜ{ןHǭB4#<'t@M):Va~nHTz͟biNɏh_ OyIC|8!3c*\g` M:hAؑq͙똿K*jg pwХzd +\ZyJ=u؁wy{ᾥxG^n5_$@!BUVjur;!|"{-=}F Lt=:l:c_ʿeJ&,˅&mx:@~a7 vw_77"7! As$$ȵ*f?>HPz] b^]/2zHerŒϗ`I3<;" nyV롡ѿA*9RrJ&`I4 .n?ͻ?w8=ގYh\ Yyր0*eˉDTΘ3T@-l!l`lcF;KkC`p^1 6]߽kf2Y '~,z$&ȹ9{͂S)$!]N/Y Jgf xP;ӹ=mG2^2=%;Z#PCҥ^g| N"^;:`G. { B[<έJxkX^ ~٬i[{ 6W7#S1O͘b*UX:IaW[vOv` PeƏ̻񏠓Wk{p.Z'p*, fAJBk1yXINJ9#c[teLbTh_X ɘgç@SP є}2GbܱLL"H'YY=6r![" PT3@["x?i|.)xwGϧ7QkmU/6v3Iے T q(a6LƜz߽@Ƽ=ABh1 w7 >..Sˆ۶j |ok!fbmm/Fޚ1;"1+.12fl@踊 rT ;U.XAb8AKul̙Tfh>w4߃5-K%c>1f$`l ̘(H/lY.0ǜ ‘"3}D~.iցa6;}Lt0>$nÙfI>њ阯2hrxLx g6?Ƶ|tJ<.mDj=5(J HL+ᅧfʒF=4 ]|[uc6V+˛`H32xG|3|nOmߞ~m ǧo&7o?F7?[~0i\ ϐ?\Axs>`9Q .5z-W)Ab~P0v53#Amih,L=i_#p,Qӕ ?OO.IŶ7:+wa6 .ʦ~6<ȣYWO[Y K-*i}^.^h^Bho ["qğ͗pms$__4.ˊpDeRYpNϓbxV}%әNt}2[~n|_$~.qn7 LG<I\ztcbg ic\Rrue>N"e?` sWsH#|q]~.F`2q,kցёȭ]\}~>v JoxYBGG'D\_+l(y`WiU5b;gY= D in^4-bi؎l) O|i++vYVp0߾Dmų̃' x`Hn>-ykIhO/~wLdq^o~͸tߠDgpwE hwW+ `ۙHc3Ntcv]d"_y,,,[1I\¦Hj3| ^IĆREDeS#[ԅwcpq5C67?""%N+}ӟ5?o6v|47{?~5>᪄8_z0U} i=W|ӎ4gaי~}n;\J 6"~>A%(?1rHW f )5e3?9_}! T` -.DqXe.cxqϖ) <_At m3>~-'ޖa:il6n5uqUAl 8 by{@'eeoj,u & ,֭+cŃ7zOH 1HB>&azLh+ʐGمtF~b2_WκY;`ݜX]3W]@.6uwOLLTz)xP_1%ud2kv{ Z_s~~?Vr֏;VlUEajhD?udҾoO~pcIɈ6X'Qf=ʼ׺#Ho/_wڻ >+@(pe'z7gc}|/x,2t-TG/'}hi[lyէ^ uǮ!e߈}J4,VGbz׺Zb(Gťe EqCePP@QGE4sk.h3y||:F@4>m2rۜdf ;c ueW޷#]H}n$ʱ9X;/76oC4* zZ P:9ŅΞB_1j^ j`b2QfR0+A؜~}CĄGUCkU]q?{3Aڹ;=>K/| x\;8)q&|~똠{za'Կل1ҕ'l2B( Jipjmebe!i2h>BiO`(R֊ ʟ-Bjڻqok/iPâ=?4^by:h4hp b < #qw$dv;uDu'r[;cQ/x`^ʼMGMمHpgy`t`98k9ؑޑͺYXGҭnt P& Z԰U5ȍ:ݨMڹs`xٯy=uh<Љ74dʌ%-0KF8WΖ!sȝd1kJ8Zg݌ٸ{l8_JoVËp(h|YͷnsK3?qϐ` 1u/!ZpɩxckXgu%9CJ9餏su(X#w$[y,{k{rHRv!ity@jOؙf4nOü / O\Ml?:]JD{vqX)]Uw񷁺qѸ`:k 2}О{+f pJTĒ;2Kfy'V 1uW<{w֚"P׮78ljye0ND޻퍁s{~<+,/Y̱;믛3{A X8<u]3;WVw{ǖGܻ;%("ڟ' pi>NKmdZ]Gr))rRLPd|2 ٚK=lq-ܫUD1heh.V^Yw~ho:sd6$犥kc#@[ 30l:iGM'T[Q@AnGӹՇ0~.:x ;z[N҄{[Mf(^:$Ԫ$>ms<47yQ(_[O-6-RE(a7ukxaU.}l]]?wlh9wuA bKR;AK8ɰ`pNpYVlSPLRF۪q0Uq A^8c\e]>sfa, 0ءUo3 G}8hqVn퐿ӇqUme{Ob9y%/u\`႓WΣP ϱ9?9?2J.;hw$Ь^\~l-"Ä?S7mamN{͏qs6Ko~1 l+zG\ &%<{^]yr_cuA!@+£!-Y'In RjpF Ŀ|+dqI5?c#M˅kfYrg$]}(22jC'_~><j9o6"#κί1Yspښ)懼|" .TK G! lqn~T1-;)_ig%(rs^iz\xy2Ƨa*;k!nl`nŅD/].8߾2S?f̝Oo|J|NV`o> #qsq6h1K vh^gav~,`/O>d_ggA7H8*瘐Q6x>v9\*FJl©P(Aw10_J*[g2+`.D2m `v"?R8ctm@'SPA.Bvu^^jrQfn{aYiBۭ¸ȁn!oECL>eο$ذp~zB`-wέ<:MHs7 ,d"°_)*h5݄3n+|كn"aQM*ddO(/ƴ-d((& 0Z[crEM+J ~&Fi ƅ* t! _"RfF%WRtk>Z'FfFcs,rs?_'C -37xDh;15T {w5 a@"Ng! *-䶷D}[6.Py0?_s:6wx R=;;C~uc "V<R]q"slKG5˘pBVЉY Σ\|Kˎm->P|dqd:r۷̷?O?@"g2_18N=eues0eO"iqO)uf~bx?SV`@IDAT >*w~9pvWcÎ/{8Dl(AxS YnW%ҳh 4 (7yZ \8HΛ߄; ! .h>n-E_%Y/`'[J/8]Yiź|jٜ)V@Z~b<0+pmJؿ3EH$T#yg?/e*;..tf:U/1~_d̝ :.8AY&dcTZce 9ӻ- B`<ww~6wpWBuؑH-B:P6g/,ptx,:Rz|KŅW~9,Nat(6Db&V1x⍧ʘ.܅w4dZ|0۷:i"Nq8H("8 "'d^‚{%@#ys+%طWOJs{h0 >2a)rޔҠwpa>B@88s-cu>sr85k͸s0|ϰaW,rڑMxUvJjF4eX(з32׿jiV! l>G7A"2;XSZ뻟+i}k[g8,'8bCb\쀑H.O8L'W1C`ܮtOzR%L$ViW" ~' x{shwJ-mBvy߅蒢70.Qw3pmԆgexAN =E`xTt\ CS3XMScm e3s Q{Įo TwINʊ4bO&!͚6%ص|䀃 !plZKpl{,o~Z;i3ҷt|\Ao.lFͫ׊OZdU$ڪ'wݪ9cvlcF6L%p=lv[:PbS1K6=~\ Vfq HΞGt$Et*ܩ*Q=$UpJuXl0Es$K]M#Cgy8i,B`<ؽw eXR9KCĞ'90  pPXe.Wp-#>C% ଞ7խ J$j3l)|BG%/-AG 6|#9@Cw?9rD•nDJ~I׊DBFǕo5l8-"[(s8k>M9F;? (ܱkf~ťٹ:*/;%jV/Ǽ"o儀?xWT1j}onfڹ')tw#~9\ky@lH|o]3=ֱpk&y6p1wxs N3a+G{9H\HjijOM 856)v".i喎 æ'_:h%˓DJ 7D$.$5MSkݏo']Xǵ´8#$i\_|loij_}Gij7>ƿ2n?ϔ:.opOɊKZmν5KKwAe@ak7ZCOd^6o\2+ۊrgfa'ޭ;ysڋm.?9ÊΚSz0a7Ʒ-/x:{G1;-v:y2`/`P C*nGCC|n UuZRޖOlAC?ˀh{Y\9yawAZRLkus"8u~ G3fgDG h:m 0:"ރA Lt8ΝU?[nA"b-}LS8L s{r7'跻%ȁ*ؖvԆUu+h t~ fyu(7GI8uvSZҜA7d~VC R|[Z%ُ?.8~(v y};J~pN$@i/A|'-D,i9yj~-}՜9 KPxrrha̗}@(c;r%OZu+6m~]" өΒz u&l@3 ~yt%vqPf^~)ty4p ?&vq8NY0yl /;QdY}p]e7f8>Fn`𪐓-A\u4#+`d&΃~ߘw1%+F1a.p"2!e(9l$`P_-<>}vޜ>ϻE^0'_\}sIyY#qҺ0Viz7Sԥ`ea-<[FD 22^v\b g$0r8R`8#췐5{_':fr3D*qO )㷈$x%nA1[Fqq\7^Bͺv։%? #bn)}f1_g0=XgW6"2;0'2xܗĮx+,y]@^W6 HsĪ氁 Eǿa?l?"Oes J5h ~(PvJLg/؛]yrX~&mcӍlhnln>f%<r̮nl@JTqC0un jf?AWKWO?b@_S*a9DBZ~X]2m DuPN3| ؾ[2X)^W`1=o1\]Ր^ɁO}nJ1n Q }9֯|FpҿB~!νATDr4Mt^$ßBe"ws\3rݫ.37C7>lq3OFY(՞-+@+!tJ:-Z#@K:*j${06PEBQ'w3<Z &޵*pFBf ğGst r+gx"Tm\~ t.m;9^B@¶gvKEg[;n]moâxHJh3ÔzJqyJ Qn#d%%0aQ5x(S&2EO1wXƱѪT8jٽkϵ e>ek:T歗_ ƕ Bo7elmv =;#eƎy2?vGF᠒ v>bm/$.B1)I|'?D'd[[M'pϯ. 3o)>o'CD]Isnz4lPqůy~ڗTJ8J@3tt 6u$`n>hjM%~P˂mNx]~Oq8@B@ 68y?<:|2'pxI2#z\e Jm;sXMnܻm660y-3{\‰-jwϑ Ds 8D1(T"S:D=!!g6m.JiyL *s?{|[i| V.y$ID}U4/og>kf n s뵯w:ˤttߺO9(p0#BfלAy+.@k [n\4ޅ rx͉2nsIl1. 'Ξp/f`u+whr ĈL?:yzK\4m\ȖX=4`W9z^ h1ZP_~9;ggRiwwR8Lw -)kanFus)q$LQ ~nyGˮ$si 09?&B:Yw}nX|?-Ӝ{e^'DpdDB 30aC>S. =CM\ęذȽK4B3tAH{|&i &'!`(YI^ʗᣮ㜿w$t4w~3 :0Àגr[ĕfy-9}[J|Q~%c 4FE5EB+m#ƦҼ9z:\H8L~Ңۻ&=qӶfo^gARp OX-<`azހ?6`uh!4@9DaC_mKӮyL9EDj`り[7_20QgebYNfޅXNs : 4->|V={al`q˅ 3I"<-{8D).,y{֟iFIYB]Zl}A( D숹ǐy׀k2x&UR0bBAKPoZu< sŲc_G3LFns %@;6S\݈#9: 蕝kMA -'N꼀h"#pF!0 l #윥ⲐH(Lc_W Y"3^ZwcʁM4$YZMlDcfPqS0uv3>4 SK+tQG1"wǺP"Nh s%q|^ (?ދ[ɡ-A2t)zzM4**nlf9"q{s&ݪ$̓{Wܓ#/@n|*^a<kWu/G hfRVN]VW ~K߬couE<.wW_K֨ /ZԨAƾ"̝1W." ͝ʞղZCnDkGĩhvCyX\:e\{Ayna9!ƓcLVT D}R8,b[{g70Π3OA9<;#N[`ㆶ yuˇǓ?7̷>A03%wWr8s>1;$~DA?r{ u˧eEGq@",vm%"`p [;8&?w4!pnfkgMu>w@̍Wd'wJr۷̫͓?,kT/%s Z{;:W:p{$ln ƪ*3 ̗28W5(V`Oa&yq Zo]O1 ƵwTfيKk{X:R=G:Z5tf G0HaJtʁא fٺל/i xVKOiXL'2ҩ1yɿln%ێo#%`B}wiN>n„rST@RDqPDշMK,݅<4X}?1%ϣqΡ_aUfpqlқLΜDN4&] R۴5\BQ,2!@^J_y(n;XZB—|.CDZb "5;n3έpm/N^qYw{HB]Gӻ9BljGq1NA8?և/x\<9׹Q߫>Vg,y e+~sڹEc+ǐ(2$s2*(!ʛеT qpv3!}%$X{Ӥދ10Ge]xYBʲ aס Z)bm 2[eZxaOS<'Ϸ2q{J1}rXsP{<фTlBx[w73fn(4'yr<u kkĽ|rnK#J-ק#S=پ**'WyZky k0!D15Y]w/Y`XҙYl()ϳ8KWM][o~'꫘Usƕ6ɮ qs8C0Fty!چPR .zf9t~qo)^%8~穕/o)s]1E̩0={dOB|9F`؉CCNMhͰ~A6>=%L^'pظ>_| .jYNB@ 2`@F@ys{Qx v!a S4ܻ`Sj[?^a?(+-Ʉ"R@LN.SE[4sԌj/EVqaTS_LG 75?Ъf4ާJ,ppO1V6`Ąד{ٖME;WdV {`r8 9|PH*;Pmr;})̙eH.=Q$͸^ݞ9!,n ;ފG”Ŋ|+8.tmdAоL2`,J>9he9*!Ӻ%8) ;^Ck:˃mw-]aN=.Ká<Iv/jòm'֕9mvz bM;͗Y_i+ot E@ÚDeͫpK"\)j}h_{OS@2RÃor.|Ș{,Ays|.9sG24[0;[)S܏"V(2,\VQ7' -Bv)TwbVW-%̍L0'N=n]9y9 ' 1%g^pu<#plk ^ @ L/ \@XڭuH( +S8FKS6^׾7˴Xiaˋ hLg#ː,nqk(]Cu̗ u @+ OȲ8Hw 0\b(9TksҊW#9pHXv}vΕG+;s{(@\r;ϣC`'`&t7SINjڣ.A'~3aAkrB#B91'Ӱ0Nf J|ր椓߽M݃}GH^&$RLG@ru(;3,N77n߀hg+UO~^Al^uV-B9{|/n  1-S9oq}?7Pi/=nAq=5uDĉyzo Ie%5b[P];]̽OmvS#3v=#2aGL NB/zZ܀!&O>y/``]Bc [Ŀ̞&zkyM CANCB#2G~}0;sP$&z5;<̛W?N0>1w4jۙp.>q&. }tIa$4 cJDwx<ˏ*2y#^ex6af{8&k(y#&Clhj-4c9~?C|e}E韝+F9aD.,#ޜX1w9s y` {zIZPDO 4 v b+YЀT{lVƙm|9&A s<&Y.v^C;zMjuX](߸mUf@?fGE;:?\vnv;B G{}SL<;41NX^#,-,Ȟ;g_qrosq+RqqUhh`υ>.զpa}~КXspPXڌɕ9(WH$CNofks߮G̢"M-]5륇#1[I:d߂w߼Uc[F{Xhs?'oju`> nJ>a~KE'C-%0q b1 nVpnLNcÕù&y!^X~'٭E`.I R D'@]HJG?:GoqTV[F?.EyTv`Q[+C o, *=F2C0 xoTph0gp8н<}‚n}ܸ yzol+/o+i"{k>?vUrR[_0Ym9ޔd @f?a-dkMyo|Ow(Qۗ7}U_Ytao>QQD )&Cs 0Nx+d)9Tܶm|2-}2[r2iTfܜ:GjHgu"hۢElqFB9YSWk'e* 0h8?blQP1X$3L;wcp9,3*5Q=?^(1E Fawia/λZQ0- q~5{%9+jS=<ag =|^ 8zB`yl^pAO;],Sc'RWZ*ṟGY呾[/Ac϶"#m&MfLSvI0%+ &zpOsy7w/ c.:9L 3qor( }"crJ㜓Қ|j;М~ݖ\_n,6Y DK* zv<1yL6NqߵeD#[!XPlRds{7=jSLLyx^ Q:EBՂIͺ9Dg$I>3gg,+J) "H A~!A$tV V)- JKrpvs_}WU]weUWyanqdUMO.7{ٻzֆfe@@ITt|i[FOhe .=1R+@Yi *Wԋmv H)lYνMK AfJ·a臿gj]!MǙ91O%s |[5}d03;۱Q<ϊv qn췮  k]= 0\TpcEڡ,@Wˏ?U|)_^49[ԦiAi3;@>n J?-sD>&v0ބp,xˉqU#wKExߧ*MIGXXEhIMyv~1.coI{QjÛ?I-BN-&RZo`[a)AS_ڹ/8` 2 wnlI5\05 \P@ U}%ʫ q"S٩RWl0@&ܨlSLobr7iXZxY|ad3Q4&Ғ_nJM@ht~-+ CB9 #'eLM3}Aq\N'R@uH?VBk;*w׿,X,nwpOI7:3tDaC@gZW$Cᗉt4⼧qT@"@U6>}U3*:MW#m A\Vo:!~cNlo=R8.e2`$y=zC :kʒJ}eHPt]<4њid`|*=f?=۟EAu(et>Զe?!9/V1(3_rFvͬ VZJ/ aET7{.t!) eҳBFvG}kYr֔D@ wވP̑CƎFN)Ƶsma2TO|:@Ɲd\k@*|]^?~fft ǸxM'̗Û˅pMHE ˯:}I\c5Y5-aHg]p~K[!7rGo7ob|ۊ-"anhFjZ.#Q,['?׾ok#e~2{/\RYxmtkn0BZtmNq K{˥G',Uzrү+wٔK6ꟴε o@C ء35#v^s=|ܒڤ[|zKzJY1ViKؔvMǺB+=FE p.(cp CYu'I;=I "xp281,ʭʒallKV$Z {ѣ"ԋ^|\n-8-0)/(07g(_$,ۅ p㌸M-a&T!xy3Y8g:?nz׊踶(weuP3Avv p5߰*uJFX_+1ƫ!OS-s?pft/7 `琬$'bgO7o*.l(3WtƢ.=h'!z"dɌn/Q4$m VXtl${ɭ?}?K:A2|qbDߣW1s)}mܒ*9ͽ|#'6s.",d;O~= eWSdL̸eIdG `bD=#>H.IʉDۏj6tգ^`诳oy?~bJ::ƪ3>Ȥ=M+L~Kk}]haO )1vǫ7LLjbv#,Js`fR|5`R.]AUwA4r=qsT{z?H'D>Q,4peɻ"TkHQ*t :p"\}ڐ %0-c)E e#—Vj:7uU(S+T>̂*.MݓS髖}>o" (Y@Nm #Daܻ^v%l<3 b!=Ԩml]5v:ZѪ}[/5o`(Ĥu^VH5C\Kwޱډ%R>-SZrJ~/ 4e=:UC@IDATn< H^XsVLYIؘ#IDz)_=p Ĉ6?6sWXTFy ZIorU$QAPK R˚?oh\VHϒOcwY sį*Jfq~19WJu">nho3K'v"t.:haN =;5k;$G]ЮcE,l*C}J@o4M)8h }pA@pUs]"%ÍI}C 0JDfb(;cT.f' l:up ¨5̈77_HEKKOѵL8^+CN[ Rk nJ3<ǝ^tG$M)~Ƅ~,N$L\䗅P: ª3@L ;Y /\ޗ|59)K8"}eC8.!| U?+<~.m6Ĭu=6&bh&D̍7~wWg@skye*.dq3 wb[󄶊.뜇=/H>Cav6U}EHra7! gV"]V[lgQl(N”ř O2Sm̐4|]U-+=w\&6Xl IPT6wL+'0翮z"3nH=a/jp AG=sGU \>q*fw ;RE=DսvH%BN^{P$f2DMHZ۟gD %}cPxEJ~XI۸Xε?-5 >Nt=qt_[?ܯ Hޑh :!0uG  VfQp e{SGO1RwhkG?f/>MW,y p!?T<M@ùPp/k^:e2]Ymb(%R_|CO!oIhҢ"9 ]b+AӡuAM-yyFܹ.6+A!mEQeK8۟$][crBSWeLHCQR@jԔM Њs^Q QP ?>!o T`$}҂{ĩ_ӎS7\ϜPU>%W"UbTCd`:mW>!%='q|Ssg!aNlj\1ڭ=qknK#7N>f 5`GcIA`r9ə.'%^DX^o3l},ݣbR6&+g,A 21f}llJs_mBv_0&H#e;ML,|;iOEeʝn~ /_0!|G+@SPxE&er-P#$ai t4].Qj=Fq lWd%m},07" -']ny:qMơa#w<b#Tkz5D5jbd¢Xt]_1]S"V qO_L]:o[R_݋1?Qcہ~|^~;O~/+1 =Nxd=@j_TR[ I;aӹE-ӝ8.Dnv_)N_+-,]~O4T̄6~^qJZuqݷsi~QALW?n* |y?Dh1(A?Coy*};)֧?WƧ/5̪l&wN, }berق& *L:8:%?ʭa۸Q!~޷1B[]Юn@h+Fn' B/%Yg5ʩyS2^Tk {>'Spdy+i.,ſ:5 .=Od/\fvNO#~ocd颬õO_zJˁ8w\4wagcC~Tِɤ9{Qd)*LQ&s bA ;,1&`) §=I>wMcqher0ڣ U(T~GpFsg.epj_ H!~j ^<}mLFMR_p XR'Lر M7D"9Ҭ5Bn$X#/a\OGr]Hlal>u &8#(R\Nԏ5O "&eE9 >yI 1Z$~F$/f֋B* 설2Q_b/+N&4/˹ cb C䚌]|K+oUᜧ[qہo\- Wf5̔H PA4TggdP1HW(@elo'\Mug?jJlY1GqQP!q|"ͱlc/)/W q9Nb4f~]Oyavd nX/w73rzXcYtk^˘LLG@ 0i1}~Ny>:ӟgOi+E˜ά-o4)'tB"Pc9cJV4϶u+;B6LlT5VUj&ς o'? Ü.Yj1CXVG;\֬>C#9k*Pcx`'Ӗ\ήQDO+(KcCQsyȴSWә&S"6R[U2wcT-p]$44Kp>3K< pO.η_z]엥W06S/M &Vf )C `"dE!%Ճ ߲nWH%$ \c:e"q؝4|w=ˏui+G@FFnI4{Si1 * WvT )5wbN􍋒 UB߿+ Їp<ԁ5ˑLGxD 17rkcK_I~i j"E:ؿj,XS'O'fm6qx$~Y2~SWqEH<3prKU+ qj^<П b&6pCTV:gRl'_iڎIF p u26.zfVJ$TG[zM˝[|MÒ8czNL i)GDC$5 c_E$J0] mj5@Z_l^bNں6r4 XRb`D; VIhȅ;49eN@O#QCgȏV#vim@,ՙf B9⼧l> 9@(&Q0'5 ZPT}1j羬1'v+gPIF`ʂ eiK\S $ 0Yc0x4w/hLOrRSF80]hKAXgdŢ B%t!#悈I: z͌ VSXj녍\y+Yᅗ`[5 z$ؘlTZ)iS-0d9;$l?>ctbLL _GKnJdA51?0=0}5€! 8!,-k2f ."*IʓR\ZѧKw.i`Pye.HJ 0EG(C%E-nާM.7븀F=c±?m p,OhO8%6bOLY65'?wpM.lUjooo^Rf1+\Is9MohN{|Q>HW*1'WE)-#q7p{P\TArd3kg{V9Ap$EƓaеT5O7[&l&)A}-\1R5Ig]PN.6 Z{2 <+)0GBP}]5̝„\UX0Ww+gR^ E f.V(d!=U. Oy9M"y̗mcI19; n_MMK3*GgN*C|YA%<WZGqSgѓ/'c΂Tn aV7vtƴv"fԝhKr;xIiN҄S‘R:DeeqUd1Y2,õ f8PL?,CCz!U"jPNc麣9JI Ǐfwc] Q9QC)yFݼf 1<-X$FTl qXnCe>:kGͼ ,)g27|_<>F{.:#1`g tF}CE$3;8qp“1|/ofWZߓ;@df?|hI(akAl`8I/ߍ͕P8724P.4kg=aO P,&SgsXOֵY ILڙ͖a$ ]5OTZfP]Pm]o 8ysXc/ZcBoJ Kbvkaq#*eFvsɹl.vEV40:OnH/NkaUcd95m78'9K!= ^:β1I>4%93@̠j&FB.8ܑԥ~Sցw{`W1\sIp0˩w\s}ZllXXߗ~[[?#ר.V̋2|{ |x2ĕE=ݲ T9{RQ#tB;1!1vIM6$ [7'\B`>My0X!82%!;;מHbNz40S"~[JHT1BP G#$PlFgK s.(ns2(29ETI̽-I\_(6q,kE%! ѻ> z;(>E@?_zy^n;br8)1S|鑘xZnzrR@S:GGa 9}4 `m@2dE"!/%(~h*s뢇u-rjƝ-EʉU>C3"ȝcb-le53LMDPׂid7sFerKx=p IFj .15%q'p"W-Kb.ŕwMn/E>bGeUr:n }BBrb"!*F\T^2A1]o_{d/KM&nvG]x["^ń.,z=>sH^-VDPBͮީ*_kT Jyb{!&aXY{;ɕ@KmvdjG9!pJo]D˶!,]Req~QN\֠L3aëcB9 ~xon9v]:ƂOQKHC40g/$kR(LRptk* 9nwmU&nu]L(iAK:cYl,9?Z/8c@bǛ]ۆ r53BgmCϯkNfI_uW{ 'igAW*%1Zxi1^KV0e/Wg˵I#EIJ:N`;g; dvq{fU38$ɠJ;|ebCsWٓ<pDVp\ᚲIJU.ںv! ԩak%%?iJLwHl!d1xq;l$?Au@r ?Hqp7^,BKU޽Lh<-B{̙ ˑ.K#cRgOn=kVe[*8A/"yS Iqs*CVQ3UEwh" 9Y˹=0$B#0.ceHzGse…1.a'_8%[>;O_kRRB~'yd-8~7hl0hqx0]Na4Òoc>).fBN$Q-#i+.&)õ(σm yu]}a廩 f]y*/H:;QkdkoD踫i~{]:*L ɳӹ!:DDTAHoM:Y"zj9@M.[;v+}{}C #u A2y<8*: ׄsښM!vD K7օS_޼ +/'KGHB&L_E iv"L]C(+Wa|&5`.՚bhnj>W1o>+,&.wU4nd^@l^nǢ#U3+[;|G'Heo6F-f'jYoϱihe6Z/5Kߌc hūx5Т)E :ѹ.O/1pDWHΛ^ߔ\}sb"1.d E|Î@"UH(#bpŝ! ;u O'_ ]ZI` ΌS X@!~%/|C,-'lB{$!?dPW)fcAFtX(x+: -@ګ_ ]>anx>KH"ѷ2 "w`;)q{jHLg.s`]n}3hzشXmwS{ڎt WG7P խM&'hHŗW Le[{`@H=߳,Oxyo=W>F~ 2$8J=?ӲBy7!-|4{?v9m VY8|]xLecE0HYxng:oAF+z$H1 _c{-Hɴv^WR!p%:Bϱ老 wcd߇7""u-jYY὏-yi. Xb36HъkDYDPIz"U E8\Iy隝xG@ qN{Kuo(#f1D@rzd^R5O2U3^S9xcKz.)QHidٸH4QnAi"xOgִEc)8_x, b( ",#a\{o ˠ^vK( OPO`cB *<R ɂ~At{:#`b5ԉy~Idps[o5td{v-SΜhn.%bP~aH_cXClˠXZ=vpt~1W⏎782 L^݌+nusX]E#Eu c|q?"uv^gꆨ1@R"{Ix4L٤;|b28k@Z/%hAu!`Ą@C@솲|2=&-*~ࡘs/PE){iJ!Q;AHQ5ύsաZ眐wg+{@b TXCm@Q> ħe2ӖA4+NںvE[ W HQpF+{XaBV|$Swbv?0fxNԬ,^K~<%$J_]l򞚫q{A hkS~bZ e^ܫHL@8]w;~[T`s7L@Phbk}&aY各.dy$  !IDFk5 &+ڼ{(mM2#Lnhcƫ$ ,Fa:jg}B/ Rj0+`uR1uc"5eV| xB0[OE`,m_OfW ܬܨ ӱ2HWPtT3c&@* 6EV-`  [F"('?GJX$!C?α-<]'M>ZӛDwמ,~ќ蚫 )?tN:nh]qʀ1R?җh(ϽW+N񛑧oJm0È򗥎 Plؚ>)wm+#E<苋7WH 0IHMRtA^ĥS}|g]2M|ټq{鉶D'M0c+:MZ@Bdt*}WM-*Og8j8OvjWL"PQ0Q$BayG1Y}(_J(I4JzⴛyكiJ8' a<`Ljj[e!p]> <:,e@-HWggK!}ʗ~,{ {ߺ.jHBnəvKL)bVL8M1g5h˷_U;>ӯ++r_XK>{$WW5q6yW eW}" @lq*e Ƥ^s Rjyrh]WS,baNKഢ8=)_k"?ju\8`&|XȚ$j 1MBCe1}iDP(Ls0g A&)dS[$. ,[gTR'/^愳Gr>6qVcdžCذOI><l %CcNEdYF%D!ӊ&N{|vg9˘0꺆:ԢL zi̽H?;ߖkRr4'ĵ :9~[ 6F/akJp9yFF,'q=_97`ZW>4xxMF30˜Hb}ڿhg nXo, _?{;ũOpBKwI|'}/ϛMb1B-jݖ$n@Tt4>ds+?;]Ӆ%X޸GG/:_?\}Ez;ʺHi"@Et/>2$)*wu`R89srb|\g_5U6v:MS _i/ WY5%EZw!yPT%}mEĢs-z7"jgʰS :<6iP\fOq{껟ɘO/I<&X˨+@[ځNs%ee^!fU J.%L& Ri\WB);\vM,??vn+a`A]=@x?w+yylb\#l90\µrnDAE+IN'cEaccƇ-%@}/|/g?xbF,oJOҚbQfu[YؕZL$ QM_%)_n_ڻ ),"gfJܿ4lYYz0 pMSb x@h@m,>n;X Y6|8 M\څŤ >uYsw kF9AgsV#9$,@5p;E] /UФx}pE+0P`A7J?66PEuwm|[~wNp]%XpJE8lEek.?ZꔼR{F\iլ mZ}2;֪IqYJ D8طݢn+B=R>E dDEpBmsƩ@G];giSDɺF wEm3yG^|෰!E /{X'L￟,{Ƒb$61k={=42q29+&@"Gv?7dIn0{(3aMQ"qDQ/Y_8?3NJH:-n1d8g+ |fGj%Q93 ڸ(/s?D  JĐ>lY7q4;ǵId{f={stS\)΍G!d;%c6eOd&&iIZ}F҂Y1QHioxV}45򀼛@|qAzWdBM&_ d~fA$z``|-B38W=טeeU9)~?o:S mD]':^q88v5SfHW%1V8͒\FaWk#"|B@FY{ J0 Ϡg5O EeۯԨ s;$¼Pt@D#5D6*xly9}-)R$/;J pmy4lO1Ǧ^Hf+lf_""rR⽫pz-}kZ>_mb8.kmvXTVKwɭHH16 sxPNDPH+4}ˆ &jm֎9ֹ] _DQB 9jxZ;wQ Шv3䊖y;&*`wrbIL1cQV&iW}ÆEIŴq mpΆ9KZaЋԔv}:`[} :a =h5ɋ)Cv֥t4Jbj} {C`dTg;| /ל`yQ?VeH':|S{UduBJܷERX}]NLƞ+h\zG7#'dk@ۉjLI@S2BZVT>.hxE 9,Kp+Yΐ.5t j <":4.+P)_C=ppNsGeM֬Gg/8#>hhlC=ƥDut"@IDAT=/du&?|w wO]6?wz"(hs#eyw'6LI՗>~wg쾱{` wFUTU>˂}Ow Zq$4"ӊ @S/$?|ʁXvl\8Yq# Q(cum$0FUp2H .V_pznZ!S \vZy*_=M{ن`A5nr? Wmi<|C+hR1`;p"`շtgss:7$㼬c! QxUyeJK判Wsɽk>Zʈ Lj$+- HiFDs^dgH·͈ʫ|AJ94-H.L+1vE׼/B['q(Js 7Mr[f r+ DYJ,v^ʉq`S!Jb(v;P?9_Ig_-Exa8.eui%/aT._%\龙;=[6o_#ɜ 'Ű?9t[ W8it!p ߕ]?":63\ywHL)T繂DӐ.~=:s ck`bgGu[SuQ@Z!n쎢ik~@m…hcu9]DCXt/LYHL;򱰐脘hf[;;38Ӽs:w@Az]1j7Soi"JS>y++0^c#`cz?o酋]S8w%EqGni~4KǬ<z𳨖 }&=!D5R6Yiw6TͻW^vf]erkw3ܖ <8GNV\w>)EA X,#]DG@\‰vO`0̃nEh#m̮J1?Fѓ'ae= hU? V55тytsn >!|cw.{)0ŪSPNMP񍩸'G B L(¼* F@` 8!&T [&P0 Bpyi }[o+L$4#Rl.ɋ_ކ6q$j H108$(3asp$8H 80*z'# S͏%u_fNzHx~T@%8"]\K﩯p JwVG]~[{kҭɓ$~BG0$&p҄6=`ݶD;b O }+# ?iܴd_\_ɟhY^O3Mcz c=٪&Uy iy1j\B 1T܆Iw>?(.vqz{q 뉯Q î?REȢ%0V`Fb=$(RvBTqE^|aE2NR:Ndt+u*/%_@LVV衆qcvmyr$qKB5/-(TQOhNH_ v++Ԅ\3jpN ӁƍG7΂xꂑB!\~NlhZ^[3\A!~Ǽ,qЕ}x}oCcoMYCM (JX9\u.%YBX#Z6HظXP 5CWd᧏W(:6h?dYX;xtrC.=pcaPlBWP{;Gg$95ҤpќDSؕZ4Ôg0l]_"oFcGPT/FI"Npa>š|] ; i˳[mY;㢂F9;0?[7Jx"t鱁 _׼1[ϔνr|yߪ~Y;~]M Dʈ*w}_,iѡ,L?UGs$-BZR1MBB[K.q3 c #an2Đ9Ҝqp 9(#Fpi |CB¹'Pq"bMNo^gwy~F#kI8boWҕ\%g<bF̮0!JTL/;"8]AY>{;:aT(e*g]b_!vBiYL6Sa\.^I?b% RT$ڎ(wǺ7҃MbQNx8UPSzL,-rrT0g A?u$&6$p8B(',EW8Mt8`tȥK:MĀ0^bEpnXghO:-s[5oJw({jWQ|W>÷9yZI[R# !Es~ Q>6«]HD؏+ᖢΗ6u)'O )5&RK$͐OXW?t5s xT2?dRƀY,z ,\Njr{ XϿ0kH5~f<01PR ,d.)89}cxe@%^M FYyo% !5WIRQ;7.Ѿ3,*=IWȠ|clV'AOEs~Q-q\P,sn}7ytg:NdKx}A8P6(h'j67~(Q;D9 6.KvO{3,H\Q4ɴ~,c59jjR2_ oӵ¯ЧĆ?'z9NhO9_/}d՘tц6PgQq0'`"3=~]9y8I5lO}±!<=i`'QH cC2}sgA*,ӝKFAAy.A<)\wД߉$03 @(&F@ouʀeR Pgcјȁy}xw|_7϶ujnvP0&>O|418Q`8?`wEXqOsNYjݨSb8c6*Sc$EsUe)>!#HoGϼ T̛L {I%fa;C9:4Y#&Bq {֤AG{J\@ 5i,O҅7 @qY-}j۝wNlhȬ.-f~G5cgGc]zh 0p΢w&ɝ_ r<~zN @AgP/p C4!>IS *,Qi?G"SO٪ՎiY>ku^w)UPxUjoba`xUθv֯6r*pِt} -ڑj'jjQ%Isb~+ypɢ(R߀~r#_hJo:ő)x욹v,A]yB%+mT:sM*F@Cwz1v$#]Gƒ)dX#v~ c[_@gN H:r Y1t#z({@ AnD_U(UCy%E8s17j  LtܨX'̆ہM-0}I|t,,,~:á[_2Ʀp4 ۳3X*Ҿ}f \;ᨔz/FIđX1@#R>cdcGin5Ya?jxS:{.}عĴI&D{Yp 鎊Գh-sAvk&OռūPG3g_б#Nׂ13׃}1l*̝,|9zbps\,e l-9-OI#cCcZE]"8= `zރ2Xx紮QmrlOI=qCe:;tN ώ0*+;GP(Tn'@ -QYuZ7q1;Yj#.7 L1$U;YTNC|2n BB a@[VՏHWkjmJwB[J{|:+qov E}=ΟyϽ.)6<e}cgheBZԿlb1ygԢhbKD,E!s@6EB4H|ED uB,Bd+2)'8E("xAot,"v[ӐTo!Șݍ IwECmQ%(Qe3廬-ɀ>x@;;Z4em≯ LSJ\";<oaF@雗՞Qy_P8hƳv2+Zn^|?u1!pS 0ɍ{LePk{Ll\!0nHIq~MOD? Eş0RE)41)NI&x誔!jA06/R^v*!6gBc((*Ą8,+FpY-~&L Qc:aczFa>< ͚ce%S{0]G,νo((xx&O3_p@<]3`J" qAfMӣOcQ)Lm&t1МƁ(#qgIEy ӁׇW},"?̟*FX4E'62}JgOB'kN%Ĉ-O7.K%3.4p=(z@J:Kgpѡcy.)'",(?]M:|7i!g笪:yAB,{mTtGƌ?yFn1F[]6ȟ0[lfQ(0.e~=@(rfNzGt1:NÊ_tGP`a4_לr B07Y__;3oȕkݭOa8*z}H31L[Q+ DGCH(N|_vҦ'ێ$~bBH` !X>O/0w}Xy#J/3W7=+%1Vkb›".Tãʂ"_޳z{6ΦgCœDX[}_>S؁hXύn/ԃ%tm䔵 q 1!20#|nl$3pd&$ Ď2L$ UX MPgx'PbyC/@j :QQEXJw#4ߐMbqͽde68ָ̢{2B 5B =vϖK,bGD?V3C 2Q^YNA:pi*N("` OUmr 5۰B2ljXΉzx9\8;$sBh櫭2v{߃]%/>p3.e y闲oϵ&Psc #r%X%wB :L)C'cJ_<5!s]Y&D` }Heo7R5qz .F'4ᗧjU{Y %Nb;3ܱ<BfvJ}>Hfy I^YL=UcENT6ju~;?w!X+n];Ip~X bXGp8_}ƛ! 2"q}%Z"r7 ^db V\ƏY$`PN5B#€3+3~ß1`0H`Ptk+66,j{1@OfG<ʏ4_50#D!ew Avd/[TiXǶ'sЪPXe _̂ZPtl=<s'FiCL|A B @-õƵa$ag5~OZp9 _nWpj >`7G 1 U4Uq9큚ߕD~@`$dB0O{=E{:E(Gϣv ,GO%v"uf7?Ζ{7q"Z}3,I[YZi O+Bdw8$)7dHMbL*or}$XeLL_nY 7 v6(z@BScpiҒ R:Dpt_@$=!d套{7O?_kGaYw^Y|7Kx z/Gac>$?Cbr8b%C-Ş6px:RIG8]'ņ1 %ܟP SayOvwVI.K0w&Г'F| vOrfg×Q-`^`<0b$T>pz@h `ua~ɰLSlbe}|}t=KP\@(ZrDH#?ԈC^kZ6_32Td|iP%`1+,ᄋ61y-{yi9Xݸ2}ZT &0*$#,iSc}Չ 6ޱqҙ/>ץ_8֮\r1bF ~9[ɽ{Acˎ OkrN ,DԴacfdHxk;38[2d1y勁|hOO_-=Éf,=*E$Itv6mg>K̬\A[%ix[STRf`="/(dŕLP*VDޛ !R^XJwkbG"F*}ĕoٲ hK!RANniQ3M>W21uJ-N*(_03̀Mh{%׮})F L\6ݶphz{7OFd+V@#M+@l8+vF? sv yw$cAl*:[1bFh7%AZrEoƑM+ln{jq 煇 T@؁Iđ/Jqol['9|\U´E@2n~#?`FŃ#uQ-\RH4څq ޫzNyS9{;+VXkF\U ([u(IԳe׬K-%~mΒ2J՜(|o0Uó MwD^ A!?QO~c-5w 2L7FD,T_Df?Zyz{ b&0c5&SU6ܙjtJm|I`@uwL@I~&0'NĻ C\ |CDIˋ/&{j.:M}1#^cW9 \p ӻ#y{ :xDr'熦&d[qnr0iѶǠ!Mf)@b: +KsZFJ Gd3rPRBm20%Y~`> ZO`7PmԤ %uD$s01g3` W.垑L}U 煁GgFM{d^RYsDF}>{ ۤ~?CIt=s*qc q*f01BI~B8x~~/y[eubۓ·`ZF" ?ϭ7"EiFPX RWBm&ns b׽6rS /Ti*[`YR`&@7gt&Y+Ou@ izٗ֜NT:YPFĿmMi ]vC}.5U8P&9 4:QctB9+u(Igg@H=YJg!⟿{-'DBřJHN%4jᄡ1G]"ޯ=&eyy]/ou0?BjE'D.VS4z4, khLM{6V̏'7aMX6Y|"HQayXjhYl)SensaЌ ^bq3U"!C)Uޓ'*o;;}(lYBbLN ]l#y$Xd0A3XXYP/?xtpl G|N.@UF,¨_Jjy Dܯɍ֧Vq]E0:%MUbGAu .~ iI+ETB? ӷR$@;/5h&3Pt?'z\om=FwJʻuC 8za׾5ܘsB' ֌z}(/ waev P'pFj83~@[VE".~bd).8qbMLqi3:<8_^c<]|pى5utEK\:\{l[:gKV6iYUuI_&\&xL<׶U:.t_Jׯ{e1JT1ѯ0̎ i͹_A>4qR/0O#_7఩м4whca4WS-=˩L0+KA'/=kkHo|A7=(MUϲ 8`s*y!mbl ;~l(h?hNO [EëYQڽ?]-]+@ީ:'=Ӕvy}e9/ed]%˯$T_x\bI4kt^'%ڙ_6};)[V@ Y*Gl ԧS3\WHWΨ],8vF,[d CG`#0\>}I63.&:>s㢏JDpr|.wT˹?zWg?'?JPx4zcTMc7ԌW2ݦضRO969v[#b)mҬ4Dtrq#{ G@R\bNĤ y,}H߅Yof3_=3rxtfeY-ѝ" m#OBS40_%-ܼ0rmgGE\^H%,Ontd^^58<| LFG)|J#'S7dBJ‰`Hq$zbN@Y#T:wҭdY 3O鶔OӛnZm?m\F.ISPG 8?t:JJl6UzGV3Jj% 7rÛf=PeEyz";X 嶳=i7WHhsmH }L^r<|rB- 2eҧb!y26N;r!kُ03ިl6$^3?˼1nOwXѷgC7/%}8hvr[m@e[4*ߠ2k擝#s|8kXUiz$>^4px P{7(]Plkh6F)Lx8 c?ù6F7rhZ_Lʇ/:ᣞoܐgLZ%?O^~ɽg-qbQFkr1?D$$dZHlG&^= c Ňs;72py$Q_/zb@8|r1nyd:9<M%F@Wx%*/u.zT1ޑ$xD/hI*dk]#yބv@P=lW{3%,w:pOg+r'7?Xf'o[.G$w"FD"b-&s(^LLcB"c3=SW_6nwLsy3ildb*Ӌ_DsC_x"WF WWt"]Tr?SRoX |s'Q֢_@3{Hm"ݞvҏkeՇn.'[TdB0+ϓ Yᡘ~m\lnz)Vk9Wu4I޾Y=C}Cf0*0,Lf*eB[tr֌2NpV< PC\,0.>qLHMv>1 @Fon.#HVbXƄnB(mndg!^92uȥ0Q /6w$ \}4[0>.nj 2˅,8KV^,VSu$'Gxzב%I0oke"xڀh%-I$#^R"mԶ\aoDY9c?1h@7wv~1Ԙ1/>]2& ۘt 2>-`ǿõ 31,ؚ_ "/lWk(IcXze?n݅\oߎQbq%O$Z9ch\B!CB1vkjA{m5P6"7Es3jY972fignP&q1.d񅞟hDbd2<;;) Qs]bRLa}Eth\lX N9jltØ1"n@߳ :^6=N"^Hө/$"L~J<"@H\zR0+:``As~ v`b"}AԃwamEy>N٘MlZ|#m@[? @%7p$u-z}ø+&zbMMC"c^6׎) ^(?b5J5r1 K2ENB`w.(P7ޅdZfY@ t`sW (δ,>=pAcL\݆EC/?_DC~lj|=b)nV]Zq`z9@IDAT4' /d|rQfrs)? K,81 ~u5x)PI%k  Yvdv՗<˞?Spo_ ts.1f@O4I1z .LDL+QD"[ݏ'ʓl'W0,v]aYYTi[`40NLvN3Nv:+_&ˏAcq(̢hS( ݲLNGPd[e`t^VגAg諓DbM!:Qe~Yߌ&&kOgIZIPbx!eiP'{ɂƲ#9Y#!AхBAc@E{fK P nWc6n`ć@!D0Ri,{ x}k:vC/_ǗKd^98UjLpRA%f/7Pƪڜ<l K6?g) E.Ù# ,7fjZ C:$⬒%X _7|YFde6ɩ.;Jb@#*4H/喾Np q,7*}c"B@r{_ ;o ~θ;h)sOJk0 (p<-; 3],sWQiK:CQW<\;.ebl5O1Kn3w,N0/I~`.HWH4M?1OjcyeԌsO988B$2*L3]"`!oՉkD kvz)-|(WԢQBv!Q9"uqm3kqxEl;x>3uL &႘h(Sз~֞oR!!ܱ81dyј%ƹϸ' Q-(EC`|a9N+#EA{i…ݓn[i-b}65y@*mU2e]Rzy.){1nS2L;/*S 4cD}L7G?ۑ[}h'?B w8ޠ|OOՒeq- 2oꬬſQ[=0)nr@pA[KSRȲU^D?E hxKWt܎sDȋn;oz]\ۋ*9de +is~6?scl 3kmZF 8eqo9dz<HTs-)7;Rc2M76%~ cOLq+t`5S栎Kc!~/?4H"bc(C.}%DTveey;љzހrǼ/7D g^ gw,nFO(2nұY evm$v}k1 ޏv9t}jjL"_k,ЅccrNӟj$dKQG.B7 LnE՞};Yz zB^oԐ7GNS3/$ލY V S\P㋣%ߜzV;vn N72ąsRmWŤ*d}߲G3=ûWw:chTo)5D&Ȟ;\s'CwF>wks#`6h4,MHeCq?{2fN'A[qo).d_1 HO΍'0H >قD}Yv)׈BbQ' p$PL7+pY %86WNS&H i(kOB(-:]K\|5 JՃ|@ fpܮXQ K;cѡkw:z/hKZ\=y'LiV[aJ՞dOvCH >qZN4IΩE[N傽q664c~MO .~$gL=XWOˣ6׍(z゙+ آRqLx :s WB?aϲmNg:I NH-_h4&xѶ}(trߡ$0R77\c)W~G:vAܰ:5-S/I$-$eRU6iI}Y(te>Hw0߃psK:<GS4acvRщԟGra?3̠k0m?S/<,WֿH*3ߡ۸G_ D+}d(lN~*7ӟI 3鶅6,a)S0Cy@%ň|;y-1cM ryLjLQFсOu;2#?,OK9g4m/#_K|7 Գv^d,o9a;Db/ f@&x'k){FwI^&jK@W.? 5gŰ-``b^ĸ<.d)ѷenǒ߈&b`E|eF3Q u~}zwMBSp̹r0Cpl6 "tKgwˎEDfl{o,03@}c?Mf)ևCv8c#T]SY;f6&"U;>V!8)e츀i| Gd2۟"t nļ1v9kԉ͋ˢ2ÃƁ9 ~R+u{?. cg Rγ@ ^8>f= W(cIu HucnRYY"Y,sƇzikspz4a Mf!Ï n‰3hKJ/KK3Ҷ~Ҍu;K ˞N S_~7/Ň78B,}?L[4@\#i;~M95vw j]sm1~ =v|=wOיm4& Ϋ/ln`6H?qj Ih GgffwP('O q|@ȩ:sc¡Cy-+6݇aE@mxhe[~'2g9QOn<|D*;U%:&Mmq/ 3ŰxWF(8Dz^iWf^W*n0@r! D֯zp2~tH+{4|+Y{$Sv` (g!śS"[6cn|_&s^r+fcžLohaa% puƼf(wm=mv%k}'߅yZ4} Frv+!!(2^^╩2ѸM 3~`r̸W 7%9W>e1`tj;w̙w^0MY @Y8(&QaBdP\ŀ%0vyM6QDp|羽tANV0+/'w 0h9 EuK[ZDY/v^?{WFu7Sz@Y؇Œ)ubMS hN1.;T{7Z cWwbXDsN oX8c)x`>xof:؉eGR'euGL<\EIwgq?.&u/~CgEx0zgs?1#Lb@%!\B/Ǻ C$O"̏g m‚#d74x6t?=ŵ;ӧ-Kk6p[J{7Q|rȟŝ{Ns'Չh 'RIqw_ T1_볖_X9[+Մ +/tFܥGO3=G&/_-.Aq|Q*<寈!ų"8uw{RBI[pc0b8n$7 2F ݈"hVS.E+#[PD΁Pkdrzt !MŁ#-Ox)R%пP6U뉳"56ZXzy?yBp8/Õ;\_ڑ _oF},p$iʊFeqSW8 է-v!n A0m9?3pi1s\NJ ژ9 d}"{mz 3x+vPG@[tJԷbLfhKT=f=W̹/Zͅwb8B9SP Fg|H9SRӆ'/DpA\1164өG;Fpgw(s-y T% "&ߊ1u~\  WeWn3qA"PLόqq!eNzyI@OaX'>Tt. \A~/`pу Wt1h6n16j#}2E婪MYI2fMd0}xxJ56accR2 6qsNJ@-FhcSKHLя0%VFbI,2$/* =?7=ދiݪ'ÁÃi>b7eq=?ќl;+ྑt k 4I$;nD񔉴ZH@N}I˪'G:0YN|qeb gpo i 2c\*FC@':]yOՀD@gagG."~ d^؂^rJxsT#AWh71]~~n >qKHPE/^ju}.Û+6?<u>5qDoLjeǷ&A y|hc $uD?%H_:Dp>j_sD2ՔBv,r) rhdNFAE6"SӺ\8/ +v꺕u-d6*e5r vBdI=}l-%DxVGyaS`|s c U0$]:W~m`1&wr"^#p8) QYMAS*tX~Zn!\-;n `;yyZۙt2u}䵼+c8g-9a⢨o's'M|sOJQJ5qI=%kk}7 0VD8 7k:f38cPyOݩ̹65W͕J~+3Xfq5\¾I3G82 I˖o^\K+s T? W4p斳k~9 [q߈Ob:0 ЛXMלc}],UF}kC&6ѕUspRxi{bBXw7y)^ߒ@>dpZ7V{|BC`vt+VLFvІL7ۘ` g (1i}f:9S]¾ 0Tu;'.gКh1>~0~ q_B_n@0)ڌ%o]3=y0)~POsq:-  t[Fܯ{")0\y& ht Pk~W[ەۚwvnKgu`L o]J;.cŖ}Eܹgؾq{&}<Ǩ}t >~߽+WuҌ` Jm)˖P 15}\+%~7Y}-]굦h< htX8fG'`kI;GCS3~Z0giӚ;B!R0n0 ^Ѕ¶Rz彥q^ߠ],@8@†jvakǰ~! &SmBjv7D*88׽h* KӷIDW܋0`I}c̍b_ ,b}) [oqG[~#_Y_MĤlgϖ&vvaٮZ,Xl D2(oL֎nwk#gL4(Kz<֮o$sZ(Wa.xb.-XpVǙ겴1zs`1%F`8(!TR$Ґ xcƱwp}+ٯ]K8Ac'_ط7AƻmL?dSǯ&k9F:S^D#p&ds{3ܨZc$"i)g+7' mfcTyqA5U>4ˆhppG^_|LHPHGg<0&i\ "QaCdBN&yEfO|>ä_v L3VևzaOO& ӷ>l`P|[{M9].`s=oS@Cvڊ4S ir.ie{ױ T,*/=ezO׵ [Ɏsnw#q`5yKo$CKt.ou۶Y܆jد,/fwʙ3mӑ*k6N~6ƴ8"VᦽAawDUǓ$yЀ9Sy /A dІ5Ieϩ0te7HJ7( m ѼlzuBGT'u$q2ʎ2I@@7ʂGćGD1_X戮O:Mfz%W집|G(*qnZ|y6eo +P2`CW63-[8j>ߑpM{'!)Üd,$옧tȊ&(Oa}˞r{U旺uiuax xfD}< 2\>s@]u^rX`ဣMo;@EJ Sb4Nϴ58F˴s5?;Lczim!×͍XYl^8Gp]=6hJg0\4n 1#bFDnJ5@i3f\/tCr8XZE,Ik?. ޛz[z?T@ <`7樎,3vE.ץPw~mu!.Ep{"m$Vʂ'ځM'o~dbcUdUJ[CQGl1Dw(;&vV…:]43 GW/>_}# PFb]!޸ o@RdG nl:y,>- ?xD+b2IBKbiau\w]0 6 LB_Nwq>F,6FꋈXc!gԡdE#mYS&M6\3>5n9> >gsl U h5Muq,KͤbљǨH bNg>sDrfT9 G͵k"ݎoBwI;D :19Re4ci|Ί֩])>?HXw$#'n'SqQi=KDTGni:A̹,{6{I-_ɳ-9bF"wv4s״Da_uR]X*XmrA#8ғy̅ 陭l<Y{wan4~ND;?ec.27w؏f&7 3o<&5)5k 1`Tn{Wot 'ȔogEY!_]IG o\lL3kգE# B~e' Dw3ϣ?`o%Oe8##2Q=Vk6!VͶmYGGr*]5'U'5l L9 wCBUP}œvt?cFAׯ[csEqz/CW{_yǎ (עzV(!0J_ ׂE pR/4ܠZk̘ eki;Lncv'Lx0zY "3Pe`a @x7PYycqܝcD 7⅋DjqCqvк$8[ZG R/%9 .]I\>w107!LK ؛oQwk"Q!1\0o,ꏥ!bnYC'?:HY_@||d`J D-q:rwg;7I"^Y7c,N@2>$ ^NxM6KD`2@ \Mp`)&y|G0h_'@:pxZ穘N؅UǮ v awtsikFX{v2Cj6H6ԑeF]EtA]^rk!CHit0tp0UZr_uL@,=4lQ65?18M&r2;Y曍%qwsJ b]]i21 $G.8FW6~261`.wA g?qɛDL)SӃ,dgD'R.8>y5JR(k{"g(g9p?r'bp/΂ OϿ/ecx.Jh4 k9zҧ|&GGɮv0q:X9wI70kC?7‰67;{.Kys%?a &bD)]0;'neVQM:+Lq?1[~R,HYbKӝN;I.Y/ucG.\I@5쓃3G0$1O)8gx-}bh:hZ}Emi%o@S@N&(FBFc` cr1z}x-(vx`NGb9q<|jn-&s(1eoz~W?կ<1cտ@p =X%,#~+Lzw ɥfЧwzQfx:|n->oP:]ؾa~4(C`B|ct^[fa S*j?v+,@AZ xCY0K y/(/.e|}:40RE".:̯gU\ Y&-4f3ēKs[P? $񈇹.co:ؙy7aLi}_gs%*`$0X567ێ^wEvJ<1)!18 h<(}** bu&|cb@]Ddj5M^q G?8| iG3?h[Sݔ9:. z" 1J™!xQ!1T^Y0*0v ṬJgɕw]8w8s&?ϝ3 m~kr>`Qձk 3ʖWb83& gPa<ՙ.)" \&Ŕcڅ c mL Vf@a>w^xu1+~uPOW[}]{ECS~AQ2PLю}d$g~Zݯekp[hc]ksgЬ㬜 pb<( };~L;"2+Ҥ/tq#݆Mk/@kBPڣ~2F,BML{ _ iXa~fa"sx I0Mx#!@}L gL1S! 㰮a"pQv[:L\EY WHs9ඳi]Tj85s!€׬7_",]ʋ<_a}`Y,k:#}Ub[k{'WP`0?Y>`SwΈGpz:7敎Ȣ@fbv4/iN"Fw]lfu:UjݤDgB?1N"ӨD.. yE-?zy%1+F$?neթ|;]0IN6S4 J3%e&}eѸ|<rIְI.jFt~UvQ;}O+kBtva&{>1 î|nV_ =Ak7Ơ淟4W[bڜS[XjFnu@ũ/-R/xH"vUl19=鮻(DaW׉s%*T?;kZHzX]>WW#Dl\{81 M0O[#nshK}>o*Ɏc !|;Xa__g(̅_i8T/|0hQSQ6'K\a1бW[|X.>m_7È/H(G*Fsވ T*Xxp኿~?b_ْ?\L8,݀mI #' BRʼn1̅o)]0f9+CV1thqEʶcҫk9J9HqO$]F!o:UyU& tF r2~!"믵;=1l1T*Mh]oe9}cVJLgs}[XFRG x & m/یN_w{\38Z=wpO\Wzcd Ǝgm@Ew  nOJooi BLZ 3UF,pIDATΙ91`#k ;,NWxX;ps`O[NE^hFg7o)4nkGJܒ乎bA&?įD[|Y>19!G@R5S`\so/a]8ؑ=g֨&Ĝ?+Y;["0^%ygLV;,:>F2u+^ _;Of$ T`:MBuGɑ㧿: v  G61KS.(3zoֳ3  A.Tn96@,nQxt< ICM9~-R ,Tw1vZm:"hD3m7 <ɯ&}w-y1{Z*dAWQ5NoeVO|+Yg"6b[0mrw?iOcK`bBt7qMKGh;0"y&N3u'k6Nv%Ϡ\^p:p8/ɮ^0 zPƔ{m`p"\2`: Lsy(Nɻ, v}y<8 YУ\##E S>:LT=`MΆ|}c-2/_E5gwؙwfRY=3;⋀§Gci.#C}5R vB!pU0*`F8:_ϒ?Mx+G?_''ϘSK4+$-Hа6*F0ɼ $Wl*pح~a@+jo #=>aRS:3$K[㠺hW@'hK{>u<;4B>(K(k!_p//5wާk;r<. )|'zH˝ ?@8Ca`lSѸ\h\AΛMn st[ 91=2aMP%MqGN>ϕ/!.t"&5yY~)D*~ (=`ƍw vr_^1 3J{ 1w>}a[I~V5|>N|ҕP?#vKzڂڌmqMIm>3DIxXD2wc";,Ť3 R-{rV=ʖWW0P{]'lt"E E(Tgּh.!8qD?a2`Bz)!pe1 cnПH*Tm)M6U $ٓPY,%1 28T(o,;`P$ "eADf7옒TS?Fd #YǀLc8_Ғ/;'W _@,ܽ8Σ:ׇjR*m{{}@/EvX@Dߋq/#Z3܄ؔ_1\89-\[s;huK &a4LRa {#e]IDvN4XC;ʿ"ץ"j k]+ m[:/ M!U,<3gܼP * Tx03uGBhnˤrpS#~a)[G[_/ y15P_* TJ>C x$캶U6^) [r2b8%LLKۼ>)u[ԍoSePԏK?T0Pa< ,pa}"TT4k3 @ an]ԍqx܏x}o}>c5[6Ҋt,Ϊ2+ T Pv Ri BFO *&ow !Ub ^z7MO45okyK?+Oi`q+* " ;ubJ dUa ,o;},PL! ~})O*& |[cNb* TP؜3Q2Y$woZ? :>*.*{a9_U00Z꯾1>^D' jc|sɏP@vQP.34U` #oE!"En۹vETU`&~3#0a>EPA pUf\FtjW K)-e+tފi0Lv`&+πe\ū00RF_~,.{M92;5ɀyclTK.R.7Ş@)O* 3*`{V7d1k HX3)Ei:Nt90 ZXCYxkzulPf{0^՜.P9~jsF41~w|,8gYw|Y0X`)| E˛_ecaX༮W_WcL8ST_+ t^ IgU"ڦ9Xb) vSL x@=1-p-;~Ünl4(vs * uV :ZI!wsؘ5Ʋ/`鰪r3sw!EE1R'nhe{lQ-_øe`CWEsv^ w`R.A#AUVbr1^dbhδ(r!J,X,\ES9 0j./= èB@<P%^fu},yyS+gao@k[þ(_/bZ7OWrג{#ɥJSa]l3#BDqɋo}X0YM%vW}X+}]GG͗ηKv7Uw[%Y0PIQWR챣0Î^,F"w(wZ j?yrHDf]@׿90?ɫO* 1*`;gU3@2ݯp Z֙j2S.z9)}~qCe'Ɯ3;.>PgW*+RV05*kݏvQ/&3'zpLMr~ -cÏ~<;-Ni0'@تDTP\¼* =*`h}Y>K.Ů-m_ˢWa`0P\,Vؠ<3 M@`[a~aܯ,(ፘ`XTߪS}000vaAvw/fAYU  uhiw\Uo{g :UЫ˗tg>}[aW ԼoU+ T ِ;^%wSԲjNj -n˧nT* `*m! I]jbgsƬj 8 {1Ԁ򯲭0Pa@& 8aP$GLysn0P)v*M =c E=Qryqem|+K Og危{2 "WA_J1(Z)TU0 6r8;?Kj٥E ϔ\|rtsSџp6j C0C|O;g@%k(kju+_H>1<7mom̋B#* PV&3 GwО<b13bf^geZw0 2 yi+ o-f믿Nolh!zjd1zͯj\a ŀv:y]]i['g h?,vA-h\(EM~Yph `;=ԯHIQ4!1g@h1uWsIJ&IDTob'ɗJRvʼn|#֪"[J'e,>I2; ?]U2bM~ } jw~BYǓ;3]*U?|Pj:PՒ??JٟDmBiٔz00Ѐ|1!n3 ..Ӳ{g8_ k;{\oIa7pх|LZ_!8ע/!%ӵn K΍g906YK~T\VU A>qP:Y)V1!δt~awaik$wI;>Ģp p! y bxu \>;6.=%[6鯕cX2uGZ:zdSO[c=$!?|*\>r[~_\|7>,s8cII+v<#Ogq`}`>_3K?n6pHppJ`^G8LܷȧDžՉ,,֣V5ҚHz&LMCϠDR~,8bϺ91?T>IENDB`il32krpppps|qqqqqpXH%o[g^6,'AG;BCE-7D69.[@92F86 q=bauKBY-4"K"I9<1+)^5!/5C4$k:HJWS&0c(*!0%-!L*B#CH.Q 1''  L9=Y.?B0=BCkZVMNLLMJ_Kg^LLFN!'"" U.2<# 1@ #/3!]@K"^,!-5?($(6=B4Y<6Y!*0(9)0(-3!//"W&$ F66, &)!P F%-LF$/5 L; AʃÀ€؃ЃЃЃЃЃõǃbI0|ĝ|tȢƲƝtWǸiAGIRLƃDZ~XqCHF\L_Ȭj;9IR/ !(3^^ڟH$='6*+/I*)4)^uoۤDHI #;4"+L1R &+^\N @$(&? = #= G%(#&(SJHCCBBC@MB_TBB9C E!% " R)5 J #!$I! G/$-I <% E <B <B 3    8 is32|| } } p{{y}t`TbyaF[}J4AH|upP2F>A[U;?0\wcC8;D45&B-64E;7?* B>*5I544:@?1C.B&+4#%*6 C(0"!!%4- "0 ʹ IJ IJt²k`rĽsVnUANZd=TLOrbHMjD66KSG78GHRQC?DIPcmr{q0؟q0؟J6=R916CIGQRXWNNplQUrwqx q=hC88@F8AMSL8>@MPPLVq0؟q0؟ P7>D4)97:H NRSIOROPRjq=g?898 KSS=889AHG;AWq0؟q0؟ rzS787;87FG87E:88IHLSRGHF>:EO}q%"(88-/99*9887FHHGRQtlf`[H!؟q0uMmsPRy`TO:"79$<;<8*RS:;RTIQRI788;:HRSSiS8'o7$989!69$98>CAHGPSLA<ٟq0qHQkdHLQuyRSE6TB)#,9O>YJF=?SSHESSHMN998AOS^hu|S2t; 89# 998?:8:@=MMHMM?+:B ؟yq0rGKRgSF@LQvXSB?TG))98EJfS QSSNILJKJ@#08;QSUVnR4i79:8988,65C<8DQE:;MZTSRkXTG99MSE[88GIGRM798JI:99898:GHJS5]78OSSRID8=:8BNG>BMM7.d8:DLdHrE7H=884'#880$(7;;DLLIQTQ<6%@SES887>ICHC5".88=RM8:@980989* mJHPGoR77889$66%;;FH:87=:88:97KH_C88=C79>89%97KSL7;IA62998A89/d68=S#JHH7889FIF;29JNLHI9*oRSHILhV _]753+% -8@C889+678/,>FdNE>ME88688.#98AL>98;;%688&V787OSQQSSI>87BHN>877?II9jPP@7BQdSk sXhD[1@I79&0KE8&9>dSLHPF89!:889878>M<859E8@NHGJG?8GSSJ3488BF8.)jD=7;8MjfRSQrOQP/@TR;"54]QC=;88:9AG780%2/6EG83%[78787782-(&)988DRSTF+49788.s>88CDHQQPJGGNTT>89ORT1]+3>8#!96$*96:F7897:?-5859.jH9,8=HOPPjS9&288GC]785( %;'# &98.'6*%/8897]83(:+98 478DSM=783k@8.8:H@9' 9LS5\79!$43 !19#"* ^/**58:379#-99!19>TSKD887889_688986GHG887:1$ $,=;"C29%*BU='!"99* Q)0+: +8>QIHFCG?83]786$AHFHH983&#N8-8::975&(08! F'?E:DIA/ 97AHC8.]79!")6CF=J=:94988,$<^8"'4:789 I&288EHH@8"9GMH=.I..//9=80.2.'+/..#!J./#!-C4.! Q79(.3=A@?5% 4ADBDEEFRM.h  [_N5 M79=)$1ENXZ\_TTK:5EJWVTRPNKHB3bTfK!#')+.1358;;8531.+)'$" C598798@CEC<889%5@HHIIHG87Nmdj`]_^]^]^YPFEEKGEDEN]]YDEDSotcHE GE E&)  ]8$283482189%;D=9:@=88?H9?=0 &-21$/871.NRS?!,&E%$% \791"4:;3283$(&%,88:98GFEC9*:*$ELTSK58/E$:#$GG2 Y789 /9@E789%& 96,89LHH:/1.Q4@TT4!:&E*867OO?' K688.&39;988:<%$- 9&.86?DG9&!-"( "98(LT?/",E =D89ISRB6. D388:!95!97C<  !985@872 4##- 26 )'9>9##!HDIIA84'#.9-E:C8HH7>F9  ]787$9. %52G9489@<""4+%,32988GIIHHI;889880L!3AI988  ^7858273I%!8EHI;6;>%&6298:?88778H848&$6:?(b69:98D>89:9- ]7&(8899..@TC!3:7*-88$7)DoE$88"$9889.9&&5]794'&588-%99! ]79904+"6?;'!95119O  E9?5E E !(E E0E E&*E 2/6/#2 [   e  ÖеPŠSšSSRQPPPOOOOOOOOOOOOOOPPR¡SŀšSšSƖTO!ꜝÙ©PҘеQS׊TSϘšTSϘšTTϘšTTϘšTTϘšTTϘšTTϘšTTϘšTTϘšTTϘšTTϘšTSϘšTSϘšTSϘšTSϘšTSϘšTRϘšTRϘšTRϘšTSϘšTRϘšTRϘšTQκ–šTQšTӾQᰎ šT~mtrrQ~`k šT~XX_cdcPˀTbšS_ELPuPwSazłōœOp &6BAñP2tT]düKƺ'A:ļtT[cƿAÊʴzgltshigTWbqƒāOtQDDYdUEFTVcaQLRWazAAYDKdG>DPVTabki]\bf NrQFFNTFN\dZFFELN[_`ZiAA aELRA3GEHUTU T^cdV^b__bŀŴMqMFHF YdcJFFGOUTHNiAA eEGFIFESTJMUU_deUUTUUZbÁMtJ8$?F I_\FFLVUSFFQtAA#^_^]nb50FFCLFFQHFFVUZecTUTLHR_MsG"-GF38EUREEUfAA3T@865@]ydE9GFCNFFGHFESUZZWUMEFFM\ƷMhEHGFG:G7BFEPUUMEWeuAA v@ "!-\_EFBPG?'CFJZeZHRIFMYyg>iEFG,!,GFTUUPXebAA e6)BG/!!0=@>7C--AFP[YEVXFKU^~{fddc5uG C7GFG9/5GAGFFKU WeaBA鶦eF>GG1""!! % 1.DGFKLFIVWRbcOFFGVU_adbbeRDtK-+ 1GF8;GG5GFFESU abwpW-A\`bve`I+EG'".JH(FGF*acGIbeWacUEFFHITcdccB0|C!"-GFG) DG-'GFLQNUT_d[OG"AUa|UZbbdTCeQ4!-'6G^KgZUJMdeVRddU\]GGFN_dtc=$H)!FG+(GHGLHFHNJ[\U[^M6HO+꿛ATYceUN[bkdQNeW33GFSYvd aed]VZWYXN,ZcTHFEYWwd.\Y\RFGRe\=AGKFFEVedadgeAjEFITOFEFFB8HeddcKF EH$%GUePsSYh=m;>Ked)_IJUaw`G+RksWEFFMdVxSTUUPEF30@OH6!GRVIGW__^cbde>]EE\`SHT[EFFE\ddVEFESE5!GQV>oTU]M4Z%GYcbed`JHO]mp^balU\bRFF\dTrEF\]U[K." 6F<4EUUI84FFNOU[dde>#iEG`dbVWZEFJ\WGFIUEF8IQE:mTRS` -I=PZOILRJF!"%.WfL:!!NebJ+ CAkaPJIFFH HOUEF<.>;DSUF#"3/"gEFEFEFG?8203GFFQbdeT&$6AGEFF:LFFPQUaa_XTT^eeKFG^bd;i5!@MF,! ")KVA!"1RedJ/")@[OEF8%Id\FG("!! 2FH)"$jEGTIF1"!""!.GFJYd^YJ! !)G<45zVFOUXWUZ|ZEFFJYR:hEDXfcD "')""%HC!" FGYTG+""*RF G*5Ue[EF@!"$1!" lFHVO7!"!4GFHGRWHEFDFH$/I #3tUIFFHVUZg}OC>FFEF;hEG^dX*"03""!H3.'"+4?FH#""HF GFFBFU\LFG4!"(i+GKHC!"!-!5GC%$HSEFGEHM8BFBG:tUG6GJU__`dF0 ?FFVPhEFC2%""!!""!!" !/J'""!0," .GF91C5/;FGGE#"hF?"3I#!6GG(AEFRd]JEF>uMG:GHUMIX`a[LG0"(GZd@gEG*""!-@?'"%#" '>G#" ""! ',*"*i;44CFH?EG-"!8GG*=GMedYRFFEFFCjDFFGFDTUTFFEH>-(-&"!7KJ+G?G.'%4QfL1"!)"!*GG#"*Z""3JVIML< "!7I( 5FLbVUTQTMF>hEFC- "OUSUUGF? "0,&WG9EIHGEB/!"!2!"!;F*"K!""1MRGQVN;%"!#"")GENUPF:iEH)*4DQTJWJHGAGFF6"-K "jF+ '1AI$" FG "O1#"#>FFRUUMF"+GT\UJ:T9:;;CGB;:=:26#;::,)T:;+)8OA:*")YEG2 :@JMLK@0)AMQOPQSSc\9m  ] H fU!!  !""UFGK1+9R[dfhj``VA;PXcb`^\ZXUO>iTlR!$&'*-02579<>AA><97520-+(&$"HBHFD#&HFNQRQJFFG&.BMUUVVUTGEYwotkikjhihicXLKJRMKIKVihcJKI\}oNK LOK!""04" hF.?F@@F?=FG/"!JQKGHMKFFMUFMK<)08?>-! ;!GE= ! !:_cdN*! 7/K!'. !!-.!"hEG=+$AGI@?F@!""-20.7FFHGFTSSPG'"!" "$""!5H5"-TZed[B!" F; K!-H,"-UU>!" dEFG(!!;GMRFG."!0!" $HD"7FGXUUH;!" =!"!&!""!%!":bAMee@!)"%I0K 4FC#D^^M1""!"RDFF:/!!AGHHFFHJ/"-8!" G/!:FCMQTH/"!" (8*!2" +GF&2[eM;!"+7K(KQEGYdcOC&#:!"I @FFH' *HB)GEPK)"!!" ")GFCNFE? !" !B,*9(!?C$" %3&"2GLG,!,*!"#!NJebHIZ_\UOHG#"b5BF GG 2GCKUK5!" !@FFBPFFB9?0" -!""#CD"$:FFGCGFG8 "" ;.TOedISTGSUTG&"iEFFGF:&"!1DC;+!"!7GFARF> "0"#>A!""!)EFFLQUVNFA1-9G8J(GRFUUELSG'" iEFE.G9!" !" " !.B@TG@GGMJ+"*B1"%!'& 8@?HFFTVVUUVHFFGFF=T)!$@NVHFF'" iEF& CF?'!" E!""!& !AV-)GRUVH!"!BIH!"%0D?GFHMFFEEFJRQFFGFHM:oD'!9KVJF;#(!"hE1""'AFH;&!" " (IAF;8!@FLPSN+" " Vv}=!"#:GHHKUFAF/ .CIM2nDGHGFQKFGIH8!"hE0&'"2FFGH9"!:OeR*9$HD49FF-" F3!" RS "%! ##FF+-GFFG9G0 "!0B# iEH@2/BFF8.GH*"iEGH%/!"8MQ" C5!:,"0(*@Y$" E5!" DFD) "! "V!"(-!""#("J-H6" ;!1FQN*" !&"#GXZF#I!"+JA!"!7)" A("@" EH-"!>F%"N!"K (("(!#FGPA!" /JGJP;b0&0"!+$"!" !""A""!HE(1"$?F)"I "K!"%AEH3" !3KfPZBG4"*!"> "!:H&"%2!"! "g3!"K!"(IVB " !:IEK"'3%$2!"+8!" GG ""C=!"!=G!"W)"K!"!HV!""#4!"!7+"K!"K!"'H'")"!7" "&H4"X/"!"K!"K!" "%5!"5"!AF1"QPխ^2N%CXݮW%խP:ǹO&9T֯@VIIHRuuKMOMp{mbjMܘխP܅ۂ܁iGJLPHIB&,Ulխ^N#5Y0&-VP- $-R|ւխPܘխPӑD!T$'%MVcaHEP[݁߁ խ\N$#-$խ\H   $''",Yr؀խPܘխP܋tBF*!5[6 %!"4zԜ\հDI'$0YSխPܘխP܋U&$:1.1"&F|ZWWc5O !' .YSڲQܘխPր՘Ƀ W" 1 &%!(-$OT" ''JRWSTXHMN! &''%OTujN.ܘխP{FԡKUցtZO!!*MQP[+NT% &TWV։S*f   #%$&&IWWX<"#ܘխPt*Q~-8TցTW7!Y2@$KD7 VY0#XX'>@#GWqوԶVw ! #!:?%8J(:+۰ՖխPt$2VX6"9SրbX3-Y= .PjWXVLYXA'5.31"LW[]ԾU%[  ST;" !$#!FG4tP\ÕխRf GVRWU($"=ՏNBU55LkXXV>49* (ZA"3ZWRW\Y$I &$WT    7Z@M#5^խIK'YWH "%MجvO$4co;%WJj/2% +#&'!1GHCWTWYC=I% ,<CXY1&*2L&&?֓=խ:B7SOZXH $?fkDPRd3HQ-AWIW;?&:&''!"#&9W IIWP)-:!<.!' $K&%%Oœ կ.:$6#'3 ,N/=iYXTcY5@WJB+(%T; ,)   '(@T IBWWT+%! *>2!$:>L %9~ג#հ!;'!!!$7>?M[L&&XE;("(#&% R; # !%K&ZWWV,#!3Y <&!]1&'%NȁڍիB ! &'  9MA%"% "  8Y:!'# $L W-'' &'& 6;5''  dXX%'9\҈ ֆI#$/ Ac>&!<.(;" !  DDXPNYX'"$'>("'(  NMI""P}Wփ ֿɢcHG"08*#iX6&H1  !;! <"<&%2/"*UW<$&M#! 9ԃVTPւMQL<[>F $4[ )ZN OM$!   *'.. H#QWZ1x$%PSI0$$IׂYX#DUUI(#!83YW2#T;   I '  !1XA3  a*$'1,&'9ցA 7,I=ZO :/-/Z: J '#  &-  ! O&  ' 6\- HDU:   '+<" H "  & # O& !'(FGLS7@I!   I *VF O" '&"5PRD$ 9U#H  I  &XY2%I&' : /Z' * B !( #" )O+'&%&#I$'&''  @  ;#& %'# "'%I $&"(! ! I   =%''# &;&'% 5!   6  -) A  "!! !/#$%%$T;]WRA     * @!$!-39<>@=>9.*2487520-+&#T0\>  #&(+.00.+(&#  :  #$%%!#'&3RLOJIFA<;;><;@IIG;:BlyR<; <3; H!%" #""&"!       IVY- ; H   ''&% 54ZWF; 2- G #&  +'' S4YX ; BD" >  ! &%'   =X*  ;"(>XT" :   %!  (    <%VO 6D=&$  F "'" *   ?(YU&'&''  I-  "%''# ;&.''"& I  / #!   &('  ?#'  I 2%'(!!.+ "!%% # L"'! I   &"$&#9{w "' # K %"  I  +Y4( 46   I   I "!SU +  !'"V{&"   C  @ '!,[/ .#$$? @ ; %#  5< 4! 0   = ; %  &-? 0  :  ; %Z:9 -  H ;!( $'1 0  @ ;!'(! 0 ; ;  &  4 ; ; #2 ; ; / ; ; &  ; ;   % ; ;    (#  ; ; %" ; ; ; ; ; ; ; )      )  V     _l8mkname icons8mkt8mk@tetzle-2.1.5+dfsg1/icons/hicolor/0000755000175000017500000000000013522554645017001 5ustar jonathanjonathantetzle-2.1.5+dfsg1/icons/hicolor/1024x1024/0000755000175000017500000000000013522554645020066 5ustar jonathanjonathantetzle-2.1.5+dfsg1/icons/hicolor/1024x1024/apps/0000755000175000017500000000000013522554645021031 5ustar jonathanjonathantetzle-2.1.5+dfsg1/icons/hicolor/1024x1024/apps/tetzle.png0000644000175000017500000036603213522554645023060 0ustar jonathanjonathanPNG  IHDR+ pHYs B(xtIME  % ;<ޱݕ}?{>ܽ}EF']sc>55/Cq.t8_ >ē+k\up@ HY,pc d~ @H`F gAT  @ .@Ȍ+ @ Z+@@h(@ r d@R d @ IY @ @p)2 V dt@ 3q)R $I@- 3p@ !R d @ n@ @H@%gC)R Y@ @HgH gCIt@ I@R $)R<'@ $I7 $))R dm  @0 #]@ )H@Et@ @%@ )H@ @ @f)\,@@~R @ )H dKn}@| )K@H $pY@@HgR rR d@݆ @H@W @  @~/@f:\@ȬG@Ȭ @ IY ?&@f=\!w4@ dUw @ K|'@@kyRzS d Ei2pp/2আMp#/ 2UdPѦZxY=ϵdCWM{O /wwh'4|@ k' m6S6Ӷn%C;CBע5A3+=& Ljh]YNm&gST9t9t.Lߚ-w=#&}Kws|gmt~}4ߐL軖l ݓ gP TѧJw @ O]mM_NYIC;κI@ kTh[ OyW&< 7~ğ@0m@umnh n3 (@`ZM ,{K ̺mK X)8u@ S7e,6~uLzyv w>@ Mm.ؖLUz9B͡ϿO6Y+!9[CCY;BCB m'o/} @vn}u@f=+Σ/ NOh1nMc;fUxkrILlQCߌ4K8>lQkCVO^47t@/(-RهbߙI3 sU=E'6qSsݧۭ(w&GNJ|kdOwOҞ4.Ɏc+|ØrۏUnڎ6}{X2ً}r[ 9(z|Z91NS6;yv)wSbiNݦܜ=ysKs>>V7vv?g[i&nOTsT<Xzpkߧo{8Qnz&gƽ'=/so{,䖏 Tn_*[&\ne9\/un {${~}?^*>hQS@t3BP FӍ oοiФd|Ӱ%r¶C5q{ ;c{E2SY '}fH_ Wݏ=u{?~a'aO7F&lb–-_C#ys4H@$ iɚ:d.my?,~X|%r~taYaَr@|G+2r{r~|v/yvcL7Pi'v~l[I_  <}M|7qަ7rÂ-.̹(b6$tGrFsƊS=P Dal3B d@L鬵] s*wCޭlC8s^1r |Pa5nE>w񶏒%?f cliާ am;ɬ2zL6WpZa%g-wCFbֺ蟳h;' 9K7|?=0/:`kyMUġlvG fh5xF9'-ۛ8yyE+%NY©$N[{0qz)J@;cݻ3ח;k{7fGabaK7~Pm{NXy @pbg*2{YzK2Y;q=aܒ=aؽax?|_b(Zy t;/4|@<(POc2[d}%Yx|Pæ bCxͻ$r{- O#Z $ x]@ӎbCa2ɳ^SV d#&'3^5 Ƹ"<=mmxD,bԒd$Yx7_P`@~g}J6B -ƬHGgW_t-G,שּׂYh&YIEOp{y{I! ]$Iz h.M@C {v$I@ @dA{RH@H@ IM RH@H@ IR  $y{)$Im)d!bܚƄt@ dXՄ) ) w?/H@ cWl5a]JcD R )LHdcVlM5F@H@ 0a2eh@ H֒p@ 4a7^5FdV@@ ) @ iZR @ 0rY6:1"|m@ )ds @oF|LZY @v4ehҟ1"@ )%@ Yؾ1|IJt@ H: @8eS#R  aR @H@ 5jpʁ:1":@ Y:1"@ )&a@6OH @ $kuxC @=,9R#R  YmM5F@H@ $HR @ )q@ ))PRv#S d3 @ @ @f9o4 )  S51"@ aL>Ѥ?_cD @ $kUx] @OvR nsR;Z5FK)@V)dTq)R  I @M|)R t )R  I @F21e[R#2;V@ )d)dR&#R  w&9csJcD R )LHdS(ٜ@ ̀u+J)Y RH@ @H@ OI=k[@ R026>5eS#2CQ@ YGqnѤ?_cD R YP}gqn74F@H@ (,H@ 9LK#2;G)dOH @ $@ Y+@]u9_cD R Y RȂI)2@ Y`f.śR#2[@ R  ž3Sv)ޘ ,H@ їJ) RH@ !$H@ 3NyƔƈ)@R Ȍ)da);E|p@ R  進lLiȬ) Y<$H@ 3 ,K1Z5F@H@ 3+H @ $kyY @h& qƈZh"H@ WO١hCJcDf,4 @f> 5]o &Mf҆Щxs>s{5&j@L! Rv#2cj(X/t-=9Bi[BR!H $OOxPp`=[jZ-/3i#׆.L)7 N2 _Nq6)<)uыw B;LH@Rp6KBMHaR dwȑId  :-ݢ' ̑SH ~W?-=fH$eIS#RP0kz*^4#I gMtb2$5#l^pz'gc&;R )tg#lM5Fd@c1RRY4ϷMkl v}tw*lG`0svHp=>6 faGSCѲ0jyx 6Z}ѺB}CV]Co2񱖝³WF|B7/- -1R yv*|Zi5kQ'b/ν6쑧*,^8[ 0ۤIxYD۞΃ =ƆMMnoX4>l~şCšI Qa?Yj|̪'KiȬgG1W ==%~> Sf/(9p{O?ozx}( tPH+]U4Y O R3N{o<{a^usn2#OEX,(XF-;ׇsH @f;*Y/9脏p8koUk;طlIY`١d0eZ>Nrf@|EVl5amJcDf/\/8]0u> [ W1omxg֭H@ь Uܟںg)wcM;"\~wUNv3@FC 9>z_h}FxXҘyR"06 &:8ޛyL~ߋ/Wo{}@2&O܅`1 9xYh49x$I B't[;㞝ռ `YS`ہ*i#3boڐR$k %U~^{Dž=oԺkwxYc`*!'~pMGz߯4\#@|^Dd O)uw^r?z֥LȚ alј }U4ɿ : 臕n 4F1{o97ZhdV5w &LRN8ƿ*76Zۼw5 ' |^&yE?E!3+P$n=T3cxM=g2}y*5q@6?Z/\woNx_Y?DxF"]=\젒$p] R?p 7{q믿*ܿ(8@o{~w?vm uϭ?LpCkO{sX$3<]Fwk*oZOtq=àB+6; /h|W;) 8`8#p=&7/]t+9Pi5j$IguSfVU9Թ*_=zm*o2pдSf^X~{Myga0`xc@й[U&ᵖƯ<3(\Ug?+ 5n< `0I>\yG#@y`֢U =uGGU>~7>s / _?ӪbIGŸnl~sep_ ? %[_-;<^mP nқyMD;sSt)-'譡ݒ,GdWJ=nhRpWP ynCo=j ^~> U;\]'wV{ Dg9:+IHb̊vt-Iy@@>{>{EV:gT 07ZVia&@ yᱷU?2?V.VyW}kKn,\QtdnQKR3@WZhR@|܃k5~]W$Z^z.tXn}(3~~sѷjp5 Km^yH2d!bؼkuQ@}U;=fh'|^a J۾^wPJ8%z _c:)OȄw]xO+ vI,[- J d- 6G`_lI?W2cVw׵čYzOW? k׆YfC* (e_K~j+n|d,rȬ0l J`OÊ* m :ǀ_ץ: >kF,S y%PpýOW@YfϟfL #' Gtw>xYfW#Wk{?78/\pOȿxK7&f3Ez gaݕV|c]ШUnZOXg2Ȃݡ Uy">x`u7}viE/ZMXW-n{cūV@O;{?I|39?a|o>Gp tOrE6 f=  y@pTXz]qCC*} ^W^:/^h;ycW|l# &̷˴'.\ug+M wI_~'|'?<5OEկ_={NHͶT6ȌKn.]Z|ǀlKp_Ⱦen3%x_̀~e&'3hŲ$<ҳ?{[oį~}77w~{~;|{ZLr9=w8sÏp%7\YsZdqb>5<}J݊}grgFvt FN8':)xQب k3ܷ%GZ)p˜C-|@bC÷%>,m}}+}㟑yן}-{&7Nq0797{{?rO^޷7~s{n9[^e'Tn-o`n[~@*ٺ+prɸJ^S:U+[UVfqI'݈r@.ӷT{M]yYM *M^9~=ǷD1k'Я|㟓]ג>ן~=>#~;,¹<#v&kw$@_nWP],̜[&NrJeLzq]֞վ³]'w&r: | +߿_OU(/߾/߿~M+'5f"|%O]O "@o@v`P2{\y=T9Qmǯ8+cE5ofDhuP` E몽;+@|o__ruz":_vUXr~X]4,YQ}aYj^XfI4~+1<)׭v0?OuHn3!ֱ};69'mm_91NS6;yv)wSbiNݦܜ=y3Ϭ]n<ٖr@liځ}s!8?&#}sb_{{9c?ƹq~(/ #/C2[ʖ#xY-zno}x(|=97LnyMӀI֜{?{qunoذ}gXm{XeKXysbnߎa-{ |w]->}=þOm^Xa}(5%]4= cOYFxݗ[n}^rokX?NCʭA㧪R9 ]/qXG?XvZr(wic*qrG,85h;z0yrW[tSV|©9?}s?GN:‰++Nw0.y qV6#TđI/KCt0½_#8/y{>wnG~Όm'ß44L>)̙?5̚;F3oj([P.V.-/,[+6nN&d䩴㠉 No&>'}M0N&kz賰yaͶaڵa%'u?kuaŦ-autƽV?| Ӱ%|WmZփ{ 7oK~-\w~j:`ѤpwvZ "N!NdO~ߌ4/$_RQ3ƄiƆ3>(BȼɍUNy+V5?L&edM~@ /7qsO̚=F<[ u{?Nwf/(;cj eK‚Uk¢5+{a=X5w:blw^ͧ= Ex_u#~lNӶW_ #dk`0j€S#c'  S"N6 !Yz8 v  }:M|K>Wo?0'dKawN#acz$u|c&cF'8N?gEc)9aCɤT`0{0}0,L9#L,)GL g ֆycENNG YD_g;lE.~XEe?GaΏ]U? 3%e;>Fuq#F=iHt|:":6Sx{[ߖwA`^B./k&7۪d1+=#jj+D'b=fH>m;iC7c;Ӷ1Y#svE{ڑ,g }-;{MEh=q}/?'cyv.s+>gh=cg" !)'h7 7, ?(}?ʯex0dLJ_DZW2#m8Lj٫wyK˜)Y2vڴ0}{-<}8J,%Wy2oӻaly?,'Q8(XŃQf̡nBAB]_>#hBhڼQxk4\{EUF-6U4A}rOUg'u=zqh?v 㱞DӤO;FۓN8>˯uLÞu ?y2>JnR2g ZwjlΔ{6KNC:Q{  d~Ɖ{Pc^4%X/S'OF ?a&i˷jMp{Guek坹3}ۡ1IBH(XJR$ "s0c㜰qn۷ݷoM3~ڥ*U89T*ϯiꜣ^Yk=\zKo}wַ'o ArݿGuy>d)>ي_>1\͇cSk3n%' f<}xS]+绤S^g}E #/5Xoo>t8oӿ[Děx?'ogIa#| ?>0 wĕ с}Ȉg>{Hr1恓c߽x~]|;0oYf@Iӷ>h$;vp}O6U1q` ?ӿ7%PE\E@K6\HnnĆ 4zɞcȞҁҿC;l۷>Gֵ8 Z?I^Wrȡse}|ŽǢl _^+ DK?>oo+ſq{_K+ w;=@j7nN~;;?[!~/>O"a|qЯ߾@0~Dw|y"iqud #v{o|-egP`ΒF2O#6TMD,>x*̻@-9VT3NB) 46.NfCX; wy/,&J=лm>ٲO5x\x)Mq坯wȎc= eN}Z$`%p_OlOepÍ~%7>͏b˟>vDǫ5͊/Fn?7;< 9a=$: kдfOQ܇xc8K4:I0]F8 tPC DCn?v5qmF#'I"fo{tXIV|Er:E8g:y usYL@k# W4[7~ÆvnzEXC;Ċ]}^8l"}G߮sԢwfr4Id>^~iKG{H2^XBoc4[IQ̻bl3jJXZs%~ѻ%>8]#WP/!7"w8B GD^j_Ӊ@K:wiBf0mA%[+-+RbRtJEXm~;W=ҟ=<>#`%py _/_ȭw)rNj| qҘ MU1Rj7Mϧ@q}d`%Sܿgm!xu]dN'W?D'yJ&:3n6&iҒ9; S6Kf+i99nV;9:[KL뙪~t o m]y1t.h90{~& Ez"`%pb-4t\on8/~s♤aj☷O5$WՓߢꬖLݺM>&3ZDnfYs!8v? BG<n2tpDYc))*&}O]giI+G#t-~nM{)彖҆8 -Tݏ8:Hˬ0=/Iuv$ygd;4Ad n| 6w|@|n8xIc$sSWMYy q&[ w?,;r~L_O]޼Hvkセk2Y{MCEptO)r$@Q$0nȳ&%ᚡvwTM) 3uHViT_^P7TuL~gl9t& [㼑0aqDοW*~wICW+w5W(1M1^1l#L5c9s*%]@ "4xCҽ\* }ʹ2mZ_J u6ڗ 8(#玑  `ZqI. *>rYaCUGM?*"%_%*XHYS2\Z-yadӋ@OF00eWo9ֽ;ƜZGac,sYzE`q߼`kh]}7(zfߢ{LUPK";N냣| EWd'/P6 @WEhVDp(\uHbwM@ph B~3|f˺1AV-g|Evm!r\rrwX3a%OVpܗRaN'Mϰ:0Ѫy Ѻh>rޛuN K>ƶޑ7aF" * o^$y\ڀjDwTw*Z8-Yi& JJhݲ0k9&g5;P'M^룡_<*(b*xAw^dYS.'v}ߑ/{aNj'ځ73?^׮sWcgT9pM6DB~ViUMZƗSn\&h2hi׍Q54o:mZ4m–&lBq l?V*.cˁ(R!gY e ):vݣ(v@őɖOO ?Dov[wɵOhB&z{E?_Tڡ^ 4TY †E*΁l(b̫ 0;הV 6wgv~@^z<909~n9xr*JHK&p&BzzZu)IjR Ò*C  lTLnW,```[ ʰ~>EšI~BJu{1-ϤHQgn0EC,TG ` Q+cҦ$("_YK:J@/*ҖOIr767J@AgOp.Fp辱Og7E@J ;o$_9G cgwAl۷QFdij\aqRAgݻ"l sD[@\J`B?'4T!})`ݔ2ooXtv3% w;W1LuIbXkq5ODßq#b3F%PE X kU{Ď2z,_c'u3 1u 1׿3/h(#,J1}зg96_젖h.ǦR\;*s"+&ƻ'76$5}d)9,~OM}%W2d; +p:.lKX?[ '|`FFθ!]a9ʭSID*n?bbt@?RM!NЬGH n#FŎa#$iojx`G G<%lGVl.:6B V2ߨLO$ NF &V;:T\k,4Ќ_\-F(| \qHIs₋p-\ş C8 gPG$R :qI| v+@|/!o?'H,^;&(m.$ #{29;Ԉ eypl(ɌҦDVb,J^0Gss=ws]paWYgu;e sjEXKcEJ'tsnPEN:&, ܒK\\-Ad{ 6:P\\,_{8Οp__y~,/`Ed "Bǹt`y1F?LĽu`«XFI~slCEov1ۉ-z@o*asIٳKX?[ ߐ}+8c+gQ4ķ4w#&8 (+PSR>0^ }adcm,QaE@+b笅/(ӷWCȏI<{JrErqrr7`Β&24@O:nLq3$ UQUN-4 z7s`qdcdVE&\ɿb؄N r#ҊÜG@TL.՜qXfp@DN]:V9Z(kw=@7)ܶZnھ/G޽C߸LΜ?NCvL_B49K%%ƭJ{ KԊڡ(7BD%,```럭Xoc'ZBe%]ܣ@ps]0'xKP &+\m,@G@s.~_A|6yхXy%ٴk0{4 4 x 60 SD*XmpU;?2? "y]e Kg럁A6z RB y@KpҚL+9SI߭Dϡ? dDȘ@ȃ_w#z7 7tU@AuĠN/Ϧw7hqm4-@Mԯ0E +y%,```럭 EZIpDFIt!ʴQ;F$P,Nj<1qLo  !jH!@翝LXj>s%pFP;`:%g&]si{ƛrKt{% Wz%,```럭X|2o|^QC9d?^-Ȗ Z  .K{{ѻYt|; S$OVnP#J` ɻjPk/vQOE Ԡl/v(m5+m}~00?YeIQ NЇP>r)P3#eK@ ;vwKo|:; bl+̓`>,up{j;^DV[MotAM$r>-0%,```럭iڸ b5|HwȖOw.kx H GxrV ѩDH }D+4'P״J'Һ!tٞzn3s? |JllEkz0K{;|l&Ue TGz%GBWx^ :Ir8Dٵ.00?l v`Mgeˡx#w,?v=w/:>{ьPH`, AD{+0K:]|f?ۧxދ̅N=v+[D HKT7TȳnxdX5 D.n sK糛z-KX?[ 1LVҲ`v?I& =ϑ'_!ߕ$M,yb OdG;nPyZQ'.m SmXMEǏ/]ClH`_} %n߿N8CGv##}{ k[E ?Ew֨<П6'k,Afo00?L_Iȭ`Zi7t\I;L֞`b`ގü^P/G 'dwȨc|xnEiYs7-bYSDnxG%>3_9G_=LE`'N FI$.+$%&ts\u]b\-_jH @V--|vf KgA&P?aNof޳j,>xx9ٲMuɜČ$8922$ A~KH4 uʴ@--a`,L>W+lx{o?8-B4C W7ˆ?gfhC`dȤ@"ЪĉCK@ tݺ.R[MX9"q-?v%,```럭*>4$֬#fou!-N"B>O;⚘Ӗq{::φQ7 w߼F;űeZ&"1G:,+yW0X;ן"bR+Nǃ/*K@"b *z$! u0ӛɦ런% l "=lq!kYM:J$ʱ]n ˗Ouޢ=EN 18vsI b9F%Z^?kdP8 ux"''!'t M$1C(K~;'PPLIꬑ'h׈FmKBdykhDw+R7'U]K2 r$mU9 !a\!czUm刂'cܜW"WI@icP8ˤb黂ˡ?y8tAs +&PC셉0DV{2.qK9Q QsvZJZ/!5/E=~?ۡI21s$P 0>0:Ca ݐ!3QP|ŸNFb!ͯ(chN]q(kNb:s+" \0] =!3G [0`?qSb {maRČyciWlעRQ*MZ$zHmJ,` [lvqWR}1yl8{D=G"/ UQB5YJL"p] E(fpz5.Pa # 3N'22|aښ68O>?N|C7ЩdסUdE@t&ff3xf0q &aY<XϽag cm-MzTL.=ˏYg݋iAa=: Nɽ\})9 Z+AJc Ojbq4GW<8/}e,avcp߳H8+gG Hߞd͖ydکd&2cQ%T IE[*e 6:d]a s {ls$t&,SƸkԑ׬0 $%Nk-o' 1W3>auɮ׿#;_l~}ϭKȔeK\]SW&\O qǤ摱iH|@ @9F J9P P٫) OІ,C{ښ^#Xļm;HG?Z̉ xOuQ"h%]Ohk8~@r@z%!5N6M⢀Y\Pϕ m$)\zQ TYM^DtwWZGco]{]Rs ڏwZCFqft &AHO {o0@40LX~l3L8 [ܾFl3 NJ#7=Au~_JmzT|y@ԎkocF%=M/Z @l Z][WuTEUE& )u!,za:gkmr c?#oBX7$Q~2w~{;jIddpDg_Z o2LDѰ?PUuuR)DIJb8K?^@.Swrc> j?m"8LVҖ(^,*V.?n8 %Y}s:5m]4l}&VE =a 0=*882§ʞ RZ)aʹF}%l3ތNzR UH P֜l'B!`ĹmWKnGOrZa' Cu,fqw)-~H1ǭ\-N.#3{e["M"K]r'HdL04`uFhޟ6R/ $D_k@-OEandÂcX??1p=C>]"#< ś ^adVĎH @H^bM"bh1vvdXQʺE(~*-%`߭ V£ d~W޴SS▋k<,9a㓇>P5ח1; .FC\4[|ˎ\g KgС~s>S7(R]8tt .Y/ G&ʌHUlJ5$8AI ]|H&$zh<6'lA5{>@i@ĢZauWqEj _\?TM+V^ - ._J:3,$&)p`V%凍(l@fne,` [l3jhdLؕV|.N. 4.@kQn>V|VѡL{A\zA-"‹q(Y1|Ysv}`7Y1pɢzjCj9Sɂ@1ߺlɭ%qx ʯzi5UjR!>/~009D{sKH=MJm&Pq I0?HpDYcJ?~Zz+Xx]T\?4TRR-WW+K"B]iWa¿pI2eRRh&P^= hs70@֑UԵ{U;HuW7N HbN :B l`ZmȮ}< dj1jЌ:FϠ+E V?@_;A0Dw 7388•|48Vi# et5G Ś.X<`99:G?H.uMpVsV%ɀd'y9Q |Č4*~tp:^ XyG"cä1NГ8ArS+a{ yzuӠΥ+9XŽsK\D78.ο׫o ˎl;&j*$SI:3 bN&EDvZE6^DVoIWUiz#\t9\`砄ԗ(tM_%,```럭AYv MsiCA{#Aݐ@B6z>`boGY,6=!~G#bb!tXo6 [)uF'cc F.Y 瘹n+C ] JG9m Ȃ]3wiWbЍtL[NQş s:!QL=JUot'jĬ  lN嗎sWA@t&[vu[v2y-4Oς5h:\$wE~Ktm00A׆maikI>gGcgōqgoFGM̑>ϣm<6uJE˚Ɲ5/ VL` JI\ Hʈv%6`QS8de_Oq gEai/v,( Шq~܇1c{*,0);N^$@|V 75@F>J-t|9h-Hl5[͡nf,ܧ,` [~10ch𝋨Mۏ#hkmXAF8ə s8௱ɃzV :7G(@5^ݾ<:uJUڙ-L-*s'R \KWnd!QUQQܜЎmXP_ȟ?oXn耖 {{%Ym=ӯ>{m3z3lм_!EYq} ăk5ډIp>A Њ:2`ho5 E4,*y;Ea;J{UG%Wޒ3׏wR8)bXsK:gb'+Ckrd߲pW%=FOIxO4!P](`;1c_? .d՛T3?M+%i dmdˍ ̶|B[FϛIV;hޱ='KҠz<$qñc@Zľ9OD? @jv hޞ&Ȥ51̕`3+vb}uEʚ ;p BsK=6npQSys]uuE׍dXIC#qQ1 #ys(rI ֞{mb=c =ɜkcrhECgMѧhR gf$S # y={F|A&ҽaZ3z7O[vZݖr^)9 Xh:Iy! -g0>ׂ\DLmO[2%_˜De\IVi+ (kQXU8Is G{M6RLYDKck16J6L|{\P2& GS l\39WgwC'7"6C=qG6OKկ>@AOK.FW7q@WHͻ,e)xC  }V;W"^3@1cIlf# o~3;](i. 4߃{M>wl?mtB"*I`e*lbouTIyQ,BV~5XjBPY0Q@X"bJ 1~ec@=:J:-\0)L xx@k?=N^%z{ )z6ʪٛC'ouеRΞɼIT ?\6ho@.@ظ```#ҷ(URHW˗yU;E!( LIxtTZ܅ <8.jIfԭ-XN/ @\ 8;r Q;9o)C[+U*&x)(@<+%M+2.B#Eݼl9}TI9AċQPǎz,coXR&H dF000wpNY=VlYgbvSJydӀ߹\(NV"'8(([a3EA볧UB*>/fib@ ```w(]\I3 I%*sR@i!j{8 jz_)i힯 Tytc!SDI6 ŵ)IT9o`A)$ ЋN8Zax1h{*0UB?#.qBո_JLϕwB% 4oV?5X8[&{q/ ߺo]v! =dfE0flj!{AA<%@+6|8fDQDE]gXBـN ~Ur6 F000w=qPpRZբ$€hOIS"$;sVvR*w"E=%]LJk7%GkG[JrY鑂*M_Q=vvnNգi Ĩ x͋V#m 8g RlmORQX?jY -t)ޟT{Nvz_fM$&)0 PE\@ICї$%z)R'Ov_AM<繏,ZIk5˪ X $bjIv ,8 L[Pka$IVĀcBH$2AERć.eUuV9wXQ:"X\7^ӽfKijW7M]ΨUQ],CF }ӺD;&R7TV8D 3FʰS _ೳAP/XzEZ)W/buMA@@f(2n"#ogis6NV|[ >cy@Km\*t+z\ )SJ| *JZl¸ :)֫8-:g8Υc$,RFɞ"m&&) H>!CF  #5J+?s͹[L$qL+!G0"xcCr p @ô\'Х@e\V=b NuHu?zrAazAu"i :U!QJ+i[<å ϭqɹE DF000s:cS=g}sj_X2`wR[|6Jqk0 : 4oga+&aqhƑKqZTP3Dv\{ClշC ~Uʡ8bƢRAt:^չc*̘S`a8KALhnNU^F-mtx( H/e{ ~f7xr)?!7wWΑ ׎W- m 8/yޮR1|BFlwb-cB[~~c' C]G,Cz!u•H̆@0 4-R{_Ug\q^ [Q&gER;Y qdtT"i R٩* @gt->ZarZ+/\(R(洄…#h`.ݱ9H(k8d'xb Ri10YKȼ]dk TqacSYR$w=bD%wghwHU!dk@OU{Fz3ٛvj%=v$?809~v9y >bZ#ut.RL58tY l%|'Dkۛ_zъ6~T},ƥ49G6{D0hKsJ`Ud7@wmhLbo-rWWWdl\V~ VwcqdqJ [+ld8BA*"@j~(%"bCQ5OW=[-{Dۖ36sP{@102 `QMrs[3)Gwh'}8KX4b-ENЛGVű jj(Je^uzvfJhO.ਸhGUin$\\м%{f{H&L@g"xJ|CN` dϱ@[4!@nZpLZf61H+XxfҔ C:.UTWI$$[ 9F000wqSby"W+9 s:s{7͛!(+6~]&jjNC}WfAyI4@sj`Fij`Mc)\Z@~U]CWD@{PףRi-ɢbDNkx/Q;TI93H-uޒ|NiSvTغw`PQ`q̤ )Pa+.U# 8V`QOy{c`cHd}|Q 2vd0F00 >ͧ#.%PYhQVE MJ>VZâ0H|u6-2*6]@t*E(E9?E;.H0L \]r? %Is`c'`l"* f1 k_7AJBei;W%6.2 ۖ6nGړx#w"(6tF5d('ǨzV}uX*Ц[4a%,ݻAƞpcYd *!u-=2PJh/ʽLg |j_]dDOR~hls(O| \s*F⥌bxl 9cb{`.t$\79Ll oƨ1 V1*)$X~&k# )tbQ :)Ur 0#'pG@ug=R|tғb2}F4Ws;k%*O%sD]BFGm%ݽK@icGuNh`i+b8Z,B$dtbCָvh.4͝&xl9iY8GF$ne sKIQ8#Lwn T< VAVdФw- xP`b5N1 D^;VVpR|PTgMM1M!TAg k\A*>'7E q$T)mThJ*} +@y%?ȅD 4vUu6ΙJ\6\aJ+ \?YqG^T7ˊw ԦƩ#F=D9Bs^ ݽKz-&Vw:nhAwd_#\G}qDDcJN!-7V&tY J '^r"4`Z$}t?#cuyj'#6sVHI&D}bʫ܏lY~cM$T 3Ⱥ\ 'IYk$ >P}2kfR' sVH%k >B;r9X -yn#e'Bt4rh5ɴ>Py=}kcfYd.YY\$L!j 3s}OxVMł(v1}.}X3d\K AJ>kOUrNC~K~?^?@aț$^B.xt\0hDUy7܏MJE%gNjj{bp.[ɎG9J{BΙVN)8`Sy ɸg U]µ;lS FD'L$Ug*Ya]Ll&JlӛA_o-zlkډshQB~[[ChaIªUm9UJWދ\*o5 'e͹ CeYѨP'$oQCi, c࿣ղc!Nv~byB'_'=#[k K`]nWQFeJCUlFƫ*Cn~IaWV )7DD~I~I q&~r{杗ɕ @Ny j =THzP$k 6ow%X`k; WK0XHL Eg% ڴ83 uJog F$dۀy޹M\wW{gxO^)љN-d ~oH]G 'cfYw?'kD![%ĩ\!ۉ Ƃu+ڱ.}ĄZfs6Z@~Te3 *Xuvw8(dlЪ. C2[{>gcPyto#r;D O~gګ7$#lyO_30o%w-q#ЕD %_һiΐk'E$(9C_₝d$@iz  %K@)RHw T%汎7`{AIDz![r:@2KCAF0|+qSλP>hd+Wϧۤl6 ߁#q  W+[􅥤uf6(ǃ/eĠIt¢I< ^^@fO1Y(JMH]"qaA3toD܊(^,@Bn!ɪtO~#_Oъ@\ ^"ϒ;筜e/ԢQo DYz EK;#|WqCL_h2֯Rmvp}bH2F.1ϖ6[9ZQrPPo}0"z&Gud# z:U0 S ':nuPխuEG(70L˾w9ꝡ~Q E6oy35j').(g ;ȆKܥդ}T>AGtUQT ^NDlMDIEuQ+|s>S A!odGy5K "K !cƂ0HyD@$sg  ?Xu"B`&`|F 萔;ڟ&M;";0!⺖ MΊ\3wtb:KX(kR6V .Yk.1ʿNK|GI U DQ9_!1t7D>j'\K<4OjhWDڵG)0zB"7p}7ͻCD:斓ƩҒb mSP"yl͗Js.A@؈4H!H9V'I!"cHp2*"  CGSI4ъ r(dUR{,c` O?K^ϧ6G5R{έg3.+tm'XEq 庖y]xWE=Q#bf" 8mTЧ V(pyh۹UZ.XqK/%"{n }{E`Թ''H!x'I.ؒtHq%8KU@ǤQ10AAo5Hvvt ˷.StDٶo)Y,m':U|!+ϚB_~%w :%+6β$j~TՊf#-@l$"{ֵnf럊>GTsy^h*ňrۮѣ&FFp9 ERd%i]EƋ]i%ҝQP$ZQa!h^I!xR-V)?!tS=06>'<%wJn*yra%ڼi,DnXwUs!'0ڱ* ']ֵ:\E;l00Ʃf|y ŗOsW{juo*΂} g!r Kt"%a#$wKHe~@( X\o.$9G,aX&[n|awq;qP2mm>)7sN][Eی" Xs$ ~Gn3]?-VaEE|(GO㌁ y-I&>i.(sŽO+D>ND0F["yo~@ l?y)}3"pl!\B,7 Z V:hj꿼+ %BVEFF |oo$޽H: `kkR*龺6lc N@dl]GwufY~_5Ơ32;D5\LL9ȍ .U!)JpnUGNZy9kLur t {@A$*a/,D!anN~GP{|)'ä9,)7Al[rMc ʲb '"cȊE4 P7)|܏cW) Вnh@;p  b~WJ|8{9w!L )_ ̍ [*>޵k )${=!&MH&eUPEE?|ܛ{3sfnzX%sgμ^׳>568D 1"V9$*k%Ae0pCk*dfJ̠)h:6ߺir)[ZWu %+ x>Kfo@hl(8 P.lW:N?VT܇ǯ~Ǥ b&C&ZGuYhJb_@Hсe ] w {蠪Bڴ8baԛaWR~ܜɦ}] e/!t)?Yia~ȟ&] 7hQD}q ROm2c'M~ +s/8Pe@ fȏxEIJd6^5+ @CO71keHD:O%&d9(8NkF#'J":'g/<|w\K5bt Zro otn4Fkg`wi{@Od]L{/:AC>bg`:?Ȳw[+;(UfE3tЇH;n̋l2Ppe\G~e;yHUj k<)̗ Ԙ;V0tF|8P Yߦ ,Dy3Syy7eXГw-%(r,VWrZ9|d50#q:_~p'əgGm3 [Ej2K̋0E3ycC HQ5=hdRmL7I?Lx|49I#XQo+@Nii ȅ/3a6q}l`-5zb, Iz,Ԇ#'Q $Km4Ko$ɦQ{$оm[ ]IDb=]CwΕ So»d5u6F@@bZ }H1iɦs%&X}^n,=!p9+ c`{G:5tZfZisa5*74 JH0'"?@ J0 +m\e ч&EKu,f u%TZR\D +Ldz(o?$P\Ry ͦJQ_IKˢYբdpV^7cWgl:yjqj_j?b0͟,a1Nd78pUI;'a5 1w3 ;($K24`Q]3B>UYWdf(%u-2aKj$M~+t2s7}w-;"^JSC%kòFYi;qRڥV&&(x/(-n:O+"cJ6㚖1&*|AA9"t`rG1RLy hv 'A;M2GFyqo+ΰP7_d ?sАn)u6 ThP_vZ,ǧdtv:p(mwH\Ԟ_55.&ԫ:.|lc}n6 1@/0bR֓|LTuQ]ToP9iý1&0\yb tgecPd+SF=~[S`͆2t5*@C?En13`= 1ô-Z ݉f_ꅄPDKVJQJM&ڜ@ܱX94Cq@;m4 Ww+l&[kOȩlehr=Y%ң;hv~׺W y_5#܋%X3c`XY%)@HbԧFU8uXU/NRnm/%6ŀ >A:t+nȧ^^+u]ir}t2K@orբw,7ƀ"˄lڳd ɹdPƙ=. VE@)07{ 4ew䳯>zA)hTkh«KۤA`/ZOFQ0{\{m%3P _-޼uH"L9_|Q3bFfo' =r$XN/L[+Ln0 iA%g(D50C ;|?;5{2 1c7>5.)Yg ȐhX%6Ѱ$z_#w?|\z0`dӎda)K " ƾ8FvaTҵè_!ojF7nul v<\6&'V<" ` ̵dD,Ë/WJ)S0|qvG4!2'Q+o+1x5@,O1|r kYs|n4\( TˆL>=0C66Tf5vr{Ѕ} g0,~^#똳3Tx7[b] (&Mt^1R4Yk H +X̪Fq'fڈQ, 6V4y¬OL@nQW:̦.^y 1.2}28bNZ `U{  =g4:QwzPPU |ݏ_%qN_qW_UvA0mc[-FCD ? 6=wUjhq.hYj#B . 3D6=)L0z*&-s!`k:Tu董zJE|so3si(6` Mc|SgR@tm?˸eHj2"i1,V2u{lEҗJ#ZPo ;)@&BBhX~ 2?Z9?*7QmQÿ`q+i7hmx`n붷;0Y&ʫ,>c5WLu<È 5l߿D60(vއ:?nׂ)@"sfK{a}W'dD jBU_ oZId&˔.Ih}GWI@BY@:t/~]5 ɈQz/ό}Lh t/OO{\,{e{N@Q6Jhboeئ{pl.:|(jN>S զt΍w]e~ :sOoX\QBtX:r߼A+0W=K?I yOǽb5ziPA+4z;lD0HeëbK)C4vk0 ls SõgB?0@~_;zT6e 9~i;"1e5F,8ijDe+djF}ISHΡOѕNJ}43c7& ({gFaYzղEthʲh.ҠуTc$b6f{?z7z&@Ub]_hg7ž p؉ 0HuֳHTc5_ʨJ*J@lȣ?; 馵nA h\qNc/XeIK147Z+IFͿ o f [%[bQN7b?v[]OD6-A1f*U¨Ger5dY5J:MFiEl48DbӜA2LCqfDfHhIo@0#rD5pPrɠidH@,<I[bLpHv Ы`sp2i6Y6J3c)">4z5wX}5ڸ}S?1> mcDk$k2ޱ]4fmXgoD+s_ޛt+daJ.#'! VVl-r!A7$=L?w19LvsdML"'KcIܡ`C?ʪ/9v ǖ,]I][a3X=Hdy+z<5wah%9! '=g/{ϭSO ;'M1 :U~MFa#w"5%xIᄑ \Xat *fdzàW`,oEG` 3nM^#Y#"[c dм@6FCsiI9U)X2d*J=X>;]d,Cgk+Z$ }8z"mIM٩#z ^ $+/bXaL~K0u,Ea!yB:N#(óU0L4>'%ho"7ZS hfW4Ck qdH{[o tU 껏T?b ,4bUqF@t47nRv:| XrPH281hլs7\|g; ~&v6 ~bXRu!X0m:FFR wr _<#bIL6Ɇ0A,ǼtnZ6Xp&cNCA@dQ[%ci6f#0 5+/ ]RLX|Z7 v\+cjn9 i\? *\m^L\~>f]> ^yWP?=O-l.ƾ5jdUYGJ{.asba׀ ='4ShI塲;@bPڜ#Ef(3:p+ *Oq8kjI`1i_@ς|Pi@@DϠEU/C%-Lk3-Tl%hzNc9^\xQL@LϿV/uƑB< hYQ08!gHT7D) â\L M\S|X52LSi1PdMbk332a[F@u[){]'BK=κ0IJF+LEѱX0VAwˌa}K100#YVI@IAk-meyAc CìݴV2/7M?:U 31 06 2sA +{WkfO&?6~"9ܓ@4Rdp{h 5p0Rw_!WoR$*xѫ[ɥ3=O&GLYE6'64;`cҹ4o+ZZ53n>r\09uy  7i *QpN1 Cx sΧO9ss&AyM@OcX N0]ʢ(mln8*7 JqcҌ.̬0+@/?lw0*5 2r Y 1ђOc%ӳIkT7=chaL J_?#nK]?仩,"h/㕊l2:梍E HP{WwR ]w,)fF,}0U; IhǿCtp ;Lo, 2x?a ]Ev"wu(ZAseb.YQH? ^y(PXSNI SxyB s e# g.K kI={eɍag}0Jm4!,3ntdh3C}C9ԙ2M#aMg^5ffgYK3'w0\V&j3v&vῗUV fF׀%d4@( eee^JT6b<+>6 8z\uQdorDb}cK`8X@T"pE/Ȓ}Wv!W)Q;"]TM̀a^:FAZ,{quv3F.VH '^+M`!1u̙ 6 KA!AeI˝NYBL׊ZTK߭ `j _ KX_E,ecwkL ! bǰI)pakҢ\A /4jFv!*7vx^\[z@m(f%O\yE-lt/U!qE:AeyɠIU}QW*]`0=ǽJ-s{ >lݢ;`(cyFUL3&1 ؐX@)@( [F3@}~Pԃ.MYdʳ #H6ӴS&RCCar 3-Z$l_&c'5Ŗτd_ψH[Zf/m9\7pG#6=zXGRtk ِ(Ї>$6ˌ0q99ސոWSi~? o*3h9@~ݮ[ϴMD@X(Gh2#>,c- )`?m7n /vkW>r2_|` iDT |ыc@Mt_]} c}El[+[ly?@Kv;oQ6K5ߩ (Mbn0ƈA,*~۟a<"/}($@-k1dL al7$z5M`fҔ W@Uk1\eׅv⤨9UJdGئ"!Q}m:Pfp0@p!<&>57 hU4@)l!U`W00HZ1gO}CR>7&5t0@JB I񻛠LN ~!r99Z++5C.!10k769PQhw>[lE+1 -޼7(z5nj`rP 咖/9X#BX˼l0ܕm 1 8b12[|8*)G.s Cʭ}sdP ([ɰT Qc @Mvoivh EzFi9~~"Nd=ԙfS;j PzJ4Wbrp6ťa$L$9X# Hkc `,ezEoPj\[ªE:1@PS$=ԕ?jڪ@ u/Zf2C4zn[+fTwO 2)?]a8JFLzUUE?*3vsiDd,KW25 RǼ3 }.WWKðYap:t~yl};r/M[+O^>IN;DN>:>.u \uu8 a1L)zӟ,i&Vq3i`pM&pXYKEN7,z5 e ҳ<&2v\E65N-̷!Tkk.L7ԭ-j%@i-vu\WkM )}+ (:?;%l]aZ^%e{(&ϨcGz"S>n +MM3_HH5g dV,nH8;{Yx0#\Ȳubi5T'M} Z@霈7޽ 8A@Gw֓u;`(Eaްո{ *0 dIij5w"ќU}cRuWd& 4m{%bXc%H6*c =ȳ: &ޖEd+z; VLHfd b/%:r6@j|#9AʔHS GK i \Z赫F>ї z)@_D\#z - u9N2umd[XM_鉷~38cȎvm!v#7-cl .0F |VrxWXIU `O=W޸ ,YCVntDtvjod@v$J@-&S h`>HZ1τW$P3X^< *gۿ7BOYeC+[V  @%'cg~Z>B7V'ׇՒ;@V6p孫ORH3BK(iir`k/2YF/w0CE Q@eZ~Y$[IT”;'>o&5- -ΏF 0p^jX̙F_|<~dغ.y r<+-R2#) 8C]g ns.2Я{OvEcW%FYrP)/#E mw7iNb5h)`XjXo`j-Sԙ_P'9FN<os؉ܜ) ԥ&HCi`GL3% ]jϱv@XX7`?=36=Ws#]D͊  !kߒm!=L;{[,w}T DL"-ۏ",kmsǻ+tfT :N ).B`Ê@m?&"1FѓᲑpR`YW#L. ke؃ރAB $px$Q`%cbk I ر`?0g^:w_ 6ghȖ۪'cձ2hɨ Bg(縬̐e'I`]N!X%lZkmfZn >:=4Z^#`Xw` p{ϽA6.WM7ze X}?h2f$$#懏c@'1A:-wi`vьW6u>oD:DJ|}t02$Ʌu @>4 ī,J6)h;e_],%bZA&+}5h#Ȣȁa㟃@f3"?țBd艣`t嵎H^<1@|;O#47XHJ^YccH{#&,ٵH$_2iq!& !ci1 HhNm9L[$07&cBߧGS݌F 蟑Gl>&]\j}Ƭ,l\0hQSC,&衞UXnA *([5;B&O>@Q]ۊ!9-d莱!' ^?CfKL*ys,Ɯl>]T=F)Áu6hZ@b( [P).f"@$(0DhTT@pYP0!IwHYu?uµ I^@T+D H }c )}o3hNGӘ2tPT0jAtѪ>^1gW9zQI(TE[{K9#ו3 ӽH[z\:my o'{r[E^y^k 5D N(FylUb7Gwe Nb@R\7E wU=ڷ/.CvWUq$BeXPq}zc螋1s}~i~9z8qpao< ɒsVFB dyѬsb`}7;w;G5:4?H(>>1u1B?qNtn]3ƨ/9 Xy&BodxJ4q9.ko@^?4S&{t,lA +\Đ4i{悩ⴒJo ֮{Te=GV}W61G4I{s'A3hs hisy*r;:Lsuw`>3d6 |Q0 Nca c%H:{ ~ .EGf;FЈk??{P7dns0  @3אtxr{` ՖשCz4j\c3YpOHaG_|Lxeri?6WJLx$]$Z("n;S4yaNC FJ_$l9%o81sOR#0-o8 ʗJߝRRӳYX2XM>CFd f- <+tfs1&MeH_}IT*@SxDmXQ͈Cln\^ff&V[+223Ig{Tѻ]&,]Olݖ:y_/e;#nw{$m#]R^&^?C 3=s^8O pAA IR#a0etfN LznIc}e9ׄͧ^^%$lLPeP/:se,#]0-̣ ';s/(lxa[#>VhQt~*bB- ? Ֆ*7a-?3֔PR/4l19޲'B9Aa[Ädӵam7l)= n7`븾w~Bm{,5k @ w1>uD`hDɫ!_YV3`3ƞJ@Kvs\G7W}O5`Ly Es' [vE6n_NH P@K18Sb3RǾd i坯i1B61 <gj\keD mqؓjИɇ=;&wmu 9_yùctz̈́/C߉{)Pڔ Լ!9ӑ:Uyeچo O U$2[YHP5mԠmGvС_YYXxY쁺Us=/tJ<@LjyE`iU?nTDCN™p ?q!fY:Pp3Z^#1 ERY߹rR)$ZF- 0ۄK&Їy'5x_*JG %`(wCsRΓtk?xlYg;'ӿK23ɾCrw_a43@>Iϝ `Hţ1ҕ"E&JVcQC+=lZR6 Z$ b (KȎCZ !0bӶ)₥3B ,=x0O0?s03\Z{Ɠqz_&:pX[ IKϒǞuF2Hn0)Xy5iIZzhWebP[#x;4T?/`vt-euP &: 330 2.N&P_#ReӾttX;xCq !\%2``aiͫk8ڷAYl/0,2o7264ܺV|~},/%(nH04ۜw2;4 <߼63#= nK.^`IAk ? Hiel0,2ca;E׹Ĺ 3U @M;p:H}k)i,q`;b۾9?_3w͍_uV@_!fH@ փJ1?w4"?g8":}j/}047`ܳ˱aȒwIZ>KN\l=$Y}3Jĵ0lPaKΐ!:Z{>G%LKmT_~<x6@e?ũ0* 4/6dlsE'~AI6/,limMUզ{GeZ$M?}-—e=L#Do ͠whkǪv5@"?UN-&4tjUl (Cc"Kisov @ZkXL7,R/eJ}tQr1c@,`@3CGGK5Laޖ?3Ys#k?T&׊FkOH`Թ2P0I&'Usa m=338T]RNzunyM ݿ"jizv|΅PksI[a(|adm}6"edQgGb#M܈I?aLFl5M*8g$3=i T \:gZj.ӽQ`  ,tuy+[hPO8Rl+αgU sy\m z6P?P'RФH v9:TLXC3*ژy^`75qw ]+}»`eq+So69ѫj>O=@]ZM5l% A9O06j* uLk; \ࢹa*f_z#UhNQwh%'"aĪU 2$X0H/FRQm}yc-޿Ҧ̛S EdO$)T͋,'=} C{E(az 3.jhp,eo=aҊ5A$>{h.7ldv:pH.aMϛ*)R'4ha 4sٴ KSþx+)/^bT*6wmcv>I}V|[w+[%=/;p4SΥ\VP`;d|'󹊞E,|˹YcŐ)nȶ;^gjPT& ~fPob31beKq0w%Ac듖75v3$ q`@ o^2gzC$,W  L,lAi^^ǀ(ojcA#z\ 8RCQh>d Hϛ{@ØIsKgњCEO>9 *wNȣbqBznw0={Ú5r: ~<^qvS† ppˉX}v`:ɷ?~B>&7:P@6[Olp+J'Z[}E<=ný˚aFVӡ`z4+g},0[wv \0\ zwl13'JfjxaaES",hzy$ʠ!Bd0ŵ_l_dALzsM!̙Nxh~.tc#L&l7l". +рVX p) P40V /|Ǻ,j}lY۩C>֟dO1͹[ÿjȫ_`#8;SpWyG  h{~U3|"de,JLIf&M"Sio|khIܢxLu\=R},*ϔY$W?PYE=,+>SJ249rA">+`i C?UѝnU4݄"60+c!>S))dI2ݜ|!%% &| y,h`}@;B/G˯$'*_4R1 v/ ށdžVɑA `ȡpɌhwΛ qav_~p-~".M)'{l}ŒjFEK߹>Y3kHT Z/Jiy6 aѓ6@j-#ŵ٤$Y Y3ΛLcCρ;LX\@Z!4 #UWiˣ;Q1cF4 5jTΥ%*iϢ6|f R*{v[xz6qzW'#VD=趥8;~y`Q}"P 7ABV2a6o,;e5gxTR6#5~ >x!) ߀Ƽg8=97'eB%`H >tɑWQaV.Pbxϕ!W'wZüZunH@F9{kԚ%4`15>ߥl0{k?I:/ <~]'͊?tLZZ #Me2sIRr@k Ϯ_pԔۙ Ӆ*}/a5>\mkrDAh555Dl~$zB4Nrdf?C66ӸV(8CੴY㙡xJb=3og}_sImGk159_7+IgF75sF; :t =C-jpGTە`[x&dkRYQr='oѳ#~Mu409H=T9tS+ (_5zrn:vD?KCŤ6s@~,sR 1> C9K'ȩ'- M\3La*'|jgm21{JPW{bNҒg@~ u=@v h˯7ZKI` k"o|GQ'іQ'Q7QLfP@@FC Yhv ,jZhP˩|< nzZfBF y6ש b戣7ٱv)3x0C&&F<5P1+5`l~Q:7 DG9RIrljQjO\Dr s1F&bJVI;ZJH\]K:tSc鷯Wtg7X b@_z>Mv .,pjyU=2wS 絏,0.Xh,0|Hb/*?MN!j0@ikr)mb`/bM,y0@ke)zbgdT9 ,IWxn"CT @dޔrя X0&v !z#<0Kfw<"{l?1@ה'3ϣ``ؓo~бil!kfcs'nS7m/-P75s:v9*ZH!JYaJ w.W^>YwY =t0+iildý2Ih_^l'eʆ1Q ecN!FabgJ>Re ~#e45>ǃW x`>TMuĜdJ0|?{KȚdF ju2?fCOvDHA`7yyȩ!G;F8@v60vXN,jӱZEu:KduаCr@ES kZ l1Sc70AYųptC_Oo2sW4KrlQ/ >&X{}L)1BUdpM YD|rA\qLo}ٽR\0},`t3o~oh;@v_cx5>Qfܟvۧ;lnCs#gȓhv#Cwsr,Z Ƙ?̱:@Pbhh\P{ I`_ӄOO&sRVĭĀm7Юz.h4QN^$*2k5X0p\x%4$ 4_bt+7q*"jZn6ϑ`4ꁅȫ̹WCڿNā&?#q/1{F48Te)ph0L=r!o%pwtՠ AǮn}w=?6YnѕbxէȹK7- ۡMۑ:))~c}2-kmn骃Ʈ2 \!SR-%QJ(EJ ,tfO|?/m7KbM7ST6K^t. }^X_TneEBVd`x)>~D.oEezƠ(dvo&zFhd)|™> XF(߲ OwV<@d:* =I\Qp+!dQŜ3u7؈m?HtHafAHV%@Y_"&I P(z߱ =;#qv<,xdmù Hb=SN̘W̒~{(w L?mޔ*}IaXDlLY ʧ?݊hW4@8k'?ڦRfFv D3 kg˯_Tdž`L_es@Pc,詷}0s1qa=T\'J6hUB:gLǢs̈*ZJMqޤsCy)3} mK!ɂ7@bB 9eeٻgI g `"É[yC >zKPXvE"W;"X&)xw2] |M0@G}񝢦YN:%_ܳ> PQt*4lm Qc Tew &,i35K#KxK)27Þݤ!80D;+|gI. IoJ eYVVA|E̝sPNa g _ }o˹1ug2ORj̞<|{Ϡ c N^FATΦk 5@LȵGC Fej[9@=ɟ~]Bq h(-9b 8ct<6'-bu?jF 0hw\t: l٨W #Pg7+q;)Xɖ>0m-ө#Q b |xd]xΝb^ճZπe4%w_7ߍ* 3zld-u.d:hՉ+= `|n7r/OPw򀓴?`NL3TLhCГɆ(1~9hrhS\B g#WQ&Rچ^9rK =#^1 5 CO#E"3I>b\at,N.V;&H}1KWM!rdQg4E4sbhDB:G}r8JـC%@޵bKLZG:@:}жfb5XZq#ONe!1, 앸`v{`|U:= Tk`ATl)2c~RF vS0/r8N/ҶTňyYJ*eV'0C@uSR swYX!mI L 2`vcӻSɶK69ÿ(j܏(930p'v𲄋56K g5#QJ{RXYE-[`4s7}7݇ד6{֐ۖ}Yqek;/z_HC@zoP}{픖#'!b)S+lU,]kL}$_}/cH η=I L̴~H#m( n[{NSQo#E`(D0|`BoED^V3@uQ[Yji{mC}!XB32I 1#xx=<=#W 3pϡRιBm 4G7F'3QmFQ]}ibWE(*vXeϦ T]]$^fhq =7D6 +7ב5%sI.x5Ը2 ۪go5ԍ?|"K#e4Zd`-F L5]cv7eDfe19J(v`؈JJL3c,rJf;}SYK44,U+L"-xtg% 3'ϼ|fl84v-6a ~ qs#-&u4JѪK^Ue |Q`̸ݰWsQw׾椆g1߈hhJAޫ)(4Q3C-K{@mj܋w[ |!\?a8 'zsʔ7o.k]<@O]1`78l+*14Un!nU404ыIkپm0 bk?{D]]kDWD_x6!r|F>t7sjU97jTC1Oxl4s`!>0dGXg!f[hc4pFMc ZNK^zr3rxFv@;^fXmoІh )ihlH>xCk٫4`Zinś;$t74ȱWK|p8.s>7`LGYe^JrKgF3U8="wELX(X 7&30f#Uk W7${6?ӜSFI@E ʴ.T'C5 `я[H oH\z.#Y;ZJ\WK!23㞴!#[4#meA@g5` lhcQH,Hݤc)5=@)G^[x@⻕#on]!#wu;C9cdX拽Ud?4fljCY V6Np]2zmXFVolYrYȫ_G0gH;l#@§Hb_0zsس |oH2 QbQQlc}UPA;Qsx0#q 04z5S{[L=hcfsvX^?p[0<N ^# 2qjv٣SWE'R8J1p37@A`@S׊q j<< o^IVI69Av>~19֟Qx]cS83wی2ZT:ͥ:o2I <gШY+Ff[c^εwb7[qwfiJxF] P`K(Em%P`Aq:)( := n%4ŒK[Cu=چ bCBzv$W1 ̸C8.8TkH {Y? v% 3Bh0 `vH+f2懏j4ޔQ޴_x;jMs QBBPٴг g%)@(@Ę6F ucϣcbDF 2;)y;a(}$Lwixϡ?R0\9-IPuY郕.-~Do0y@`+mɭ&أ᥈!.B|_AiӪ!< SwC(*e R,¦ P>~. 1EldS#3" 2ʦϐrXS+ u_@C*;Q<Ph\E6.HxwzP0u}i!3c ALݾ7CEi~I}X 5 ONg`yLd3-9\rc m5O}c5h6xs}iXpjab&# |VrX{~߲rsfF`m^z $RHMPORXD_j&۳yl PVJu`Vhȸpc4Hl㭙=7'A~H5&CD#`ay3RCJ,R:5Cz9PR7{N3`B MQv*_*9Gr60TAgs@h_#EZR\ f  hymsj6ӯc0;K@hن[p^=;"y> D;  Z7 ![ 8^XH\Q}7f璃^3m(7p.Rr& Iz *.U?Q8i I= `j#z8 `4E)BhhU4:NM22˨aE$$(Z2/j;2-7UksS#?)(<@_X4#)]^GO%PTE7T[Mr)89Kx楇ȩ'iL˥e$=xٖzH’\qtN\yFevSlOtoIh[O HH+4mؔnM. HR:\-s+ۨKm$}oGuY$AcĶW̳[lݿ~}kz>@) o(p-6^y @hE dU.xҼZ3ytӟ(I&p2q 3+4|mΑ^y6r7 pm$LIKɞǟg\挹BNv D¸U2MG9XFY-D8#)@Z*+ٺlyqrwѳd5?o-`FC؀j7G]@ d; >6PRHϙo {X^BB~Oy yL2  אAgA6N>7*D3uݏoZnCIb򠿱ᕾMhHB4g`'5!S|gx# QAy^nk W&4v9Yl/y*-$I F $>˟,L9c6-neԂĂ2K+F8bxQ&ͣSC\$GGL#:VN _y*B.,{6L 92aݒ0j>**sZ4$iU(Rn?૊/n!E@ $BU;{N30i@|YVq6W7--RؙR$Fڎ= J患qDDfyhj/"W \оSQoO,T &:Zj2 s98C%J"@_a%5CXCt=<; Dh]J]C5]Li+HuQ#Ůw̾xP\-ھW[ۥ,g0҄%$ 0ߩ/p_ь#60Vd*ID bQNUٰ垇"pJ:Et]%'n%f&r(Wd={ν 0h0JEd(FtSq{LkZk4 pc*X+`krSp?_~*mϿ /[Dsgl'u6JH zn(Z4R )ɦ-rj&V|oZD`ph*$ #j 2C+r6u1pfI{0;P4lr_cn$ЩU5~%No9(.zApDlO?t2 <%\PLk 80Ïuh7E\ [%H47UlNhF@v% H%K7Kč?L*z2h6 0Hyz~TX_$bkǘ6;KjX`I w{DyiB+#䛠ڇfwȸ:#ɢ#nDn@sS:)P#*f(%8Fs1H l̙[1n" -!=%EKId6 mTQOr6|nuJ՘gLxҨ!oZ.bQX5Iq.1g0ҁw ɦh!`6e+9Hxme$խ rql8Sr4Nj{;Ī^ ßFAD}!5u."$ T#M3d$@70(yFV^h:J(&̣-~4(c<%v66/Q"> F}U!n ~jJsؠbwKD`5Pȝ9ѥJ׆iHl.qc5k>dN0SIfk**5``eug]-XdTn"3X]ݪߴ)cO;(_JX #ǧ >`jOi*3YlM6C,C2Z'>K#jr0'TP08W;:isok)$^Cu8%O3 t'`28Yٺ38pf@JgEb*1 !@u+\?ix## Ⱬd*F!&ZX`I.~fnW,q9vH?4]41G*rUD=M 0k>4 릏z&"(S4iVW S;\GMƤ"'Kdf&|7YA .C*HfaQX*૿~%7apI?ҒR\)oטykФ[$)X0~ ޥF]Uݲ] @br?h?8V]v"PK"t@F 1)CXGgCz4MJ`&:>{?&co/LRaba03T^a+yJ%Ǧ U/>~a?'-(C%fdKMG-DHH:)a|inz$6m߿Eу{ԁ1w<`A:'eiU- iHl 6 xMݮo)7j`2)%H١u *|`J}c!> ~ !6; i:@͘)O?X<5 .u]ƛN;4C9`704BBVh/҉I b[T:v2FF1]L嚴ZQ5"v:+@#~y_ O܉q)ڑatԌ9l _90"T\~^OloF Z(5)ZEgȈujݪv~ S`d/@&|,ь4.{]u^׮AX$fD #T]<]|jG &I*pv׸{u!v1@GV-PXU|}$?֛lx0Cbjhj"ᤸo!vkZɵ+Y,m}J`0?s*އ7OGm̬Մr,dd"vYQ [.N%`6[iWnylp}wׄDp ^8@,Tv A#nzS]ۏaW6m#>T/֒jLF6lbx)WIc'8> J/?R褏bro4 FH?FR~/F8OۖD@sv۪ APvh.1ſ46ܫCg O%>^Hft^34?b3dƬ>)f$Elڶk#lx0[!8U8%3_ <ð.X+F«QLP r&p6M;Υ-@DH@(mymt^c+VBk7#…أ}5D ;0@F9y:|~=:? ?_!lV :wq{ψ2a0|!$r̽Ժ{uhNs hg)62J࡚L7Y!/H@K !<|43'~:.Be6_z%Or.T Rw9hg~v)σ*lNهg;gq9E{ L| e蠂f׮e F_:v~v҃D@@hYFU5{^NL?z WM^(!sJ w2 'ާUzyXZErA` kt(>'K2ʚi=4>b~(H|.Z9fKb?$/ bb%JIll# I)2=$K&W}X9OJj7ˇC"づ9`^BJ"pmos`x^vMnM@`Y6c0ґ%c+L.Zȕ;rڭC#-10\- ^SE ,gTnE 0_NPQ{m t=8]5kRZW}6X. ظgT\CtO`J | G@n^_/e@5oҗ`0`xݵ  Ys". pc1'IeF*A3֎̡a4L|O=a1wl!,I%Ȍ2 )pDl=SJQˇ20WsAn~Eq+H4 N߅8'F"Ai!ۉ4 ;ֳu<3V/+&dm.Li P@|÷Ne.(X6;:)NI<4hXU:OP=\VMCqtNKX96!/($j8Fi ̈6m*[:A>W|@KN'tx]Д5aB{DЕccb`51 CM`bKi fQx}S)ܷ9 Gi Ų9S/7Woi18tތy+Eųo\]SX}-'p~>@ wvC p[%<ڂA&6;| }ov/hz…p&4'-`j[1j8+<12y7w0"V+K@v;A.Ol':x7#&,&v}atz> $1d|ōI&L""}o%y FL@dHNIĤ*  v=G\{sN' Α2u~d(CXtQk$XG0AG,E{"(hυCE;ޥh b39nG5l28 l-Z9 (=Tb5XtDcx cqO8'ػ&NG?@*D Lk`Db0 b.fb4„YD#bDUS+EeWg ?)h;)@.V2QYTΎ,v;hwb6z9{p}}zޓz`>w>K=(/POĶ$D6vh93n?l[splSMov]gzMd_RF?"=&F*h`rAh1:TdOtI OtJLw%V!Ş˄F1Oqw'8p"'z=#8޷Sb9o`XVBfpIb>CFك kNbz>JJ5]kU쩔SAdK(fIS?)q~] _|g>w_|/9—_& ?_W3g|> f{kN'ϙuL`[^"dĮڗ6Iu-"Ub+lPKD]KHTT4In/M@KWhhYEhﭓ諗o]݃EPDp__8V618.14ޱ_l칣~{>{=>O-=?z*zޢ4z~q=z^N:5u.qFk9z]^B'2/Gkhh(RtT9& p5 sD=!l]_9GP?{wҾQzR9u1`-y&`  ,V !GSX<(ԵKf'X8q8z2dX9w 0b!>@c{AnJ#'o8~/ɵ)7_oW_}ό[>xW6?8o*tKXA߀Q`/v a"ЕC@n:q7;_yi kOM]oWx׏5)գ>ˋ<ų?/ אo|>,_I_ht,co>.zx5ѓ1Ω5d0y`xpWi5|\{[g0E"85ȿqg I3^ ZǤT5Pb"zr)*rܽM""ĩE<^yDssO>w~;M_[=swڪqcH[~_:?y|Fv;=qҝ+ׂ>~Zu5>}kS-X>`{-\ЍB\AI&L$.KVșސQʍ>C:h衂SF(dxCCvD~nȄ8rr==^' kS׿z8{=?#:]ŸKؕ \eq9nreK]E˲_{ӥN:6Zuѧo!O/_%D,Aq/; SJ:Oˇú1V K9S| QS A.my,Ud7\;tv" vC]cl&rl\Zqܼgw@G/;8E(= -O͂m}Kĝ^Jf'>h3|YkMyTkn@*qUm~+?s0_{k:>u9;.J:.Xk~ qQ3x(&ߣ_yIBc.SD$y8[{N1P']1v l g$ E#K ,97к:մow:`p6@4;69h)V7 ݒ.y8?*;ܜyry7w,nWvTZ |m+dwURn ]W35#4l&~j끛tc]:_@g"lx!RxJg8WnE#ʙFbDQ`P8u8iq)O'&q]<<]e0_}YwlġqD.Ko<";+oDw}?rTJ0Fd O<#ESW(LI /. L@t\EeSBP!YP,^1Y{=)]ㅾ롌/['ָ֙?{];GxFw \ :<׵;};^I?dn _cavA-k˜? ~#X\zsRZw_- J9.`BzMk5󇚨oMdXK$6ƗłיZi}\.u-Ermd0蝨~l,ɊXTH_uwYnR`:J8}DUcmC@BYN;rWi $rŋ}V<@Wo+ ]}ѭu<)`\Sb1 }QeY?U[EPaJ1s[,{}J0{txujr֎;"1xOeџCU'ﵥNJ6z2n# Y`6U~/]`X<3+=bjOkyjvCs:9fǀ`^ vY1RbD@>l>!tӘFrkR`ċc9`.Csk;v ?b<֌B0t;y^>{2 ߹ WZe1\Mo\Ojq7n1,oIH0!~ <`0*D ߾xģ{ ؋d(E2 !jZ>TnZ<`FŻt`{I\"sF(l<H߻k̻rÚq<,T VӚus4αfW۰VcJLx!\MIK<@RO4QMZ.@eӶGݾ,?GVL06r]&0d Гt&:-%02C?݅H[dP 9:G3oI5y6 0{- iN"8JIf#!]*I ~$wtAx bd`db(Yv|n1w|QyL1df5- 3GϾz_Ϋ `& &(y N2A,KPzv]RBڏW/!7#!Hp2aU4 lα~1Pٴ  9Ut2r.3Öb'L:V`K+ʬ=b7?0Ϙ`hڪPsj{-^{w ұ@/7?ҩ(tM=M kKl70AO,gbe9"[Ɉ{c =E}DD+Z}y:4I/JhT"J x uQasYgds&Qb0^tC3ܪ7-GDd[Xݶݓ F5NL,aY~{8?ǤmU6>D7?8?`i7N:9HI#NRItJ~[I;9E||FN:;31H6"u-g3 K^o5+~'փT=IdWE._ &uԴ \܀^Da1_ e'i3yhLPı=%фV%V?c]u/(Gd`!]wYtg"L0LwHmBm1HzփP\5[o3!LsZz>YZmx~OGhYE~WԨLmk 2wHD4:UiTofՋI7\v oҚ| FA&Mr<")y$// 'Q0 Gj1wtto?)ٌt` =72#p=AE(*a=,2f:n#$X%>=ֻ9oHuQ l8mˮ)\aPiʁ ?~p2YF*׾4YWi1fYY+蛭Tjc?L3Qt`g\^zh 6TFm`PJ5جC>=NdfH>:8+mIFڛ/(T-m5UX1URY4K|٫#mҽǫz͑ ]pmgVE#ax^n]>"F=M>i3mrB/fTv [ځʱįՄr\Mi2E'(v7pM-"ǻ>:ݘtRlm̒7y$JӪ dWeH-Wo@#vb`y%ZW4@w;cT,H؞u`Vu]~,p`(< Հ X'6Sz5FJb ._qN<`⧒L>Z,.5w0Ƅ-r !m`(;d7\ƖC#]qV w@K-jy~d["4RPǎLp/GR 0os0#mG e ,W|ȳt kV[pG(u;ÃikZhv4S׹T<)- ⱫdcB4QU+읪n:K O=g~x1 hA!J6;DL57 {bb_fG;kXf\|`ԉ7tTΗ#tc4JKg⻙ʈ2TBo^5ەTHbboUT p=W'gk&`3'6 ̟C.M[mvly\)0w|:2ԏ8!vRa`T2IAl?Ң{O50>.2l #XO@?0W\zCy0dCj>@v@ uJ a<o'0]́^ !>>LdBs-⽓֌I#A*}#k=,` T%xP@5J?W9>' ʶāwORp>_ lPJIItW @$PX)RAT+R2bQDO#N\mzONӏs 8Dc2p u}pC`Y̔X*ϞNQ?dRc!Z{sY6ۮ4 <hylHQVj⠚*D`Vpn@+ǺBo# 1sMGT2fK(R ̖lsLW8+{UE_,o O&O@KJ:gz?̒>oڸd#h}pERFy`Sꦨӓ%#vqv쐾P) \6T&9O Ɏ j9j2se\w<@VJ5Ff5ICSk8(l7t7PQc 8wtV&$*F.BBv2n%vnUMԴmW?ܬ֘&'chїAR >L+9 6:647-N?:od!hӕyɱlϓ1WN޳%AGQ-RZ c~M>ɞ+7$ĵ(PT5|<*/'(fl6~V7[`ZsZe*񽍲ᶐA!k/ug""n'b|Q7>>JJ>&QA}op>3ҋLc,hCɩ[I `8 @I{M;}#<\620A '6hPrq?x@q81 Øm)C b|T;RŪm0o@Q$`o$,s،LTEQXZ(~h5z?žf$4WBdr_=U̱2G+rfh_o90-\?.0LCIB'*q,'+#@I8Xxt*B2ùy_>(ler bҳloC7' 1OM=l;] }mtm/93ߣ(=Q D*5`ֻZZ}'\/H PFot"B#*7ېoU_X ֍J3 b.VFLZ#Z|L`0Gh C:qk ;ZQ[yDsCF!wU((>[S?w 1~; ] V"Rh/L ]Խ9<~=2韶QuuC _ N5ND7+"ͤP%۹렢MD[hc @*>lFRL-n^!},+gAМ;5fG>6d0n@XvA9s\gC.KNc"bx$>[ʮ'ua^H7[k }4&0;6Tz.*A8&bȉ[`6|nj8UL~Ǣf'( ^/l}q3A)f!{xAnS]pL,!T  EEKjG7'-HY'`,菅C]ñ.RZ-Ozgt 힍I.zӍu檩P)3kߡVyg4M&XiQs sEl:_?#zBq "!n?I=EbVq:N{cQ4(ƸZFP}-ཏ_/+[ @QVYt9Q#g :' Bm\QG6_M2`hwc{U&"$+LT0`x#}g<>*bWDm@R+BsPdmqf-I>nn卣u/Z=|bGR>*Qt_ch~n&[-XhÚdH;!&{9G y ReFHIBS΢28/t.cDFu:V'f*`)꒺}464_"{*a`X#jrvp6SaEx T6:XQP;7,4u9i7+sVt%+&^Q$ +/YȀGrCҫ"?bh`Д'Jф=u4'VO ZCL_OXho N uRvbcwu LڨPWՍAAn?P2 ~b!TejJI|9:<ȣ6_\⁞xayh"jfW`8Z1H5lgvJu4z# ,0,Swi- {|y*4  I l^kD(N0^sk Bf=)Qt;"MFH[6-ʈ42d&\)^Eu% Pda4Z PqaI;\Rcݬ'Uqs0j %saH-ҰYEYmn4tE.ƗԹ[tFzuH#EO-0c[n 9zѮn)Y2JPn*Ī]GjLӱrb#C1ܴbDy oW *y9ﴱKqW$t\3lгko Rh%n\BŃX U{3=a$upQ(ˋ3³&S՛l_d{%+z /Zr*6l͞*{4ԦH=b}|uX"crԅ/*3SC9.` x_KI(Z~Nm.*CD@&J<˯gM:h@cOcCAm+rFX(ҝJ$[ʾKϩ>ĉԃ6k U3I.^.%7L(euGNi$~CZXT]߱т5r~ %^͖4!9HToPF{yTU%je  g4dj.Z-`@Wq_eB1Jׁ* ]q+ҍmԉl~(4"*U`j(=b0)wsA @}'|[_mq4&bvMEi@8A+ c;E"k  (?? ^ ZqO";N)>ۓ7Ul{ƏRUfl<3jƄ,:|iwݺC6odn "6Ȕ)gA?{bjk%,.{V\xkEyTSA:8DiF8sdJgN_#i]mc[dAqߣ(#fsT`bEn1sR<_C,/*3i)`2H9 CwoogîҴz_DMO^z3@MQ4_pIDJEEzEJ?UK,9'%DCs![bx[@pk>wc f^^!ff0TGķ:+U q0W󭓾:IwM u)cVe/p`*9} YE`tM-čZN߃[nxPi@Ԅkĩ+UF!EbVPcS?( t٤׋ƞ$tP/,-לHil, 7ᐽTldgQ);e0]NZ8+2J֓|g:53#[nC߳l`X&KόWH^6?-Y= c4oR3h}U=(s8/I3ͭ[ *= L'J\Ho`glh1eN-y },Ɨw!c0XԵ1 RdM`Cx1cv== `^X@FRL/6~60u/n_۩3'3Q^- M)#&4!_6d0q}ȡPv;i8Dl*P laxc;| צ3T*ID%`lJ VR)IU20?8q֐!G䟝c?0S?#oe5y V}*D4瑫(ˤՙ!Iܙ3}S@'>#B.(iL(!熗nbֆ FqXc"N QqĂG RY9֋s+7LR6:w*DrxW@PӶb 7{}UA*#x0g$GhXLPN,2C83 mqHNv׆ݔ JɷG)>ꀆ=TCh <#vn' :6}ElUe4}f(5`t2rNG$QT_;w~+E A+Q\3RCk k|!+8Cg~…&9^+-qRW 6 hl+C}~5ϒd<[R(~Hv}1/Me\+d LA&$HXB$|36zH),s,6?@-bhZQA|N >,w=6 %)v #T]x($a΂$,|ˆm3PP)# (yco$-sB@#u7_v!^0uAl ʉ ITc$ n4$`ŠP|qh9( T/b;ș@čqն-4s#y`xED藖nl "䗭x$8d!F60Z{I1-]UqȚS1&C{ԥ넠|J&b⧶cL*sTG؛H?Yt\IF=*cșF&(`Nގhj|ȗs2e{2pw ? x~c7 \Da(=L$)fLFtIX+[_h^C6+ +6xn3F˘E`' ƇU5@׸-#F"\x얔Z]f`8|x*on@XB![98OQ|F&CIArqERVd xHf0S+}2 =q0#H(z6<: +$|128?w[8o0QI6ʓ Drґ3n0[`zA<]c=2k欥z'Ho>.  GZ.x=ݙ0BM`@]$ rٽo aǁ22( wE뤓̾Mzdu3"J/ݼ8څFWO?,|SʹCb40FpZLU%N$]cj"1HK^K"[t l«Zq_RN錚6këY̱)!#F=}k3(̝&2I#e4 蝮}3gDY߾=mǸ)jbg<(UB) ,6-TϽxhĩkĹ'zK(TlXT9lRq^+3~!^~W)yEw5 3v&X몥c;t7ȰUo0eU 56%lHs7n&`>8"/'ah>,z&ۈ z"FeQߒTvSX3kļtS +RuhbkTyWDt qX 5[/[sdXNR䠍ؕkw I:,|\ "d$>Ij[Yu iiSsAV !}x߈߾g@R[HPbn-x0 ;L)ʛ-1g7L) fvF d34V0ݱ!$̴.JMTC' we5NLȼBd둧IUxP.y.2 }<`sC<H\* S_%`^?5&#F\gXh#) p óxEmeLG@fH-RB TEy[QLf`sB9}E1*H^ydID8`f;ō .7nzP\vũ._C/Mf1Α-bwn YOsQO`qSq,^Ā -cY\ G RwvooXP<|`T=zQ # j!  p5;RJD@F~VGP<0kvkI8wC#I/|hHDǮQojֺ)x#12)O 6n ]epֆ$h0 =dCxGţ t K۲ ^vADzA# 2PiC^<1Si6  #=lXpR~+F\q%{oq{^cBz12ZO]Z0"54W"AR8al?Rd S5yZk;}BTU߲5bj l(-2xl ܡt+Y+ 7 qn gfLB>/fI1?2' ìK%)E&٘4v\--l>3+ YI|o 7tL~^i P֐ʼnqa߱u~Aϔ|vX9aKmzM"!pu1@_Ndc,oÿ'g1eL9==Z21Svc\}Ugn71`/WPf ey>%R. մwiuM~7sgd>{e3L4Gh{4 D ԰ AWC"}Z^A9rةlZeilզgC) F&DZƉ:SVb |*QJfqɉK ~g1<XZS0CΤ}QljO@ڂeACDHߔ5mZNUS:E9ZU @S?.&>QC*zNtЄâLx/ |Gz?|J{aҟ>-/>d @1Alf\q" ~*~d9*RN[XȜ(Lwr,E?)N?*!~{A"~V͌LUn]&u=ѣ?wȓ? Pg) 8i{5gr)ݜfʺ/Ù|2[|[ | |n /|[e> dp*o*$g7v^[$AWU=ЙJ6hd"|M>v C ) % _Ƨ˲tpIJ|bf (^.-}mH.4 /9l7OЛ_=w)`;e!H;/cmMT ָ{s$PSr=U>5T_Ux#-zON(yHcZMriDI:m'%bGQDZ;R\@Kr _ؗ8p}ʸQ"8o?/}@`!LJgC.RXÆfcpk.=uE(]p=K}RڏS,аz(Sz sQ.*GǦ|G?32׃ÿv8h 伬kq5_yZ G3jA0dOA iЂod7ljܽ/A݂ÄJ()TnI 5>=Sp%Ͽ+=иLB[~l`ͽ(oZ\ [7e$' 5i?u%EA%}3/Ӵ&7:Yz vڽu{W+'{gʹ^Bd +Y'flaHWI>JKx;w[Am.!T:C wc:WB=|D9G,%!x ' P;;7&VWg3!`xU 8MONi-h9|sw/t[o ZK ;vg7|1\=P{6i# 90'3]8z8d)d_<?/G% z;nVUA q*lGuax&%@s!JZbUδ(w'05n .YHP^* Z lk *R>t'Y`8e4CR|Jvz8;J<w.\jjuc,ڤd Yj8yJ5:z"@fPHthKŽ>.+>O~⃿Qufr)L:hg,Nq dvPej'A#1c:bњ8 nBe.Mof?/wė@ Pݤ\Cm8 43;U7z6LT޽yy>r=>Zj!4,G;o}0{6 jOq2 cłέE[ ~=VV("xm= _G葮`kޞ.9 Z޺'+Gd@?x6GM;IY*~RZU3lAiV{{Ե[ǩ`X P~0gr7j%Zp-F);!RZ|k A@뾩pl.l2 _^pdЧ?jltH\e P/WR< ^.ֶbfq b帏Em2[S,g>&> AIFddsj5{=-i5ˊ>Po0 NNEzPÊWZ, am p3d SK>}<-Dj߇i9Jn>9W*cXVVNL5Ճ#~)RckVrs{ճ`h_Xd+4s"`)4[ ef&~y .)"|co|F 2NPF~Ϡ,:A02 ̬]r\yy2߹ߩzSm 5J Ni*)ዻ]Mo'ZGbST8iZ5fI a=%Q8?f@ F1(6WZ^Dj(Fl33s9 vnێ`b=?Q2QA(kCRx'y\uԂƖ*P@r饑tZG_N(k:òNwnO2f=` kvS.yn5vn8ˠI5qΔ;@l- $ r'k&ʩj#r3C1ڱ&~= \3x Dc͏%7w&B.LNvhFgA[X!#; Lai48+p'EJP܇s\+Hs?C x=oݮ(<Ǘb|.R[E RL5vԅA 3٤Ru뎃Ç;ډ?al \ZH SSȍuw9L 76cD1PؾH3i-Zx3 JBҌz,Tt@j|hA'ٜKMyUA%Jd\88}w_:{Pq`4B*`ZJMug [V jO^>r;?S[\(l+?>O)́9eqb~zaa]Bu[=s&Y20~K2c+rΙMA܍g)\dI }U.SwܙlHU H des "c5ʡ[#I+ 764\,(⪭4枡=ĩ ހ^\Sk{;~V[JS8?YQR3iPL8Nۀaz庙/X45Kz$Z΍)j*{>5΀f}%vL30 ovap')óZhu8YI"3$7dyߩx摆 pk:Rۭ[J?ǻ`#`Xȓ #ܘIe)XՃjN]L;7rA{]|Meۿӗ>O~3l  e/deNpDϳuAKBUljf ^\0r˓!rzyl@<$$pZ(M]gwJ`xs;<{O(RŔ >yȔ91#R5R GYmW,'BjX :ߠ?|n\P\r3hXLo`mF08c F1E/ڼYAf=ewjC4(=hG &\$7O.>|u0 _޼ WBzfL۰,ژ]ްvOeXW~wzpjAwow|_;t_ɝ]aNٺo6 '[y>0hX8^O\쨊5㑄KcOa@;2\wiqq5̹}Tm/>.AJRAڽً_0t,"缼C GLπ#Ak='DZbOP\鍄/nkU}4|ug Pp um{aQ\eB0恌S+IkӸ ~3Л~nOŋbޝsja`׹AZK?`@WoПuMVF~jnUjYb]L- #hR-<C*0R(32 5hYI/Q@O N0T@j;(WhJAKB6ORZsok2u&L]9FV81ĩ 60i w31=V,x0pEX97!$L7J=}(@9W5r<8 y@\{ks,}f7& @4̉/0Tعa ]T0  dJ0+,s(ARp0#kFEp L1  MO@$E3M[ro곰kL0.ˢUI\@?UN6 &hcM1nV i@ggAz 5@6rM (P @Y\8ͼhg n,{#^ИH։!{f &Ϻa}z Q Ko9]NT@ / r c.U_ۺ7NnJ+#)anlE pk[ 7 ؽ6=x, TB^-Oj!բg;**ϵy4q!3*3qRDEa@ 3N~|Jnxw/֏V'Onւ"w:&@j' $#yæԪN4MHu[*Y'[sdf<3Dd Z Ժs )z*p ^X#+`.J?uGJ ?.ng4d8 gס"CBjK@gW!a->_x'NNlrOHQXڸ~ƞa j8Y.N)e#@ܟC&bbHy(ݛ)}¦<:QK3ބ 7 T3JY/ejJ'|+|7oQO>o|x}'bX|fB es&ctgb&0 Ĩz>|H_\~5$@xZ-3įD!ɱP T3uI#ܬK_7K_̉Q׫|@6Irrܫ\ydıv&D"X +ܣօL;$T"]{x,"&@Wx+SToFRbQ XX)5`JO<2শF~݃IMuݐX7AspizNoR܇@G9NjL;) _/ؚ Gp:%]:^CB7R#i֒tKXX.6F+h'҈Ag$^H7]tTZ?0PM;х`3JZl}QP@w-E.B lmeG3ۧieۖ +Ț/]s$!Mx)gh7ZB9ԝFřZ=n̩uDw=I$`'`V2,B/@D$~yV : m!q-=Vs RojڬDՓR@g5&^rYGDŌܮ˽tJ'!@(kdϊ. n]ޓЌj}mkaLmX+4``@A32YbZuf0$«K!qft5fXT-%xnKx鵽 nEJ_fm9iAeKP=Hw|>30?e p  񉈾G^u`\p~mU/n!!Es0$M2Խ1V{UZ+1'3T48LgSBBxXA)e`B扸3Btv6^!*a@ !2O)txjhAQ3@ ._j$QqpSKǮd{ޑF嵤sKfneͬ5J| m"ƹI(B(rBoelS;5"< ]pf 9e%` L?i T2 HWC35+~f P$%_ @K%tB8)D5\呡@QY OjQ/u؜r>CH\5ǟ{vk+ҧ{XI@?!X:j:lO6KU"5\3/!ތ1msPpɢ,'HŦͰ]: fzmpE oS7fly`Jq辰sX1m=[li L:BH(D}*ҵ?LhRTK0~'V~8yCy22^Zoڎ5B(pOHTQh4q~-}NMN* wf 9S2;9kl#D FVdI{uڿ,!=E  ` ;yqGl[J 3 =TN~yV?!'Z֋RsC pOZY ֶ8F$*Q7ŽWs ?!wN,_ј7s(pHd((?/>,)3 !' #[99]`}gEBhSg֖͎l./7 7k@DB(pO.'`ȖEh1 ~֌֨Dŝ~ǚŝ'ƆP \NpubR0K p>"b!F)ftj-^) N@=r̷,ifBB" oh֬L4,ys`΀[]xB)B0SnNO`w8&":Gg*'yBBh`zaLj@L쫾=t!z"Ē@BK!8S--F:DPC> ;**S!! \01"]=/Hi R@gɕZ̈́'l CӭbtJ\j2sm@@ 09ocDVn&m Dj})ZM7#dpviPi"ߝ-!!!Ql"Aff8h*b~.?\Hr/@BHhP v& pHUr0ڶKHw`g kA^bF5LT? - @@ >#Ri髚!JY͚zU2mJ<0 3qg&@8!, P 75OȀI-=~f}]K1e @a!$X6mcD*E\̇9ռٕ2!`|X䅌 @@@z;n7'؅D\՛͝K+n0sQ]LBB8= ?@H&7zfR8FtKS?& \}bN1-ZpKow1y}B BH^#<޺}6Yb&1^Yg(ηs~@@DJ{ $QSLIh SqdLq!EP &`dLj.~գ\BKUփL-(GS}?F@\#PtR P ]61"f|s3VsHe}c@1GH锥,05g@T P@@ҽ{0} wG:6t$iH* -|)f6!!bXLj]g ^{K Qa lu_"-eieEl(Rx)70zeeݑ O6Fȝd xy﹭.1#i] IND !Hͤw ԇv 2U*(0%֏z`Z'n~Oٿ|O* 6]JIGOBBH0)7;!ZW^@='#ܼg$K@G` vfK@ \1"{ [B=bj += J Ltz!RUzGJx'@ۓR Bc4ncD*Lpx-0S6*2׳yZw5B(p  X pH6H$d"1c U6 8}nV~q?!!!HʹF=# bHk%[}g>SBegvu !!$4@HxMmQL:l 82׮eDI xA[Y,>TI4BP !(:ھf1"k/Ǵ:[ bm|<}Ua,K^51!4 :BBBBl!HpB(B(B#31!J7~! δrB(B(B!Q&tr<)\+WP@!B"XV'2sm"{i3}'!Bvjp3"B(0B!eyYeu!!B!`tR=C 'FB!;{ԊB!]R49|? ̶Q P B!$PȖ2l.!Í߯wLPJ6%B!8ExEtk#@L mk]Tpp!vD^B!A&7l[j+bJC xv3a`f#.&d q`Y Hi#%pOHu:] =-/&B /18"Ɨbbj-v4 Ƿ#'$8To$BB! `l`YZw9ix.0ᆪ~J <*" hB!$(Ӑf{%n- {2pjzH77x&'${BWBB!`P >C2(:薥 "Q~G?l,I {^$/I_YO63G4{"k>g]ӳ Wm濩pt[{!S.zzd;h57u?v`z{ ~{I!F@3rE;u5 bkv@ g?!Bpzk_AB!js\OB+21#{USӶˢ^]X0σzb=W|Z򵝲@{} ು} 5o)BpBť+g8~z"Mm@n:;lCP* kg-43k9Cft;ra,(d^o LAm!T,89"n&7M`_n,ۀ ;(-gmd\& ̏+gu0'̃ y^^9ϕ.$h",Rju >f^9T(pOHmCY/jB_4&i=sQuW4g}I͏b10\0o\՟_tih>i<~یǦKڜ:2]9+#U$!ja7, d)?orI7q%LϞ%Qm>V*hϧRIŜ˥J 5=o̩`x@"X 0ƃʻRQ ш3d lߤFc+X1cƸcJS^V@ #S.g,7~lG k(ȣ( $* _ҾXUQ\O $M3/6PIENDB`tetzle-2.1.5+dfsg1/icons/hicolor/scalable/0000755000175000017500000000000013522554645020547 5ustar jonathanjonathantetzle-2.1.5+dfsg1/icons/hicolor/scalable/apps/0000755000175000017500000000000013522554645021512 5ustar jonathanjonathantetzle-2.1.5+dfsg1/icons/hicolor/scalable/apps/tetzle.svg0000644000175000017500000031063213522554645023547 0ustar jonathanjonathan Tetzle Icon image/svg+xml Tetzle Icon Graeme Gott 2016-10-16 tetzle-2.1.5+dfsg1/icons/hicolor/64x64/0000755000175000017500000000000013522554645017574 5ustar jonathanjonathantetzle-2.1.5+dfsg1/icons/hicolor/64x64/apps/0000755000175000017500000000000013522554645020537 5ustar jonathanjonathantetzle-2.1.5+dfsg1/icons/hicolor/64x64/apps/tetzle.png0000644000175000017500000001042513522554645022556 0ustar jonathanjonathanPNG  IHDR@@iq pHYs B(xtIME  5nQXbKGDIDATxZiTgƞ9# PE;",/n1[qÝE1jdM&ˉmm:Ktc$LOO̙gsBDT@NSU>}፫;_þh|\+{_g 8S_>y5+_ȂG70h=p{U q#̮k~Clѳ8Wb_igԾovڹ?cw ໟޒ GN`"HF;6]cƲt^ Og׶La0cwfyHCOv`_aAλE"4}@q `ydG` >S`p˚spPp ;N\׮I{zk/K~7yO_`>OtvӖ` Kڧv<b;}Q83m}` X\` uU>Ó1e#(^Em oiێ]a2gԞ|z7cq'8x#Ut&7^}5;t IK«f9؈ē ׹GΜ3/7.\+_ _|/l=y(\X;|}n}fwjv;\3lmx-sx'Vl}nUn|=_}#gp-+}K;tS6vC@'bRAr*P+Er/ҋQ2'sVK[d&Zcd'\Tuڣ\۩V&kADYrʭ(9s2 ]5nYםO.Ex{{=s|b@?Tba%̘RtU ;7 |^~2:-g6YgbέJe&[&<ŏ %]Dy+<0V8,Ip<.4Ӓ\f"},\XbIYSñCRw--bHCTc?t\T=PwGxi/ΛǨ4 r?2Beڧ<<[$|AT@ٔ8YsvE8R,:^4F# 5Ob%drEQ%ꚬ$m02{Qf(qu$r+xiF\)/M ]+I92~$vۂ7LJH*H:h@EO]1p] TTIR~indX#SIA)Bh3M-l7 Ҿl!,ivh~mfh-OaNL4,5 &蠟35Hi0W-ѼN$L6iS y3J㺝5<ͅl{^wJobA, [ !䤛(EE6烺AecR^DK&JH4o_)k^#y߰`»gh9 QpX߰jhþ:]Da먢ձ\1V@ 'N ÎF6,a4LFm7 BZqFO/0+{pݰ aI\Bd9 fgx0*WX I 9}G-0A:Z W-ݍ;lԘ~0ճKyW}#u=gz+y.f8+(^&'xGIۿ'u?C%r(DXiL4ITP:+3QX*B&4{YA獚Ϗ߂{6aSj4mGCZlزJlغMuh|t"P}cZ;M~= [[׉r!>xH }Z3ic(ͭU1{TWkL#%- D U_+Di248K $;6.ncn>/B:vIrK%^Y"\5?U E@5I[-5A*+/r#!rݧK}"e+1V˖٪;[$%/\:z=ٰ$ 77f8Kɖ]kw`:Q0:/,`t+ , Hulq iҴC]ܟ b}Ė6Y'5bZ4iEEU)}~MBoB"Mf[eŶF6Y(ovs[^V{\݊+3G`#G`Sj=(I7j"+;9 ֶՈ0hT6N_(ͻĺIx!<ި bu`6eĽo`fdK.~`%ɏ("~Av W^ae lgc@KA`봄DL`{`iB|5eHg.=C19U4ut,_`5Еnd L$/ ta9ݵwqR(LNUKaomxGMs`zdΐ=BXItaerE994#y-"_y>^qcXi5=3(X=ۯv=wn`-wf6FH˜ kgjXnCmq6)!]Q ͂9@lQ/͖`]k(>PfAQ_poF1ryR ߻ yi1z `oMv\=#γ|QK-iڥV ;nm&C0@vS~*9nHv"x:SiZHQxX3d T.zg[h[#ܴO2ʣy@]1x yL2{{5n$n; ?kzY]tZ@٠Y T"b8$C,,r44%Yo>6nx򪻶6@kD $QXp,k=w9aC2 #ȪϪg5W?x?z7n -|Хw~Tm>ZK\YPR:GT )A*yH.d P|A' =^3>ڟ5D%\ֹ')CHO B":RW`,Kut=}{{ApROm҇/ @_pݷ'‘_FJBL58k04/!R*?K|Ι_B+MQ(tռ)W_eo 7i4<_(_yRHr'!IKK]׏*/"'$aKo faǮno!dyBkrfIQGA ,˫wI"/bf#TH捋\}m~5_:'}s=҂,^LcjY"{(Dʃݍ9kL1轁z$A9OzZE8إ4up$J9uϱT!=cc ?D!$K?`4ݝ$}8vYxs(g]ty3u0C2[ vY<9E<\!S8gp&ZWyʏl\5}Us,.JƬ-'IT}o%A`=3 yp8-<ќ z3Gdmj6cE"sZf(kNZ} g AN~,7/Qd*;FtoМcsO~MW7hgMP:GzV58xXފ0'hdlo^%il`|o'c!|p}ψ{ s^Y¿xMgaG CkrFB :)Jj1>1KأH4.Q:`jvOn%eaI,.ўcЍ'Me9~zx%AY R3#sߦ]fw1%r4~7D{YZ0GhXiΐ%MOkSZ{es BbN93$Qs e#xzc00,3dqB9Ҭo1[  yb%Yjw817Z<3IX`glb] TLi|a$d)du=>F-`q!,ynŠ%B 3'deg}@QXpn qr<(uCG=c X#/52D+N%!ϟXG4qai(%% sL=V7+*O0ls '6H@ICGHc Yp<1 !I#OKwb݊6}tϴwBk}~!G΁_ 3y aGQ='}T; b;ϝrhSXLa~h6=zS:aq@޴WGYR<߫y 9 $Lc-s ;R(L&k~ |ˉkK}uJ$rܰYZʓEVMJ'k(-Y89}S ALs"@)IPS RpY^ҟОI(M"OMkФx3;9_S*!FaTtR01YC*q(i8yWxk ~_W<'IӒN7͈9iTə:RB]U ?)2@/( l SFJI,Sn 9uvk쁡BV7|n-\9hoE11\V401gtBįi<`EgIfyiI?qSZa™st:VrZWaW,#`HrDgPpT> ,)9[K1RomD%BVrsk\IILeU畤50覘BK)ATJ|I) qzE*hZRZ $ͻBq}R`yb:IX5:c-q<_=d(%"Iќ8~ ;iEA7J yntדZuH++kdcϹxb6tvlMxV;Y([僕/=YubIENDB`tetzle-2.1.5+dfsg1/icons/hicolor/512x512/0000755000175000017500000000000013522554645017730 5ustar jonathanjonathantetzle-2.1.5+dfsg1/icons/hicolor/512x512/apps/0000755000175000017500000000000013522554645020673 5ustar jonathanjonathantetzle-2.1.5+dfsg1/icons/hicolor/512x512/apps/tetzle.png0000644000175000017500000020260013522554645022710 0ustar jonathanjonathanPNG  IHDRx pHYs B(xtIME  sPbKGD IDATxt׶9;{{;D3@D19D!"A$ gg9WuD\soF^9}}@wFz$g?ayc9k: AdMItOt}!.?|oN7JI˶P 5AV?q[:3O~OfMDPAVEJs:t8dt^}ᯔA5C[R AVIJg~/s:qG:?Ѣgu1Լ}_@k HZ{ ~ӝv!G=-sz]@m@ 8w.gb\ugK/ p/K'N#R;Ax==6CfRB߱ `%Hdhk4 X Z V#AjmEv@ȮAjм0~ Z09ArS AI@V `AH@^ jA  AЉAX  5@ @A=A1 XA A[!A A  A  v@+A`@7AAX A DB@Ak@A A@'@ @ A(    0    ! 0    A  v@|wA A@' [!  A8 @A @Am=A 4AXH @6A zO@A- 4kAX 3D@.)}_A`)A D  EQA~0yu1@A)o(OfOyEseѬi4rV=aA^uZg>{?ݣiQFGҒciGcZq :Ň2iچ4"y M/r'/3?V {ig +  @>== X3vVs `@Ayށ,A^a XѩOArR˹ X <L]G'  @~( ,s3% u IL@ADp.H=دbA=뺶Aȷ 0k55sgҸ ilA0 ?P;?P 3C=n̤  M۷̽˳޻ײryѠ{hЂ40y'})NnsP[wF3czO_GҨ״sVSI+T:a9u,1Xy9rN9s%L?r.ʹs,Zι{r-ȵq^}Ev@`49tV˹_wiȒQP 9ym`ȝtJ翍JlTܛ;^I{NK܁wΟ3N.RyR|f]&'sZA>v p@}F 9s!D΍#9Wr'RΩ+9Ȯ)<7ՏHr,e/k*qOLySvetgyKY6ޫyξ;4WcĴ2)Y9RK ߥE6/>rޣe)J=y+*ꓚלz4' _ڬMyl믧ȱ1ʱ1˱gϢ.Y-@΅97r\9sG9i8r 3hו*7lNsWl'?7=$?S_bz?ݶ0!=ٞ#@6SМ^pPkڼ_HwYT|.-KmN6=Z^yBt.^sR}Zw)N?ʏl;%?wu|^ǧG'h𥇺VH/tE*~Wfc?kyt7P~#A/Mw~+n a4rV]}ʇe?t :K)|VONoOw4dә\?ҙ~?33CgJ)QxHG9=y. )kӮ5_9g?~ŧ;ŗ.i紇77^/ 1o(eij@!sNBw~2gDvq,"aʺ#um'-SNPQ Y-$xiKs?RS6Ļ3_)n\ߢȹ+H -K/i١ v+ vw%l=OvkQQ9 F  3Z{9/W=iD [9 9g$ېoe;iN`0ЉЈaVLU"Ĺ@`)vu:e aPΉ`Wl; lo+s@;/+X 6]/Lg,, u @,+yYΖXܼܺi,{^KX |vV0gb`34fi  AG9Es3XDVѫO*c0VӨ4&K4=@&C%`4rqJ H=F×eȢdQ#r(d؎@X/;BÖ@&@:K,36 Yr@k4dZ`X,OX  `m}=,US8p?(e/- u`=40e-9zo?bX2,X `ed/;v, t (]"XsS S(1K@[ߜ ,Xl~ r:pwf`8$D+Rqe?ό `0mV|H+OuV)XsN@@@49-M*)ik5#Zs@ =>e5=>y)2@D `e}OZE]'2+,+VO(2K@eB*]',.u@` :[J~B]- +X+V$B X@pܨ `UCZqYM `WXޢ `ʼnz )sP?,@0w+Rmgئ`5y;h<pɣ0@ `Xz$ 0hn^z- dX% VX/GR-: @!`1b0+,:|M `mCK҃4dAZ@AÖf8̝]Zp`h `# Re,2H=J×E 'c G)@%gy@0rq8@& Zy! JgH?XZ@0zIy<6`̚4z)0*0igCo= `.XbKZrM}7Խ4ۉG+@ 1|vVyZy=W%Gmveв Gn}S?e GB' ƭƲhdמJ_ɯ_ =t89Cu ֟_J/:-_pAY`n\g@ ßs 6^@d3lﺅ27^,≛.D9D 'Wn`6%;*z^[p~;7Rӹ DvzpN LAmG{Q!4y:|YswiӮ-trp6]Ƞz$>8zҖ+d]=S^2zCmz[8nz?xo~קh T7@!=!_Ri54j~^:v;jmhK4a9 I/=Yv"֫R# `hERz?eJJNSPun<-(@~ӡ [0x|ޒ;1!h+hnճu MdCB&xRHsb!*ȦCٻ?Ҳu+MSҶY}K9|o~wѝ0rk.9D=eui;o*XPuۿ+8v%YjwI U(]c6$UT6Vy`kZNןEZ@3΅@D{OuG&-KR6XY`V!p'ɠ}72ls|c>My`uCHHHcԒ.ܬr PD \ m?ϼ[+:2p3\}`z@QLPX`N @zMiJ0 M 2o6i;r3;4iYev@_{Ll_"9a`WchwP;%), 7E%4|8"06ks.{i:l-ʱߣ;E: i̚&;D jp!@ mK -Z=HzSTJ^:gPؼmCN V#>6u)80:譒hp@S`pC` \]wn;  yo\I#)(lҶ ] lMї՚>ۘ*G%($v~^pT1jҪ00u.4z1F5qlN^Ⱦ 9h`65]r{ܺ.-9Sן>ڿRTf#.1;6/68:R&E^Xrpt mAqM]2zN^LW =pn…fŴam gtaN}#ʛNv;ɥۂCu{;ܗ:~ۏ_#gujTaW7~V;ߣ2ޥrUU^ZB T/2"eS74G.?no94l~*h\0(ʼnA n- M9r_uӃל}qL3tN4}J3>+֤M)'郂 ]waS"pE~OK"ςΏɍ { *ť/\0AeҨUk25s[ Q2Mt.Wp[5}vVy3V4^}FJQ+OȕiD1Q [v.=HC!9t>qѠ{h'%LI_S[-;k3@}Q49$=5uB8t_F]ioy|L3g,]΁ 9'rnɹs?9 ˹stk B7@zЉ>@O) SK[rX.އ+Qʾ}Bv^;.Ӝh4ky,|oz&8HVd>.9F9V9f9v Y3g(U>|v9r.ȹs$j} PoѢCwMΤ%./=z~@ˏ?G#-+l?5h!OBoCo_CN=-TL8T%l#e<4W ƭ?Oc SL`q;z,9a?W$Qc0=W:moVȗM/u=QKω]'WP erV.c9\y y-u{ @S[AEIMQA@ |Av8>|Vȹs"FΑ+9gs)T@#^@o Kݻ{/иEq";2|_^uf:%BswJ/;|o::i6ԃ}P>*e;N|63wZ?dF<{= NY~)0I=V3Bvh'C.0fnXx VI\ISY]>4g@>9rN( $P^ҷfCgS`oWؼ2ثOj^sӚg77~-~j7i^#Ǧ}1cc E\[΁ 9'rnɹs&N?ysy'>rnɹϛ\wF@ r^~\ڢJc:r8'jsG5]oӏJ?aCtq:v򱳧$/ϻJyRZuOSЃ-*pLsx6:6o~+w۸IG$/u}|)wѾ~1.>>pSAߔ1l{Mw_}i.񕗴Cǻ 5oy[.PM>you9yn?OlNg lt)Kq] T1GMhEͣkmyުj)9Ĕ9oK岓T Wٸ#Menr-=)Nuh;s:|}v=B[T!nٳv>H^2?-uUjr9ނ<%s`)yp&$W(g=q%{l<'D+~+ W (? SǮfqr&[E_ujGݲe~Jڸsj6̯_#VoLVmeSiVWsM[WsIlxwL K?rRӟpRCJ$es 8 }w449_ܡȠl$qP:z 랻?K }4Y4V=^eN%kZ2;Mvy7kpt|k^s,^#L{ޤ۶5K\/]^'͗o/Ջ"ߌe._:W{i>$ /RcG3^1^QrVON9~{:>ݧ3{P_݃C Gm`-rOڝyo<6{;N+#h}:b6'.>!Z9@}&q:d)$%k:iWEQ2Л#ʨsW6;Ґn͎n[Y=6"DfW'=۸}@{$Pσmϭ`9<~}}CuS]{ٽ߼=#Y]Ov?mCUm zVQ-(+}O4iEmi⭔'o ':˹}?C }Pie^GUo;IłvG@ ʹthlIucJPTq!oܢ\dmS:Ԝny\Pkm<|T%9MxEӄU/;^Eb)y׫,KtkZ$+f#! 7QLXn{yVm[;vqh>m#EuWz͊zl&q46W[?1P9YKd:fj: |nmܾhjG>ȳ@G5t~'S~NSBlXmgܼmCusEy#Mm|N6(a/bYL^;է`!7k\רiKvBfqafYPkOlpVkZTqƁK-($fha@s;tq^kvWKw8Dm1a׊֖-ڪdi c~nu%x{X[U8x|OAkVk-/yrgXO `s3 |ݦE| {"ۇyZj v4q>.|VEݞÅ]џIggo?6- Lsf=qvvKq?V<(*1B hXU{è.ߣ7M͖pXbF3KibV>3SS1fɁX+?^*mp%&OS U!|H%OOғ0|X\Yۅo5+r9Ү+EӢ~WMunx<|E^B$ ʗ7Shy [nBbE[;@2̧YE/;4@Qn>iyOQ wkQ5J@mֶ2jyȁOvH݀@|U]TH=) )rCe뻳1$I%"3SDz@VٸE~pqHJTZFnޮ!݌7Zj~YZƵ%Q[ϯj?K@"(۶svS@Mn %ģ¶vmy (9CkV%7ϷM=ȀLg2fK[-ћ@N(`'Jv8,۸r\HI>]KAENӗiM:N,3^hhiuq![RAtj>rEGzW_^q$p: lo/ *M\WU|lO^LiWAo̓˨VV)%2ҌkjVks"76}ox倲!+3i4g~4Aಒ-]~DuD 2wk ٗR8{K/_Fp!ճ$6ඡӰ"U^n7CHz\pAŕ}m-%905Ho5(04o[zMfMZf>z\NX }Pޓ=ղy,|ؖr3 ;9ȹӣ4G?FY2mg:MֆU;+-Ɲnʾ>ϘmfqT?@oP@(CL U8t.mgp)Jې 2wX+U?Z-7LѴ:t9S̉WsUC8 w }NI h54bNJ ~}!A@[oϚnPYIe_3nO@ZILEp/M;gzE3eZ501i$@7Ʋ|Tѡ~.ܟrdA{%;oG8\#tH/H0du7 ,aK|jnr|$nί$vr}QT }j.wI}y}:hv.ܿp9U#&pY)PJRޣT$in㗹{ `h\ފ3ge Pir\It0 =un֎3 HPwR d^m*, rùPCcNr 7#6)cUM ܶToa̗]jƱZIzcdr#8\äx jUu%q|HZV[ L++4%5bzvи>G. UJ2i.lY96jR6Pk% 0t]A^ 2,S p?;jFK שM8vqvQ >V#xCM yKЖv[2psBbq(g^`U:%x-pYKsu('yT_FrUzx Hh(U];-şQ^c_[d`\7@7:f$d^ݕ1N4lomyB0'm\UU;mnOsyucx孂[RȐTq?蒽?+j8(T8ja(K,Dsܮ_9T3F{46)†(- iU4- ]ˏ}L,t W7q<Iِ]^֍,mjS٥zhY 3kq^}&o7OD mqܬsD`<Nd?k;L]ݟW)\(a syuM`ȗL|OޥZ>Lsn6uUhnXrw* 0FpJ Lwl}R}?]} {ue1EcT+d/B`\7>-_}zEﴴ-Z1omRA9c#Q@cU^qSϣu ط-U]x}fyiV] F?-;mS^Gs *Ɲmz ^q) 'b'@oP^n a~,dK YI7b@YI%*ri%*GNYB-q*F>v&C:R@P'늴 ]CeKڄ>]"UzO¥Wg' R1G,^8Pߥڟzሀ˼ZsίgN&p(4{_f?~f o0K >+YѾIiΖ8?(QI[/q [w*{yGtVW"FT#nH?PUSBʽÛYuKI 1Mhi&G5Mu 4W*'@.+HԺ r9U۱λfGb~a'l ,ϛ/L(8gUӬ14w7<R'G 0qZn3پ9N{Na{*[\^o aVAn椪D= #Cɮ_GjG<.aw/>'ʭhQSKX?U K"5+hҲrN@NlTnݬ8@$Kl9lV(x@**oyȭlx5;.$iU!RŸmG.=7ej7@. NZPO5M : S1bqo_-{(QjVZ攺go;흣 ~d0wg PIq wWz*+ rPmfCαNpjm`y-WV T# Hq%`_ᾙ#(/;Odl7}-1} K +dG NUdW.%/^Gv_OFdY»j+}-[[jV'$3;@o_2fcʻlh H]"Cǫ6$Pz[U*>g%mA2KycnB: DZ Jx,Ou(fޥY{bn_},%HDQ_ymajՃJWLXH%ӦRa)rþ}aIF@=VÕ'n`'ggѿvDFClψ:ja#M?SrL~gH[=in' LvmTnw XeЖ9ԃ0qYJCm=*vlV' *BH"dP[Xs,'TŁ$i dc<'F3͡q_-j/#j: >ph{@| S-^xaU[ <:+?\z ܩ7Ʈxpr/GH(e{eL$Ӥ5f{40٦=GRX'RxW)UMCMO oߏJU(MEJe0eoZ}PnL{ h_U]Q0Dˎg'MQ DdU@-[nT:qNJfmY[>&4% \@>G%NxU >1XJ7/vqY)0i]lĔ|%yOdDO@sB_eICnx?LJ>' >,"jMH)W-oV#[u 5B1-r`L +6Զ@Nk9\~ve8?\:22Bo]s$c[**T:׬TT+ g.xU[N¿xvzFPWL+ѓ;MpoUYm1{r'ߙ3{MřcU%I_Fq'[ۓ+J_֠Ewͫ?װͻjKG#K#͛ &`?rقƬ> ЦO{'ҔttxK^'xJV|7G 5QSew ˪%!PEįrLXPf@9PC9پ}hNK 0PaujqЧ5juQMneo7j5@5wikKpUM|dm$m=^?"=WhST:aj bh9WU~Ljt7f!I(Ŵu|qBvv%*q-iZPA5Uq&W UkeUU4JݏyY^y*|* 24! {K"`Mg>)Ҡ@@TANG!DWDU6 /axmEo;'TaH-~w%UD7@Pm_:9y9_Ub`XB ua|k\ rHF:&K`V},!TcU7ZvvC<[%u:E=Mqt,|"7)%) dLkb+=WrLMu'R.c*Iߗ6@? *r|}3 H TR `/K9ڒgĺ#MK-x%iZ߅y SptP;<'']@@A9^_L1)0Ph}W5+sRTA8"'i/ 9&]ŠV }{fjj ͲoUjj1VYr b< #yTזJmqNҨTAARi)q$jw(EvOah! D#^Q^ gJl䁨V9y|[ʧ;c>o5K Zn;x K+K] TuAO 2+ӏ uӨy܉7kS˱3d-ݭw7f+|3䨒-@],Ɩ)#Gr7*T/H+ؖjp1 pErnFPSoZ87uoSYc*?%CTP} 9I jr\*\CNUÜ]GtfM}5A_Y)M[- *ƚ%0}5eSAKBUa{oknsn}Zgi$ݼc$y] =r\ ${B/-i&|"A*| pD=WoX*>.GJp^]M\8n `*d 媿w$sr'm$cuW_*!gT IqS(GD:Q;vS0Dh\3JP\ 0^7^R4r$Cs.tt.`߻Kc%w]ݴ4]WKy —lԠ,C> x1#+s;% s2ZV>RҬwr(bX'kM 9eަIe)uhq]IKv9ĵ )  p֫>Eƭ;e߿/C%r\6p ǻr`Vh0 ?Du2U;^ Wnb7FܮSm܈jI4S>$:1+R* 5JPһw4kI24DdD# FZzεQvc5ںo75*.br4DAʄX'QYVUГм:$qDwy9. d-3߻ձM)kUKqw֤ kU.[$ 9% Z/t;/ D/@[)@Reߓj g$.}Z3~sYnZ77?n $ޯοv97]=S Xݤ_ xriH ^AK'} @6d|OpZUXi; 78̳KCmUۨ#d>gRH[<T@T!X_%hTCjsgvAfmLm`Ӏwګ:P WkFO[ 4O|E$vȗf/L:) Di'Wрmlup iاشtQ(ceX[ g\=TmPCV_WҴ4=e vr _̷˗~B*Qr?w,K<ЕmqUֱc=/d6pzeO8 ˫+ct> iv7E:{.Bֲk=o<⒩8_{M;Yv^R%:Lu`ȦyhY%mCP04tה{#U9c.C-kVU ;́o#qo:IHǥCc gxmRNym~}y2nZKdW~ =c.IrI/.OR]6mKRI@FM_*$âE뉆}I&Bcm% !6i |(i[XhB/8r읲@?ro{5 Sb<ƒaqe=νt\nU Fի)wdQ\=M= fYdSnW!ǫ* 䶶fspKD#o-UD1zE>}[_U/k%P[4o55\h7-P07.!/jٽ7p*). rHeeT ʖ|}mhy rjA쥘F2/Yxyd57Q;_4 nxCp"%!(w;_B!%%'9@3.؆iJHl~b̲Wمb$aad qO΀Ʒb,\>v 䴖 0|wY]U=mBҖ6Ve_OV5:ƫ:ڇPT7 Icuh鵽XmL)8V+6#qDD݂CO=U `X{(оw]ƌsxlfop-p}J)#d,{-Fu0T[eW6W!h)gz'olKUI07f$+^! ¸–#xZ"6YRIU KKU<}LdؚE<ъ0.5`luz&2'+^PڼFFUfiW5T F`Z>g>8 i! }cD N%Z$V&|$ފWIDSu8\灥ԨQ%`O$kI^w%V0w_F u S\Q*%O`qk*LiHie}6qi '; #9-)a &'ri+KFrfEٔ9>)`e*V|Gmzwt[)u7W]F)|mmm^Ṓ M`F+ *F1zJs1Qs丂s;LU;`O66:qRkϻH_Euw]Q㨿WFLjKf}9! 3 w^!F^Q&9{8wT$㻷P'֭ҞtdEL.g-z)3)n`Kh .:BίYa;ZiLNU>2j9/ Qq!)SjB&C$EF e,͙=ׂgN JݧBVܨ~s콟(uZHM0jmeͿ^dIJ]$djrhb;Phu/b=!*LwEwNRns` ;'Bͳ J3 !&Ke2.DUc⟴F+PV1%lc|.,kUUWnD0Ψq ǿ<ׯҮU e<PfF;2/zyIIP8M崀OhlIM6a|!xΌͦZidP=AP%EP!F}d/_f5PAugҌGۨj9y(rǯeKMk]K[{=ؿ7R%!HwI,%.l\E5j4ޭh֔< o\j OhyA1\IR |]M󙝡/Enh4(cZCEc%[;s:Y_m%R)KV XeWe4 AKV?\~r5+qGC^Mф+R?vF> kl)<:$yп2Rwfu2SGbF\_OiH dZkC_24ZF>s h"8R "6Q9-t h 9uFptUĖ>o8TSUdhЋe:ڬnes9ˎV'0Gg,o-bSjP@N( wmeiۡwNeru吡,UZp$L!ߓS+Rn%~k}JI^Z8OFuMlQIELVr ,ఉ:\0/+u)Zue^{?:w6mH;K%b3,q4_"hiz>,k`QdFÊsm 3X5 &lXK1*7>ap/ˆ+^ Ȏ`Ix68"[vRy% ]P(.䏿o*8 Lz~p DpS1EZLWpB+$B&{H?q$yA7i[O׭Ld%?_m{ϊg{9Jr&1NS˶5352g"G'n7ު|e6J$k/XDk\dE]˱;g1@eӿoy ' 劭 U79Z%jI3}$uGTw.'_K"iP9 D yMqRjjC]qbo\h;Tn\L/ @7cxOl"NLIܸ$ͶBlbRWͼL|:g{VH.GzY3w CڔxpQzc?XlbQ"]0[ 6Ĭ[SH /sf;k˓63[+ב@-ϼ!N8~; fo4t-Yᙝzm4=+v|``ҿx8u8 >h Ӹ!f36pKFKE31A]=N'SJ^Y-VT.E#g\&_ĕ t#z p`fJSk58 QOϾL6m,#Igg) !V\xul6#òĨ~ ո0DK-dic,杛,t|B}6ڂK97Qh,ỉ->ϳȨ(1K]ivU>/r3~ž0tR5Pp0x}1t&t"v$e bmF| d(ï #]7GvШ8s9N9j)žɬ c PF i/.RTn".`H; gA ߯:v=ns4(rX%q@.zxpo3"G]}p{PZ4#st噧9id!hgQ@+62Nn]n >PԼソZ>(8LaJLQl+<|>[,":^5x), Բb ^?|f`.8[Ykl@9&|W@ġv._as>Qn wjX`ITdšjݺ1)䋣,XFV*r³9pMtA*Q1w9D`BX qO @kP*iTyb^psLkTZdo;4V'WZwQR;G@]TMN0gj)ч.%1pa83]d"ZZ equA Ԩ@*ؽk d~ շ}GD]K(Y`.X nG]8IM $zɅ ar3j62n6``l% ^zrۚw^I'aogl @z&qcI2_SjWg[Cu`w/K7t/-D3Q Y@SN~ӹ>AKv3k~5Y3S]8_\/+~s |'sjr$w 70j6FdLm#GD+}O^µv M۪/^SeAċkZSww@JRAG;?(V, 1t :d:1[4V@je>ӳPf5N3T~x[A4DƈHe}*uفu2R~ P=M  1(.n}|Tb-  PAKj xS rوK^)7rK/+mpt<L+xm8~˷q=TX̋5uZjLpټf+ w'LXyM`otMra[6&Qs ߇gc8%:{72 ϝ>MOJpT3%;AGVq.` ΊQsd6HeV ]Q Ϛj^vϒ#q5*7q0W{b@0}ȁf2Rq8hZ#Z$El3K X8=mA9LDibBr61 1byӯeP} 3)qiTxn`$B/)j56Lzso\F$;Hw?xO"sueƏ3 \75^9vtyE X&ew3x kǤ__p๗Kl=}bb---llW?c;Z,Q`{U)h#+} Om%( kgIl ߾ӹD|܆ݯwJk̀2Ya@jk  ce#K(e0nf0/-&CC4`]TfFO]f*v FyJmk+x24}lۚyA8SQᲓipiځ`1{)$`&ۀVdqou'ǂ+g8a.Qv;L_g&p>!lq%KRAB@}PL`-=J(̮ZƑ ~, [HYi3Hf,([(5c_i°qLQgCh)3 mLO(_ "02ǝ \0? PpB4wQSStO>~c){>*iD,˙<@d-cp+kJ|ROUA5 YA0`q,^cxcXf D@-/>;u$ڢCrS0GQC| G-̣aܯ5lͣ:>D9&V"NGX;!A&1yP"?P/4 DX-7qwGl)ڴlS7^a^4ؤ; nbj/]Fnsh`% 2Cj>yiIGpѰLk`ӢViXfmnB'QUL~ h/ >pm\%`1 0ux[ roȓ &})v&ؽaw0[c?gyK5L1qԣ?AD6^jneW{f$sqtٞqlh+ܨ]'lK= w `=I ܗ  I60pC]r_Bn_|PO W83ySpف&kZfE]*x=v1 _"N0OB3bRpGLGd=A_=1pլR'PR,6叅8*I7`y`SakqZ玔(_udGnzd3`/ہn t:2,%VM*e j; >t9 oԮe ?;Bvۛ 3E$g wȎ)DevUFTnKY>PZs\j+/ 0c7YC)NhRuS.Z~w0ldM@ "5l^Jf:XPEʙ*ϕJ-Y%֦ :&da6`l>y΂^eGdFen'S(BHcKo#fn\*1{bդm u8T~Nqqn(?4}Q]0`@%~8c? ?hL`]8Q_yBmĩk!M/1sU]|VE dT)c¡ۆmnl/ d~kks$p#$9@ί\ :4,6sIЂ": $Nyej d[Y?6K oFf@O^ fGV`i22^X|Nb@@08ޒNV=`ҽt7YL,=#(kx]vl. ~,Kg%_}59 ߷e^yiv8={rϽ+vpTa[e"UY̹3?t:`hA.,B<ַ& M2gÝ+ŭ{>״2e*<C 3`36QiΑ2k}E:lR6AǰklS}ag/06\Eߕep~wy= @ ɵ& $OA5҄2>vHDY }d<NvQСзZ;ޢxjuhoiu拨S1gv#ot[,:)bsg?=o>v?ɩBk;ɴ*3?#n :+/怼,hMz!jx"8]8;c/ fzG SewKIow19gocC#-J}{k6j#!kU}- thˈDy@$U|c@? \s%N+~j32V*3 P\+bޢ+Ev gǔ]*>q0fMaD{\-CmRNS%~k(Ewb j :I? `U΄v]c~E M w}툓؄E6ڵf%5Pg$#h,5Zܛ (F.Tp"h#a/q;z`wmv e\FiVHWc"A$p"<6}pz!mwcե1JN١e+Y@$~߱Ͻ ˾Pxw,{ *asVr10Vd kX%̀2>?b */5Z'N?' Ό,ExX)ny>x]CbC;_l<҉mЮ‚ذ3gq).~-^} ๪SpǢE */N萡Py!kX\"H hiHqge9 R6lGmf@dy(u^)6k٬kB pb/@.iq]҄Uv;n$(+o>O%d Sa1R Hq+Ϩ"1, v=݄Ygz<] Rhя1ECo p4AK`۱.`ȣ}~tH )U]eT YiϚԕͩeY;LNx.^E2]3[ upO$JW@U׳JNC#hz};oC9XD)?Mֿ5uY1=lCLR%ByzmL*gn*)@6@xq|HE].+adnn@hHK(+[%qC u)1X9 madLqNEꪍVv,P5Z@-T*)`)&8.R9i TaXJ hP$ d NuCk9K~.wM%wiTJؾxD,OӭAu X(@*q;5?.m3 WO6 j.U/K"?Fw7Yi 0r+LMY LKCi~a.WA%\Um#L9hsiEt XVyq,CFaQF7FQrVϋY)\A@_Nj(gᇯ;:WZѕ59\9myF\kwCa |q`Y՞䫕4? t׃^NU2% ^EO2F{4S6Dk2N3CR?/kQZQY'Í\Zy<ҽ1yOW Zb:F> 2tr-kX[fTsqiZ*}Slf1b>JV:z+!XٲᎪO4,]:kܘ 5[u<.&K,Q(mϐ]yFp )P %icBx!,I)@?&d[xt\j1nq`/^5?0CM kR71!]B/en[O;}}o#}rƨ3M1SQOJλ &!\k\1w:w @"dhLQkXE6ԝ(\A?K_#~36@]͊CG$a{O( X%R/ӵu {w}1@s*<7`XݑXKPw.Y1H}Ϫ$ڜuA%?313^ jy:Zvh/`Mtr#ջZv&}|nҤZrʪš@V^\t%X% 맃my͹MiUZKf ۲, }FLQ_`C7Q>  0QlաsT`{9?bB=bH;uPt{ yg /m~ddJB{hB7$Hr?L3zi 3={ -ZDE)+9AՀ Z8WIxS ^z{ jP=4d(Cw7i-Wd"\݌n] rD.e)aYәl?iQ3:9 &1su4$Lo{I_H v5 ,o=w^pOJfנb@HlhM DBDZ/Uߟxaosd$ILLfd 5dʁkL>\Tm3-`[ 9Q$j"OyKsĮ/!?OY|v "XmجeDAN?(WH DgỤxsT(G{%Әk`[)? 3EMnlB,QZ.tJ,l@ۮIJ;j-YToU`I!3] j4 Z8 q̹Q+ ) #)߈>z_|\hoӱMS `/.0y{cq wD:yx!3-חU[kzOpx㷈Ivdgy'@]z3IR7;2ҩ zdtX&k#ZT@6id_0@RfE joX/tWBJ0䲋_A? 3 5&,1[ P؞>9Uu  I=]'(|dnW0FA( p܅&O$^|j^99rH EA1#疾 é[o%cڤyC Q)TebQc%n$o:[6kd0)B̕C*Tgt?:(Gzͫ-,;\jH:\]JpaM*) OY tJVXrq&I ~Z6Tx9 fG|[Ӎұōgp?: /x`ԔߕZ|#Q}W >7Adԛ,,ٴ4pz h{1ML~{V@!0݄drFEe;dsoNbj-HڂZL.O\{4 ̽۩\dN;abDUn”@Fx"n`=ܒ4ZC/Ϸ F'v= `W, ~dlnK*pB|HQ&:عv L@ـhߩ,MZ@ͫtZF B@,M^Oxo\ X`X  0oRm+[\T)\U>w(^ i ]/& p?Qc hfMf -Uq zW93=v8i8ݓҝNN@2#1"3]jAr&4uP/Hx ]&c|ˇH"x )E~##n2[e^OA(] JwDufwLCLm\ o\sa@Q2dX5@[nX NA5tp"ZlH+I{RV-eaacn]qysQ HԗNp/  RFIө٩zIZqnں,_-m76,^jC&`q0!ye{^&LqY9 EcE%ٖ 8}~/n'Z?RIiS/iX N^lI* I0dy쏹 ^rx(KD<B䥚_}+kO( U+ S1ke\6g P"ϩ @$5Bߴ>Ժvm_FHޠ&jfh t~[@,S8ŇLm%+wF{|Nk ٷ,ϋ#Vh_"Y/ gW8f3a`y($K 0vic}ؔʧޮTr y.ukp@_\znU][gbuN;RhÀ`$WdxAdGRxO|3K'=+gްΏm:9<>Iy{g.7OI*f^ZM nLh] ]Llxȇ%|BDӒQ_[OTbv<:*9}LSes̬z? glYQlEvnd3BAUBZN> d5\@f)dۄxs/=&}6q}b۾͢oNn2)44c+Kw0"%  9ivUY<ڗW:u[V̘p(/ޛ4`6܏]I]PPKP7bػeVLi3,p)PFnf0={@\`ut^+SݝJl)CRTׁ +a2\&Z,U.˜;]-<@2`#֬Jh\@:T A ٵY3g_Q+ɧw}8pdJQ2ۓ{E5:0*.at97a)[ D+Rz (D Kow ȗV-~$<of*jK:pO6 z{ R`3 m^5`TLA\9(;Js@0jyom\Y ұ2uN &3ZK@H fϋ/A  36R‘$hLn}S( :e;W,%~~*rfLu=D.P--jza$-->kdVeUm`A iJ:- ԻveE١-vlg)VAݮj΃xImde1OG2.I ( xH2(5]'m I16Q q)cR}ĥLdͥ%Zsq߹`σk3\̒@6JT.TT=/k]s U5.:,Lz╂9RnT;Zn\QE-f^ AH[Z& MrU1IjR"%Ҝ5Mf~tMvJRs'^L+MbMݰxY٦k|/2|-URˍ8[2:7^ bM:|8UbT dWsKQz!XatF*]e$0}W93d* @lD0NWK'.4q)0#S/ C{_oMe)S r Pjj1g!y ty%=8+$X3tT2 f` o_7yE| pͱaQR$uݤ`U s5\LjaN*PGlyscsF`RQ5DJ&B#hcҁ 2Q}$HVHxW5s5Ȱa1Qy|0N25Ոg:)+Zh:S}ҫOB ;{c5 yxyU  fbwAlY1[ߧ`|KpZ;d(ٹI`ptAFG^@'3 >9& 0\=t4\h<}fqe]@U$hN!mZ@ ߜo[ 8.&/8t'ނ~Dm@0R(%e5fH^xD)qU^;379J֤Fݏn+vkr~w3Xkd;9\^aψsP]ǒ J'dSAbc#(:.kzܳ9Hbcw^\Ioޘ2Yf2}<x (2)!X#[ Z#IhNkN-@t[09DQp2 2 k>ҿ Cg9msSdܲ;\]t*#4'gp/6tpz ]wf~{/sR$[_@qZmvPBi:npoqkmgDgR"GxLJ#Z)OV,Yu80Y>૿U%ހ"'Z,fU[n@ECF*xߦWyr)v穼 n 5JbD`K]c/2]t zJDuahlO.:d-r*BԈ|UU㫡$?O?z.8f>R; 2\8Џ{/׿w1@C,??@RޛH:, ]󷛺eWSw3s//1IV\[ JzV&(l0i)Mȍ xڪ 8tӘh_;z7X^:vmnU$lTatJk䃀j\=/|FVX9dvCz8@d˟s\! mt_Kyχbnb%XLDͿʌ4Me 3s7 B xuN\M֚2=v95 Mq5ep@TRevwwDPv'AsXk5x-ZSs_Ɏء/ɛ 6>\Qz^xuPMƘ=v ݽ~1`_8*֒Yc}l@Y{g*XJ@XK C `st 90T Zװ  6wqփ[J\'vcQ i[u~iT^4&3,U=H?w" @ڍۨ'@E[EWd*$Qt'@r,1= 1{:iѿ)_JF_2ѥ1em⺛iò֐rÃDdKE"^t ;ǚׯ ЗgG}*4b*͢,J1 0D'c%) &⨇!ѻu" շ{{9d` bk }:LP[]Lfᕴ\zEdS 9;[E'ZQ@D}O2c2ǂ%3,*d#(ہwlp&em B0ADtX$]#$Ѕ02q ELdi{lҿ}Fi>L?Cnvr8,GzW>0L5Fv :r0y%sc"J:Td<N|1!ϜkLpE:g|(*+ ڿgzzu18+-5CM>ez_q\LޣEWISnH;:t`D,#MY!rzj{tFSUY'uch-nyk t|D$CߨozӁ|Q-ƿba\5Ep J/$f 'D&$MɣH_eShl~QKcy:f@rLzdIFJD.m'f7qDȺJdѽY%sށ'6q,߽ޯ;p0yb̹';"8pi1fF @߾_,}'~1YdȘLu1 Ymqo?9$4`y,#ձ nѶ5k{v:6OZƮWC I@zmPht3'iZ߲TkQ!GCXKGD8i@8 %9 1 zO Fk M' XnuW /sy\\iMc+(@$¢cb~y8f>v:K#@oX&Z16?>@[: t IPebh0 =[5;]Ljb&Hx+v?ޯ3ۗq@Sׄu2+LD~q~qq!q#8NN=|[߲^U8>.v^3,wl1mݺIL~ƺDhn}Cmb`hZĞ#bu=bn`Dl?%v1Xq8vezO}Bk;5mĶkVԉ-7 ZٽA ^OצR Dcyjѷu]Õd4SC |%Ip3\NpnzOןq:[5>? yڿs_$>gO9?Z^9a}S|*O,D~yctp?;~~nm[~Ǡ>o. 2{߃̘g^R#z> k5χ>E>1w€,r_D9s}`GP,jyM @k& LQt7@@ ڍ5k9tr|S F9ppp< sهnmpE@%<5.?`ب>]ĢQ4;r{TwPMxĆ]7/W+VI j4QZ|( >xg_k):PEtM%w\ ڣk`lqQΏ_osw4 ⵯy +o>m}{o_d3ex^w. ~s\'y}A5iSϜs@/?w\|秜 ϾEuΣ|spX]|`dkO,5_=f*ձjZ=fXKb#g=z~pB&cu-T^Z;O 2S]ZK鼯%BױǧK.cއ.HYCemޫ9ΊG=Ësw /xZ8Os,Ϻ6x; ,?䝮ȅ;5x~Ff,>w罐3cxӱ?&^xhz#.ASo"&^NGWa'o߿iVl05nyvԷ&Ky>1P͝~T쟨9[đ7#+7kb ADd ` _5.bf/c-`es SQ7mX`We(U` ધ\tzdy\#x_V1| yb㯋,Gdtw{ȁw&]Z}e:KyAlX$T ݥe9i?ƺN;Vb=b޻r/_^g/1 Pz*] e2:}-Iϣc>L`<K![ŞC_IPQ`f ڤ/6] 6БP}o!*H7n2bynи}0踧`#͇19HrWSDy Gxgeb @PGw ڌGVjqK$>WXk/de~v!nI!fddJ¼(0T,kQ`r,v8vQBPU|!l`An`x -FPpEdAP;?;A^[(,du)YXLC7k.9v$Gbc NJ|,(^Eޗ}/lc`!e U˿C V8,n<[6/{Z.'#e \5`ss6bz j t~d߄Kb AAl@ b*!ǘYTl#O&tx P߶*6zL7зʴK/uٞnA:)^kxU%kf@Z3_H¸ [[B ֺ CQ_\t},vlZE =Fl7-vO7fҽNils).f%PZgSHc>۲V9\Zx{1} 80*& vW?I%>֩(C$:8 0`o֒al X/_>,Ue 8hr;QIA}B;-Dj~SQ&/d=#ARdS`{EڼNtٹfIFP(`O>mt}`.1Q5^(jUa'Rn`-q(%E,sLH$Բ$׷Y0I x 0 l5!Pm %@GZ)?O<Ss@CMG\wwū'̛FX)SxhZc[Trv 5Io{)1kat?&6pX#Y@|"SQhV5=hݻG%w''pnhI0gǶ8;y2 yVVJ`rTRZ_p4=dQV?R]w& ru\ I@H1\?َK@+(0Q&_휗EIȒu g־L!556M ͵v-LlǺhyΜsy/uKL˦mqS4w I- {Yn5vh!MjV䈨~b'k"핚2h7K5\ l)LCG|O^DRϬLIU =(F2A;0@f]$ܙ7yXؗcp&`BLl`l$@Zk6D_$&Fb`WG^ L\ hT'9tO?{E,A?VH^O`P=ɽy-Z~y3ybۼm5]B7U\dX+czcS?@`p#w_@Yͅ,\a(Ym>m&f(Mͱn\ Nض>g̅\Gflq~BZ* HI?` 0jcrS^}4K H׵:+"%{3uD+rNtR[c|0ѯo]  "ZzK9eUK\2M9?@" 5):6< aM#=KygKeԙd>S :! @}j4@^v[ #?_MlkPPݞ+ i[o_i8]Os.V2}T;b3Y3I~ rpvޭmb`XS %6$|{zIh0ک4Wr87=SG$N3w20@/hMDF;uR{]9s.=RO}"&:b  ,@RW:vƫjoj4'"vFlhgZ)*Xaf))b\w,NPg߷gP&3\ > ]3lR[JP,, Guo 2lY}GnnS_>7/{UQB_t (peH}GT xs%;쮑h0^>Y{G]S5s`wW!N#G7[9hNzc%I|75>{WcbjԾWtʪ%Z6HRyeWP*/{$ZCևAHMOVZXPR!5}G잀/xUk#/5ɋdz ԰2lEF6g+t˯?%~qి/3N;av!!b9]0ppk,9nӱUۜ"AX% 8}JS\賐ț)V_þPbN}Q)3٠k قWn\$ AY Z'ޏL²USz܎/ fyZ){PXg>l6 dm JsN<2q}挸blGkpH%J 4w @* a6ݮ nQjıR[O :~뚗uY# ;d|O3102m VHtmc晔y6-8F{{Xz2K >cu dF~P՞y/O#fve{^*;h>9km1&6d/d5d)*kJy$ 6S@d#ql_%}[RQhum-[A *wR3@gf 3O,%H!k^'ܚ-Q[QwIDEJo:N<15fjU/y @E2˓g#-4吊IqQAw Һ~U郀/CSw#<5& O[S 3P! N9{X_W.Ֆӳ53v Gwٓ V4$'`MFO4(4 MȬ l̈́SeŀT{T^|]i= F^v  C=pbC j-z1>-֢g#͌:-[Eux8L6A-Rqm;tZU"l@L~)Kmc{Z^c/tQOâ(2ڲ@eд-}CۺI@Vb%y@ ihK# C#/v=v(tGPp;,\wpjL&n^@U:e)eeJ_S p~K}Al̹H8x0}<$@ЮֆXe~#W[c?;OhVvH0~ ]^Y0UƲF  I7 :Ak]MݏY<)s=t{ PO"|1 &3Hg^acM`Ml."I5WM6ʼn?94#?EDdNn=[[|+'﹠&Ȁ_Ot }mvx:n:k!Hd &m/GNS;}ǺWYS$ A uPu?^~ BIk^hm@ b, xCkl+xA˯lks LhBC.W,laDQ%CLp^͒n%׮^IkĎzcيcUy 1)`]/F,SQ 8n.~7X g.jS@ @K&5%f#é(-G?,ʦ` b H& |A_ _ hTEC 7bk bmή@];;bԳjb@oʟ亪s̾O=,ͮY{hVh$˶dyvl0[J  )*l6**6bUI%7;ݞׯ{~~j^v{Ru)Ae06کUn,K(ԓO?-tSn@moS ^QXMy49Ngq^{߸;v;|7wMg_2+ xGw{,] h 2x<O~f\R0ڸEn>wLv񘛚8ݚ <kҨmX+ry0#;Z lȸmhCl]{vdڼ$?EغgWl^ +ϥZώh2"'t*ߕjN "*Pre7./rޣvjg ya8B ~+DוN!ǒ沋Ÿ`K8@VP!Ch Ty`PܳEU/!nx?tVT>@$JN0 |77T%d>f%eܶ5%o$k`<VRgkPo$],WDڂ`i41 VwX,'XdcpšʦbL|ne?B, [֯xAW|7_q%ݥ@RD߫s-oYV k/-=^Y.\mtXqıApTw23bq؆v^x_Q ۯ[ d ƍY@˩>*^E{<ߝC4N, @^x]>E@~O~_]?7M">w[K+?$/?מ~s2A<<0c|8ҡDmkYUqn咩Id & (8(01)79<ޖ' &dN7{Tm*$G^4F_z֯F4!RPD`XZݥƘZ0NK|e-jhe5сo_ZC2x??] p19%P1fdI^Iٱ$K } |>l\oDAYVؘ"+8rq\5B`PfTc@ K{*jlLuD*Ч=S r&_bVFF }35YHkaMۿx?ߒ GW1!ϒK@?;|;oUI0+aXXцr<._0C+{AKOK 96833D]ꠋ*Yʇ4[GZ]Е8/LC/"=o}_IſN;ZH%WUzs+`a {*= -0xvP`)[]<%+>akN`2f \U> vqȖPVVxK**%(b@1/q.!o@.j-JiM#g.I}v=AHY"QoWbV)p1T%F~nUH㑾 pxy!>v[z~(o'_3gkzZCĨgϦ"lT=JhxjeJe@]S@_\"/A?EF@9j1F̀^%n-V? n05Bj5WF?fEYٵ>qKqiaXۚ# D6.UUB6g]N6xPiV@LgKJhX#I h朇,FRAZ{O?Ln]1^H1.<c40᧋! -+P<^؂X)@G]^/}3oh\шC([# @%/:6ʭDl~줞 {~ПzJ< tY$ss=x ƥRom*/a0nzBZ%xU֌mY5$EυN(4oe+U Y0 17s@K4#+W1#]}n( @U}#'*AHGoCOJ'֮,cNR g7 rCH+2O庆"'Bj HE9m@}ݷ6@ @k-1ǜnYn᬴O|)q[L'D76^T̄_1Tö"7)aX9lzd߈5^RE6vƹ(FzZ]+ώˍK̩fNrMGEŗ4F1tz;KƗ8/CR-oV<' s?#BaO$/k{S] \޻ x4} ^Ix ȓI}q5D%*Ǣ@ Mn>tUl.Kqte[9aܬv#atԍ+9bfז,]geŖ}׿E"{K*dRfnN*D6e"M'ET:Z&M>!ɲ)g>}AZAS /U$ grY,_sh᭴pT?5D=(HH{&F8};4eZsFȦr`p0% ڸ;sL5;E{6dI"P+ފؒmŻ]T+*PBp0^nRj ݕ+UU =X%n=yB~݃q?ەEM^WK:5mIFYH&%<ຍoTcnؚuxGQt#̤ faiIOy/h鉈37\8C$I:8T3ܫ39W~&=*WېU&.ݳ.ϯ֢$  ~!11$܇ɇA4xd;FnwmjLHé=Fv<6]G(/|2,:wWzt.h()tQ>@ #U#Nq꺸xm]Ş#VQ'rX*:{<%)--Qm_$uV^>E^]wNGң͐@ g8P@Jqp#(iH==o 7&H$@l\[g. PE0< = TȰ2nģ,y8%XWc 9z"^GJζKcup:!ծWUc^xja5!l0r4P Y,GEj4u2$.Z,Hڴ$r?K+j&~Pna͆ D nҨwЯ^ s9r"kb7 Y-Q`\HD]KLk#&d\jND; dfK_ Γ|  Iӑfd x̓ BEN֠8{X:-)64w,C-%UNF BSR2[,`d<\G8ժ>W8sLpVXݚV(͈2˨ֽPe}ZtX J%q"LPHacLLܮ15kM;w,)+by@ٛ.rA]a $e6I;LtMCܩꉅ n0Gu'00BZC+$ .1 YH؃ >,KkS_@if!ܝJd n}? |}LIR7& /hFn4| c/ps1iO1*ڂ-hLP]~Ҝ5G$f[LLBS$MB@3Upݰ2 g $[WiS/M+ LLVMsRQ!Tq1Zskm3M$]7=Hb @~-wELiF=cu(H?&G* b;L6H JqEqf("P1&L@ԭ9 A*pKly+?4 śֶx;^Tn.7"5F;Li-7tV/.7O0oLOyxvדgPfiaEC&AkwJm@";VsO7J"0H r2Zӝ$}ngYu8 # @f:ҐuOUyB'g3Dr>棿+mmbP@LLyDZhD7z'R[/oͭʍ ii^H!xܐ#^@fU@& &ЁQ!vLX>0`0`d81A`ʘ8-~1O'&\k' d08(V n Qc+ BR+$ě1`aKćn$'D@#,% bg *8N& o /$ql( Kjb><&U7PX:/wN8$B ^BT`Ts ?8 XoHY;P"0>[0!o˻2L-϶km~x'8/0$pcIJt<0`L,h&0u2ȂO!DA"`X' [vdfaHzl:x "_2 '=}M>DEkaycíY(LU`魌#GQ[7thK tӫ֮ ^\`9 ߺ7$PZVz_dq} + sA1++ МƟ #7 @1 @~ $ ESIdzcubtC:Őcnq) LL9L:7Q4z\l= }D'1`0`䴁mf &<ecy 2֏<00Yd`ȃbcsSIc^οFJe0`0`d)wxLr?&L8h& yZ䛡͞Z& 0 F!)I ##`04hl$g 5& #;KQ q!P&n쫶N @A×pܠd5,c0@"EkDZjJXD#)2RoF=uo-%؝۠l=P8Z!!oؾ"'`0E pN mޡPޭ@k `ǭɞ E $[ E#/+2ѪN <&BT'eamdciN7^iSuU5qj܃5n>5 F7ɮZQRc&y<}#58 @ܘ9~Ghb |^A('|?AW(.?@, _QsXdu@fTw6hu[+ݛ \pWZy(~G\+<b F!gQb8⮨=,jd:mhh ]̮D"~ ϑ|IMu}#^fVwdy\F\T?sƋK5C(%(>s xF]?;8\tQ(v[ T fai()30 *5U2qE~->"*"Qzy06DW" @0>JL+kG}UB3?>k@6Q&:gGlļ9<5FsU~(#(K gJኔ8=/Qs?Zk%IENDB`tetzle-2.1.5+dfsg1/icons/hicolor/24x24/0000755000175000017500000000000013522554645017564 5ustar jonathanjonathantetzle-2.1.5+dfsg1/icons/hicolor/24x24/apps/0000755000175000017500000000000013522554645020527 5ustar jonathanjonathantetzle-2.1.5+dfsg1/icons/hicolor/24x24/apps/tetzle.png0000644000175000017500000000227513522554645022552 0ustar jonathanjonathanPNG  IHDRw= pHYs B(xtIME  U?ȐbKGDJIDATKo\g9\=I} nH`P- @ذ@Bl@5Uڤ%N:$؞3>s?H@a $>v,N*$$G?{߹%΀y8!۝qVNBb $Ό13ΊB9ΊXh D4?[?SmD`. df !9C7ۻS;*j$xXA7f0~iIpQ,NBhhK$8XI8%ƧcTMO|Ly ax30D Kq ~D2h1pLε|xsiヌXRDU5T$2cq 㛶7E~\E ~ggx Y_cIyIwew#nGtʳc{['wnryj؟ y6>.ټ :U.LG_܀dniJHu O*Ĺ󒐃8A nj%nE2$$!DhĒ|4aQBSa'ԁhph^9QU39MeX8!6 gMMnIENDB`tetzle-2.1.5+dfsg1/icons/hicolor/256x256/0000755000175000017500000000000013522554645017742 5ustar jonathanjonathantetzle-2.1.5+dfsg1/icons/hicolor/256x256/apps/0000755000175000017500000000000013522554645020705 5ustar jonathanjonathantetzle-2.1.5+dfsg1/icons/hicolor/256x256/apps/tetzle.png0000644000175000017500000006575113522554645022740 0ustar jonathanjonathanPNG  IHDR\rf pHYs B(xtIME  bKGDkvIDATxxVU6s8H= $B JBB`G7((ػ i Qmf89纾~^]{{%H}] $oe{=~g-}3h|5 Ǘ.κQqGҵ[Œ5E O̿n7~5x-ރ3YL|6߅wp.8'sƹAH/B-Ҙ[8)V?I|_<"6Ҹ& mu'v/`׽o|-oVw;8 sĹq\~4%ӿķo~|7~>q㧿qcO8QMs'ϵ=a?_;H^qX׎k?}/-}|g?,xxۿÿ0!<>Ϡs|ӿmcr ܛHV xbC?5Mi?;?0Ae C1 y8”a 0k@uP11 D 0 B1X`#\FJB @K A4PVk0X AX$h"yŠ.d Bb,`4@ `LZ :@ib A8 00` ]x!D2` ݇Ѐ$@ 8|-ЅX !ZAn@>fjGhJj%Ggb ̿nnOn 0.@l0 0AXq& i: (v@ *p S 0@1\ d)r% A\l{FFr dkkAb4@ǗxOV+ gEiԋso7[_m"xT\i ݀%fa=]|5fŴ57z§gT.0?xr4Z(kƲy|m߿oAxnX*UYtƉ9yzAh<{170,//k/ugi jlm{wk7^)f--Eu|#MT$`(敉Evq7k#c}T_!&mO=0F5 jx~ϻB $l`ņm?\;H.lWY,*gS*H +WH̘,gOeDic8w̬k-g>(:|GOEa㍎z4Dp8\|bl^hGY4."d>0yT#0KLkMcuwSyp|j9qQilV̞d[gΆf~=Vht>8rD,[X ".xtCC ٿ&Ə#LjiE4.`icjYb0<&;>EK>C>sҕ9JL4o):a4 sW.%׌l]/@`l; oo|+C>҇Pu 7 .%_NC;qjǓDοqO{vq]~IE$ѱ=it埝w=E"etvFO./AD(d&W!AF\T$Ơ3Q(CvЀ]Њ єў7{^|> wns9\q8w\@1?]+_Y Q0m/},n}9"=sHl|GM e?#.)q-6=*VP0xF\q{^!Xkbû.|'s9ݱSq+G=!6V<;3cq{DFQ=*A78now}W1k~[O}|$O??_BD?xMs?nHǓ 8 -0P< BCK"PQPaȍZ!#1ڒ?O9Ͼ'N|7ĻYQ:/߉me`l^>! A XgQR bˣ)pUl{oe&O-b_k)z5ȳ3;YYoX:A\smCO%V_?\,ޢ6e|W7~7qw}>`ﵟQwOß\&=آ*-in}~Nwc>'][n7߹J\|  P5 D{ߊ;w}Y6y|vZJSGy=N|G9~|d)`oy g)F}I7S`Xqמ^(隥;4_N=b&ķkn7!pJT_0`peF62?<J@Mܠ9DݼtQZ?V3c0ײ7p1 Бɞ_?Z@s{un78\=Ro{&=yAˮ XR VAIPZ%s.d =kI;=4TEM[hݴFr*S6Wk(Jgt6|bQ^5ȂMvE&B^Z47T{R2ŏH ]O*#+ysċ Aցb%dsʽ*n|҂'\(##{aK_01&!a^~ؽ~}c.`GSB(!0oi* X#2z]Yd*uuaBT ^UN (qn$W_[ŸQ&f A2o\ϿC@Yd_~A`bh DҠ.<}6ShY bg)KȞπe]xv&dHM}^%F -.ORۿ#* TAp!NYi ,vč&^z֚9]>s"Y4orhL!y弸a%,&97fGQDݳnq=-x1wM9?M90679[9'u@{9ܦN 1UL(XI&Q?~@'1ajbcC o$}XA%>uKgr5 {6Lg=&'^ ۓ-!]EAEbjg҉%#PނZUj eYcsiэx/oAr:m~GaJ)Tdi:pJ-F$(V~V <}o 5'YPeωmZcrqA܇ y$,׬WGj*[a@Dt7I }Y(x!\pU׉Uv2ez98iu#ڽeh.=`XWJ$ zU:P@3'8 ӗ1Њ;׬a=(vEX",H/o/AIZSZvsRIm6X3 ԕ8M[vU eU"<c X@e;~yS|!9V(T*o@+~kK|'AzIӗwe7`~h9%@ .xRr 59[@9j׳h *˜4ݚp پAzZ%mb5MA`JP392=X8`e=FȽ5N [0qW>*w&z= J@+3ʹW1XL_2KeHqo6yi.L`TZXc( 8RfV'~{@PKhGuԿHu ,RV6*.j~ y=ۚx Ptauz+Xx{&+@41-@o*S{N=PSw/~XN\wz_ +H.^M /``yHH`#HPl┡#D>`7]˚_`ْ :8=ҧ,&50jNG#زnƄ gi 4uF} 2pƛ?eQ9;SdW.b+Q c )*M.7b*S?a}X p_&sߦ+ gg7y_1t`T x72:`BV SXc<02{8Ht*Cm^Vi^b W'5+Af'%ҬjSI!};%GalV N1}A S$!ب quwxٸ,K`MӴȦ/ iF% JB?@Ej._Fs\p饶k}*˼1=-yuq\Bsی dƢ. TԞ},6!`7. θ@?LO Μ:2Aoah2&>uwbco۲ŪD9  [߽eޡԬW0m+ܳ[ʻ:j9~.RAgF-;_ЇO%mj35>;$e$)Ni1K\ adU`YAuY,C"!|Vzʂ Wq0\wz w?<󨸞Yb*P{`$1g͓~SqE e!Rb+P7  Z'iKhf酥 ?ū>^_x,*m~f S&KU.-;Xu.*`Um3/0?}q.,`' lf,2.' |lU!*ǵͧEk(mh~£󃅢4c+#ُm =::Ekw( )03,+:r*yC(T dbίN2 * FL '0"I?D5[Oʭ+BZ5#4*[zG\,\DYU-+Ь}惈P"Gɯ,$hpH,͟ [ ),O\Arx^ S,rײ W>\cKTFeuX%w8*ŠPς5Bg0S>Gs._ڐMQ:Z+9rFK nv17Y4_S1 ,@qO6fW\ɺnYq(֣G2 i8݈VYh]NAlr?l7$e(oYȺg0k/@q$C:/9Tn(IDN.Zxy*Ûl*줚~wpsOAoY` p(W;Q,``9"8 4)o (')rcS"YZ;7mN\p\Q6û4H2<~A:/L}B~tb4QY5s" T*7[wtx !+W=Z0!{OHC psQL.);2.as QlZRݪp{#Q EhZXe SyUDB"sx)m,Vm~%Q9M _CJ<Wd:ԽuC^VVZ s0:);1YV5VNH]8N6UV;Uy<&%wp&o>pZK&hJ#pl- ՐFWo8 JeTC-J]zu.m {A&s# ;ɠ .m;SmPq h($M!蹕}Ֆ|",>rĵ7%U . k)m6U DZ.I@Okx=V{Å;RnW5`n")-/^']0ˣ0܂!6Qvfa"Y¯I# ;: noM; ]Ȼba!H __trݗlPF_>oNYr23ah;"lզ/p+wοL]e'οg+,五;9vwRDߋ9+]̘9܌ vk:ԑNN17f JSO;`_(?rA}xe-48ёioIGN\hֻ #4 n0,&9^J@vZz \-nܴZ-HZ_9z38'qB| A3[U &Hy8]w6S dpPɵsŸLpYz[@" `?ǀaݼ[ę c"S5]_f^RLxϯűt%B@1(۵_ _Ta(-H.>v `w#HpSN &kc1 `- j^YYPeiI%s]bzͫ% p/|S2KX]3z{x<п.^:SڒXo5朩E۰>"~X pwՂSGScm\ƥvj}\u C Ar/)鮑Q)U} =VzzFA~Ngz_!H=T4jHKVP!&jeR t0}1 82r2!Xηb elVVQ7bcv^|*dXuJ1B*E6uL2٪QF .-Zkq8@U.>!rMHD=x+lLPcD p܂- W-慧mc7. IY8Xf@iB@B}x fxB6>I‰]I}$ ~AУ3rE"n]5cNz%լ5N -\sZTe^ Ā^tzhw ޻Fqe\+J 6E9PRq5l%p9t]šQp=BBJ6>[~i0.kSWEZVjdjY J3zTY;4e(柗(&ņk2xV}G{mG Tp^:Z =YxU}'R8 FBapё̅CH6O;(}@tLHD?j/ 0$Xp+/'[ [l&!{q$ZH9".wg2tمldAR HuD:!>u,*t0|W>0eUY(5d''Lp0xJ9 צ \~ NYRpes紐 Րy\ MՐ.2F *J37 @eJ =R3ImMx8C݃ϼ@E J~ ?"|5.6"V8E(MsnYrjCl*W|xʷ; @ât^?!},;UZ,].jFeՀKN*  0&[4jH/PڐAT 9g u}y ys(M#[pv\̅9Mu(. x9ڬd <&.[04^"RIAw:)%;&!M>l7+_=JG{<vɑ/x @ Ngsb ]K=9&A`X*6Pf`lQq^. "nU`)u夃DjfjL:^,. Jme>ZC|16 pS-PUx^(}ڙ5p@' .f=Ω`RMB:'34*Q#ɗ<=!AY jq?h ? h5Hǻ5,x- OdvO7֓J;(ڹ`"/ U5w< Q*[NߏJwUu"| P1-f]1~VTrV:vl8 >^V ƝRN*^.<2tD ;ZRΛPկ"IPM"%L[i"L|2z>׃4B@?fQFҧnp)ɷ@5|t s.8K!xY.C%qTԻq'K&P1q8מ3rlOXaǘz^U7GO7Hj\:WŏI  Ɓ Cɫ 9""IZ~ 6r:~"A kϫ$dU U_ -QВ<0*eWVI&lˍ5I4bnPkv=Nhx@HEP`ZSdUFb E.xdUϯ`2""FS), yqd $8RP:Emn+>/xESoWv`B Nd*/ -R&R(/4!+@A~& ' *B [4xF[ K;C5T~[rⓩon@ XI꼕,2:\p<!w5{"M<1Ɣ ogu3r%ɎCN"PQ< c.D O~ā='ĸ&8gup0\CsxILJ8bĴcwv `>*-a/Mb? w6Y HA^%'B\br<#iWMJɩc;ͯHrkSz =;3ٓH.9d䒯G1Bd5VMՠRU]M\{"qF1 Z.e;^l<~юH^{_܎Mt}1/Sҩq'ٿk:=$q-g;GF:#%W@a[τDT9zu99Ú~_a^wp.|Ns9{Dt8_A$ >- YD KWGT5ȼiO * NjR7/G,"痈e++Ws.%z1gP̕⬋yfeEJQ?B6"QU[ *릊Tg9ˊً+Oʧgd$jk!/NscFI7R[Cl=>D35@erp-*qX  ś^cSE݃߳)ݯƞ;޷(0k=D>j&sM߳{wv5c;1g: !,nL[a}Z1H*sɣDvX[0^L)NSKIY"[T)<111O3vgl| ߉9\pN87#s5Z|=;\K1S<422Pm'n'u9s|qc:؞P4igg[BH2Ҍ:yKĶoB }ܷm7 Aw1QԸa7p(ugDiW5ܹ=pYi5Gtn~+%neQ}nv7o?NSFйv\As94{N;G{x 7w;Eº oASY/ܷ8GPC'`ٲ^ú:kSaW a\q3J'ESJl.ő[NZ.^Ͽ.WE{|oc9$rlF;!eU#{KϟυY܊ڛ!1ֵ<.f ߜw]/_|6wqC };@#- SA:&91s=WWs{#OHӆY2fOT_@yL(FiL1"+,w=.yy#y.d礋{Yb=fYO=VL*l{v`W`*5`Pk#<7 sl8 rS,<$͂@TMgH$AcrVb[`Բ@vV䪩p߿~ *E "A)t}m &,` 7h?X ,"bҳ)t!|Fj*bWr^r-%~.;R@a@V.t,#{W٩Brs&諁mzlJU}ZQu4+hoXv(aEs,Bs`M. 2 af(8lhHʡz0am"7m иn@YP |$58VHE櫚Dja@1>H\hn \=:U d{^N-dZ+LFje!2 {} xt"(ݍ%v{ RJsd]4;֨ J#]R }(e˚M*c>qM F)E L<9ש+ ;\BYqA2-\b(ܤ\ ~4r][9 c$ =jd8 #_d8$ka8rp);ŵ<!D;n#R\Rpir툴gZ/ͳAczk azj] `X 4uHtU Q ۡ^Kа =$p9ԸV #U,,t`4)1V[lIspKўb,SkR@'=3kGGkچw@pdGg\},-r{Q7 ]P$z0"#Xv0xP[CLv_/pT*8.~9g;2*PA58s~.aO%/ŜeuzBʕ{R] g'{,ctjKS aw1]N W>.)Ih/%0mɒLj]` A, =&3EnḨ+5*ƭ4{gxP /m*Fo-Ľrm3Pe˜G߇ `/_,8F X0l'I|4,\\⌅6p'w @U$NIkdi@˅3\A#ꊤ,[|~ R(7T/ ʁ7aGx DjɮzNzi6_ (Hq/0a%'l,M w+U0Mxx#MSoےe[K !fLsϮ W5YHRBW;x~D4{ҹYp ͽq Eâ, xw֛(MʊsA26{0}{g]ǜm?گD[[d&<5p B}X^MGUmyk13(%yȵ+a F5&b(EZ,Z $9,n@4jv. .$k03HCtՇrW |Qˊ ;Ym*C13dmw| -40q JL( '_ % 8AT֓JN\tܛ-1Gg"~v>fDJt"AHtrxD-T7$4x}Y0\~-߼x4',{nLvE;\{.T%YdYj^%օ0@{d!Gj~ƬXMMAeRo.q߉˷|w-GGJRSa$MEIm bG\7pEZ&hty͵~-N>]:! 8Hڐ^<]9Ŝm.Q;= ]' U*" ȉ{.tUݖ]`u* ,.N `gg@t?fд 0ZkN- RJU✍O^$k r7W&xʊK?HHCsUtNU]B/TKPYa|`U9{ɍo1zV9q}D .ڡJ :dFGd6v*kW'IL¢@_%R9-_3+vѶgKO"P.j-?{(]̵19UV+wa PK_X:ki-pV+XZCxg[DgTlbݍׄebԒʸ\SRf61!E>'|7&K~U 66&Etr?pbOڨQ bypKKz\쥢V7?C_EcJDgr`Ru"߰RHN(H KNP*"4>ӑ# ,3N_TLwd+m4nAkӤLrYMu(`KnLIq;Fu}M0J9iU^!]W2YW4Un$s"]* ~fFk\=_&E '08 Bd7G$>ABbvA^ɋ_Mt%jo|TrN97ePE YєQ@dXghy"5Aƽ5z{u Ϊ6Y3e)?8˻yz )UZ"kuCH[S؉ԑM橉RF '{V/BP-BXe33-PqN7gh[N4'GXMi1jRbW_g7B4{m>.:.@W)~Zpu]x^.^h8/?p*":}E9|g49"-" d0FsANF!Yzӣ=u(P=ʵGDFpIHYyǯg-Ua{f"x* F(V5`Ac@` Ho.[+P}FZwnO>Vs%T/I ?6)g$=Jr`FNNhkIfkk p4"pV6ծ? IC.9d{lњ9@ C..`f$GDx6* |jY$ fnRe6=RI#MTِc/.κr}]hU-kR$$ h8:5vH{뺄'pF0GW"kj": -"՜oj\ 8d*-RP()\Y/RFvS'7WҲ4UXVgb{_u`0{_fZrrW@'kl[AFΫ꺱蚳ZdG@ьNKWn0{Uoڹt0EP$}V5pL7:)[ c'k>|fę+fqg,7w/ GawBf] b ],Y^CMTW@sBA`hA@nQ{{6(%b,q&XO:8NҰ359{W'!R쌣\ܵ)z ˣ+'Tj]uЍtMhb)& p@mX*;)(8H"mL.4a&/%ڍGtZM$j5En LhE`7=S>UUdۂ G[xɭPjqAk"h 1P5&GF) XT14TqO^oLLY^Vd1`x݀hvRߝ[%[Rު@ދ9zbo2 +*^o5.VthA~,:80p gè@7((Z,*!i0`@ -뫖M)CNx8 Nw]yx,7vi4b(7pxߖ}֤>!T>rSKy/-lLm Pd a)CIۿf; \Cz%] WY0` p3R;Gsu_ kDD_~(tn׉[ 06L,&N\0z3[HfԔ@_AD1TS /YP'aF/Rc:^qOnp% ׮WѢ f4_ݪ5;PT0HJc'QWx7Ԁ|"zu:?5;_}ATL+;̿4؎]Tι Fx뀩?pxwh#JבFN BDD\ί#Ľֻu`[bv3_4G'S?mzt's~%N:A\Ԙ":w?=i0a NNދϰ?ޠst]KVum5Y҉έKSн7k}-]﹞{~AHC#?S]Av)Ĺ˗S:qR]T7M9i4(R ,?X'JLi| R~T6LG"aQLҵGltodL07|`3]R := dvvưmEOkp:+UJ" bQ01Q؉$?>KDfn~v,SO4]0F걋(eS$Sv2S$Su4t00 v'5J E }4n'Gnk Fqu{0q cC¶бFkA GAD9CzIENDB`tetzle-2.1.5+dfsg1/icons/hicolor/128x128/0000755000175000017500000000000013522554645017736 5ustar jonathanjonathantetzle-2.1.5+dfsg1/icons/hicolor/128x128/apps/0000755000175000017500000000000013522554645020701 5ustar jonathanjonathantetzle-2.1.5+dfsg1/icons/hicolor/128x128/apps/tetzle.png0000644000175000017500000002563413522554645022730 0ustar jonathanjonathanPNG  IHDR>a pHYs B(xtIME  p~bKGD+)IDATx]xUUFgtT {!~Soz%(vEE^PA@{(c9Λy߬>ܛ@Bx}Kr97>_/܍۴wоToN~W:m~/f۔S1swHwmu/C_n]w{p==V?1gl{v_O|JU<p  Oз@_@}rc<?<<?<<',<@_OEPE;=E}?)=|sz/i틿 +I !y61 }<|w?誇P~ wOvK ݼMqktW /u'蚵O+gY|5pU;ߡZ0 :t{t^osܹ{>}L't}F9r}w>gY|5p-\=.g;ݶf齯B}O>?C4>S෺}>on}"r?>.'=OluU_r N7W;ޠ r.N6}F?tNO8hߟfP9`zLwW_=&eK g*s%\Įs ({ Vz6@{ ahCD%> LB(B01TC(7t{@o#<@I$(F^ӛWZ=W@vq@<B}\ '<s=o =%aXSyn`;d2{xt/dQd2'T;xSاt>fsoOLo+ָwHKynm믠Ѵ˨e"innOwce5O%<Ka,Z3VG??{^"*nH6ʧQj]KUji{y~"SM ΁'z޸l5T5_H0g8xlNKn iYɼ2ZVHK#ia06΅Sʎ]vU#٪#rf]Vk{uxF9}>y^@#C| wKhd SI x ޕk+cSxGhr;[Hm۟-=vSn'>|HVݹ5Z5s=oнC}|5?z<9=W r^FfS#;tX+}a⟭;O-wЪ6q>7uq>k9'ۜ38o_/Ёc{~ h>y9 ʦ{gyo{C c_h=@{y{om󏴍7-'|Kkp5|HK$g%ѴE2/-+/-6QZN 7,差-\w9-f&-vݽYwUc[^1eN8ۛCapNtr l=m+_ю7G4̳ьˊy,Kec-c>/GPT?y@-ݰᨐ}Ɩm&oHTHmxzI9/־u&,g xgUӄ@i%l/&D ucֱ144*1T1׵t{OgrqsL@o]CwCk>p$16n(Uͮ[ %fxVEQ ~ v doΧ%w?FqUάڹSh}OUl+~$VO董m:3oǞtR;OhOt,{8Ԍ1F˶GPYsҦT{L3K;eSRbZ!44"6z0R)*MQF0B`J- h*db1O͖zv=%ʧ2H9b+F`j{'PXq6e4,L&4;bxk+i/~*2㳘ٳq"ħV eq-jO T\ M5gҲ70Dyfe?rνM~-S}#)9'h  Z13Zv Ϟ64.˟|7D5,&P,l1sx(`9,ʘGaŋ-p05s ")(:sW_CwT&}5%sj5Ӣ_n&y S9QlG% lV>O5sjeՇ* 5[ -~b$hOqRr< rhWe)DYEuTԐ0t[̹&ZGfnp Y(.9epEtZA VhKPuډP'wP\0ZZMb`=WTsxnLm3\QZRhZKDxIu,?GyAxgD14xW(Oz|+g30'BsJ1U.ﶝX3#BJ+S:@&O`$#0,W:w 66 @02h%p,[m$U(v V :&'zo0u9-qjfRO/T0u XŴ#R BV&zοW':!;J\Ȅu]0m@x?[fi8 P%YdsFp  wn.V sv41Bmv 쒕g̯4' h)c6FOP|j/jWBMyTP;QBe|:u 1nhXX {,s1l;"e+Y.O`$ep7BzZ~U@ FtHPuST¿P&μ$P#PYdt$>ʦŰ))O8:'O Z6~_h)ؒ$Q:b< <1)gc]AְpLRN8l#gأʯgu^\2ޒ-D.qsDXBP]Dv+'.ma*xLDY B毘" 0$]X 8"֧q*} xCA6Hɤd*CltSE/-a ^gʴQeLLw˦dеk\#Zx%Hb)G:&YJ^X9+ /kNkZἪq3e<*xb@.'Es̻i{Dgrv L6o_K- Qʞ8+fNôC,i ⚰#ˀCr+'Ћ:DpA]:`LFxͼ9/O\D9Vȭ0hok}IwUJ1tXܪ,[,:"u4 ea'I[)4> (Cvy}XQL~>k/Xd"OWC:Uo)<8PaTyhL:Y֜RTⷭa"~7Jtz@#ȯVPlq-Xne,꒸5gNdBz&Q z|*S@f2pEqbVQUN/K>6]>,+O4Xi=u/ XH7mz_{߯d@8r+XŊ/ќؖ5ɵEahD0\B2 q8Ət¸RL@cgS0|BT0FIQWLɡ"M:i`HI'g`@ E+閭((dߡW*Ibn\ŗfQ5N&lyU׌V$ i|j>PP2&qbNX8q7{˦ 6#qx"y"Ws3ɦ,쪆lt-c"E >ab D {G (\vg$P; {k:f/*U2(|G@+;W}(xf#嗤 Bp(uCd9aDA1I*vE)m}df&a dQ`QNp9g r+ʅ;y<19a%ᚨ$j@`blN= ZT>'P: juܡf)ТqbSW=NYnXH%だ7t-nUvK@+V%ߵn{wЈᴓ] b $P ˜@Z~ OPT4DSҔܠ-̖٪VEGêrF$* mFX0*h^Ǧ A6p N 2g%@7p"{ ĮF By} l$|B:;h\$cH۝-[_:fwrgNלvmGFPN2 Eb qL+?=їq6^6K,% BD3cXpXFV8 HkPI`^\ Sx Һ+?˙rc7RLF+1-Yc*Y´<:DV@H ]+0.\uO$N.¸qq)B ~R'Vq2PPz4eMI!^N+\OkNw9,C,_B p|Qd3A,`΂DDnU|+%~!}d)DH~e$G=[ƒ$&1c%^JZQRܘ. kb@22/.>Ea+^bʌFUwˤAFHk7P>L=lHgBWT.JkMaNI>afg=H VRb=D[X?^|~&ɍ}ԪvJc}yr.tjYX.| 2YX!rz'B* wױ* -uD -'&.&G`*utJƃɄԂ d<Zv/y",H!,*殐$edءٹ=k{4Y 7VlkXILipqJ,Xu]M 4ɰI&X'2&+e$Z0Zr0bj#dVʬ#ɤ| GKEBkF, ̀x+Dfk W"ltnGq 1,x&+p53=:kچK9DI,;+t3N*8a# nFAXE 6U,?C 0|,=YH#df1A;VD"8Ci7;LV;V XXw ֑z1K2B@jHȿ.E1yzAN5yI)x*1LUR,i8#$V Ysřsc1B~`]}f+CG\hY4yJmH r7xa^7 Cg1/]bXM32m&ުgamCU5G'G0"X}\RȾIPġ UepC=R0H.̭0BL~EDBxD+\vٔlP?Lߓ[^\E . s9r{D.(dEQeZ1I#:!ݚ \wRTP.nc ׂڊrANw`׾21v^2qFJ/ӓ IjpB;&fvWâG/xgkڅiJ g /wgtvр~4mn9'%RG~ G\'?yƘ?gY|5p-?#JiMRYm$CQ1 G%2ĔP*SQj1s&,΂t._KxJN 33gM\3MM7q]ACX!3טg>ʚ:S<v~{#,k;vm]k[7ʵ ;is: GP쮽[|]{˚~%U<9 a~2\"ؑ=ƟF%Q\[pJERb(9=&eSZv4>;. kNɠT&:Pk3餃f,4,scc67N2˯L$t L[X$>щ8cl*(M}~q LW^?f˒>lWs( > jYО ~|&rgl߽A* BͺLP&Y;U>_N2̤m1=@a-^DP/~G"QCxoDha2^nLX>~s|N1.ԑd܄$8E0|wgk@eET7ˣ6J& 9U ձ=& X0P5V3։#<ع(±:ZP8mu,; M'8HUM͢)b=;9N  \֊!FE&$IFҫg8f:ӤweaD7I Tkwaրe!txxt4n_#/8~.aħހ~<͌#$3BIk!pHFD Xhfg ӛ_jUIX㲕~< L6@,BIeäȽɬH-ӊ8(ڃs qejKy0,V;̪>:P$Ze EUƘ23UƧq2Hu:!5 r^MҝLBG 5s0Wt]ĺBu\+x^us|ԂmCV}D} E]bg;C @Q@ Ӌ#LuR*C$㉃;Qq UT3MܻA*bb}̌U%D1#筶#GON?X x'<ta"{LX:E'BڱZA[ m+j&Rj$]-3%G ,@S뚌Ai#v 1 j)o Q{P"zXaX]>@~]&d1CD$s#l1P|7id=Ep©6&UF . k$68`8'Svm$CڨJ3wVV{+wYf7&>(.1]k%Y!2ś[|(ʅ?NY XdVaB39 HlB,$UԖkt6% qN'E 6͸_@i$:Lz@-@oùI6GDgBt:rErPOqVOk~OUs/!0TMzUY>p=p%:`q4W6fzkuqz֧XAxAdQ*ȵmm\?>Fu$L.'rNB7%T8 @ApN:`ǹT¥*ohuj§(V 7KlbSv6+V20N(QHųz^LY mV>B$ 2s!L8څ:Ec` K3OLP2A1v1ueU,QF/&S'3"t+ކ @t5Z ZUtv"1klIiIɩHBPsݏ{)$np&]um,\BU-A53Y3[.Sm\:^ HzaA1t 1#Ʋ})<=#:"K.NhkezgHݩLZs]^63~'԰3b;p)(,N[& oG;0HPb:3K E#;'3mX^~ M" :p}>HFwQq;ti7c@0c-20B#:WJU(IN0mV#SڨHA!':!FM6-t)]f?{tI޴*ʬ6:kĎtP="%ԑ?YёJUu<e{D5.1L>pz8@4gp3zUI{KkGw(9 ಬQ/ {d`\cX~$ "ܯWg x 0.pmܵWۿxϥ:7@" /݆^$ v1q{ q!>k >{{qR*h?V?wu.E| ,Qs.F.0_3ېm`G5HpyIENDB`tetzle-2.1.5+dfsg1/icons/hicolor/22x22/0000755000175000017500000000000013522554645017560 5ustar jonathanjonathantetzle-2.1.5+dfsg1/icons/hicolor/22x22/apps/0000755000175000017500000000000013522554645020523 5ustar jonathanjonathantetzle-2.1.5+dfsg1/icons/hicolor/22x22/apps/tetzle.png0000644000175000017500000000205213522554645022537 0ustar jonathanjonathanPNG  IHDRĴl;bKGD pHYs B(xtIME  0IDAT8˵ϋE?3&٤omP[ ڋeAzf= cބ ZZ"*T k&55a)>s'(o~o_ /6/ZZ1 chyqazJǘg"_v /oܗ7A! /ڑ՛"Ewo}_[[ J(دUqfө $SZoFnvO QOe=XdB5S>{) sƉ"ihM sDrejcit;|9_6Kq+KZ\Fl\_:^{=*diւ,βl}K8Ӝ{AҠErރWkē4"hьV'K-X! ,k'\l&[)_8 hQYʱ}YwЏ9rfZAh? :l9cװoǚ#x[h{o\wv4طMv 'ڬs?b,}r\37dƎcT0eX'X=o>tV3`~`%lz%+O~S&lKk4u.d9,_>Bs!4uXw=M6[O]GٟWw(n3w `vBEhiCX5uĶ_X4_hyn{a0Ѿ K5 K7Ē۰_[>޿F'̹R*H{vq&WU6sih:c5 f)v)2T(dv6rrC9|誟)SH$dT3baV7c4wC}^6$/¬f!Q˜*Fr&QXiAC*X i I gHP6+JCH$!(x$/`+!!Ӧ 4| B#X8p(*b`PN=[ա! =4/bVE(QRncQ9#ddW k(90DDPGPF *ԯ@EM>DR#R=ChL‰Yᶖ}(J:=j: "Se*,pUYas ]DqiD)\,;גDvfn%4$JA !)N"[{AT!%O΁G1/Q LN$I$c4}a5 G;f&f&Rup@}4h‘᎔\9AHn!"@Oz)7M&fC }njXbHw5eO#^8b$J0oS%f ̭ҹf vo(aG c;*2ՙdAB2hzOX!ߑ 9ɂIENDB`tetzle-2.1.5+dfsg1/icons/icon.qrc0000644000175000017500000000020313522554645016774 0ustar jonathanjonathan hicolor/256x256/apps/tetzle.png tetzle-2.1.5+dfsg1/icons/tetzle.ico0000644000175000017500000023636713522554645017366 0ustar jonathanjonathan h h  N   ~#00&400 %B@@(vh@@ (B~ 1|(        !! """"#$%&&'( ( (!*!*",#.%.%/&0&3(4*4*#2-5*5+7-&608.&70%71<0):4);4"=2*<5@4@4A4!A4A5 A5B6"B6,C:$E8F;2F7%H;+I;3H?/I?#K>6I@+L>*M?/LB0LB4LC'NA0MB.MC1MC-OA0PE+RD5SI7TF4VF5UJOZH?`TEbUWdPHi\Mk`^n[Yrbsr[`sa~cpupwy{|¡{|}}á|ħǫȭѮĮүήӰӱԱձղβععٺӹۼ޽ ġģŢʫ˫ϲ!  %'  + B #/ 4H F> 2L-**6?<(D&C$5.J89 = "R:A)T^sZG7;K03O1EPmtsg\]S,M@IXUQWo{uu`|_YNVie[ac`rnnfq~vxssnussfvwssnussfvxuupyyyjzwnlhwssbwssd}wwk(  #2-  "&*"! &60   &70*"#*!(!"&".%$! );4!"/LB0&"5+@4!',#.%4*B6( 1MC3("0MB#K>4*A55SI*<5):4):4,C:6I@3H?%714LC8.%0LB7-"B6@40PEF;2F7 "/I?"  5*(  EbU%H;*M?<0Hi\wԱ~c.MC&$E8+I;+RDA4 A5/&5UJ!A4'NAOZHĮձԱá|upWdP"=27TF+L>-OAsr[Mk`?`TYrbήۼղղyģ޽`sa4VF^n[}p{¡{yӱүү}Ţ βعԱԱүղԱԱ}˫ġġβعԱԱүղԱԱ}ʫġġβعղղӰٺٺٺǫϲʫʫӹعүѮħ׿عԱԱ|عԱԱ|ععȭo(0       !! ## $$ %%'&!' '"*)$+ *#,!-#-".#/$.)0'1&2(3)5*7("6)6-7/7,7.:,:+9/ 9.%81:0<,<.=-<3<2>0?1 ?0@2!?5A30=:B4"A7C5(B72@<E7 F7!F80E7&G7(H9$I;3H;.H=8G>J=4HA K>%K=+K;:I@&L>!M@;IE1M;'M?(N@=LB3O=)OA$PC*PA9MF4P>*QB;OH-SE.TF9SH)UH?SLJVCAVN2YK=XL>ZH>XR?\J=]TB^RI]VD_TE`UPbQAbXIfSSeTDe[JeYPe]Mi]^kWdlUKlbzqWOqgepc[rd^ufXuiqxaaxi{`}g~faifvrsmlsmsttpvqw~èʪ|ĪήάϮ֯ЯŮڲԲȱճִܴĵ׵ϸػڽ۾ܿ¢ÞťơƦɭ̰ͭγеֺ< AQ   0 W K- .!   _ p* @$" &/*3m r#' 'B,?' s^ r6\0DS~iZZTW_gzqTMbg9#f8k(4* e: x52XF dvtJs !)G8'{lHRa'o%V`UcC=Y7'y;PYOIw[[p^>N|hu+6L}E1=a]n~¹jǑüĽĽĻůǸǸǸǷ(0 0=8         !!#  2@;     8HB "## %""$*"0&:/"""# ;JE ""# 7GA 9.%"9.1(#""& /',#%!" ;MG !"" A]S-$7-!+#)B54+2'"''"5+'8/$9-<0,$ @XO-#-$!" B_T3)6,&!6,E7)   ''':-C66+#H`V(PA.%!" B^T>2'OA:/!F:%M@Jla?VM;KE;KE:ID:JE:LE=SKRe[J^T:ID5HA=OH0'*#' % =SK@33)-$*UG?3YJ"I;$L>-PB6+WuimĨֲ̭i=]T7+-$&M?2O@0L>,SE!E9B5*M@?37,IeZA4-K=+N@(K=3H:ЮձԱ׳s_uhReRq~e3N?2N@E^O-PA"A5#K=^kWIUFCbX:->1J=qyaeƣ԰ԱԱֳqθȩڴekU1E6;. B5,PC&PB@\Kéz`fxJlabxjttŴ ձճճشo̰ջYre3YK~hkÞtcpbyqYrrqpѯүϭϭձt~ŸŢġڴ׳ֳ׳ձղԱԱԱֳuͮĠġġƣۿӰԱԱԱϭճԱԱԱֳuϱàġġƣۿ԰ԱԱԱϭճԱԱԱֳuϱàġġƣۿӰԱԱԱүԱӰӰӰֲtΰŸààƢۿձճճղѯܿ¡ռΰϱϱѳȱۿҮϭϭص׿ۿ԰ԱԱ׳uۿ԰ԱԱֳtۿ԰ԱԱֳt۾ӯ԰԰ֲsɪ۾ۿۿŮ( @        !!# $$ %&%&&!(' '") * )")$+ ,!,#-",%.$.#-'/%.)0%0'1$1&0+2(4%3)4*4)5+6*6,7,7.$8+9/:0!:/<.;1=-=/<2<4>/>.?1.=3 ?5A3+@3"B2B4A9C52@<D6$D4E7 F7F:+E9G;"G91F8H<#H:)I97EBJ=$J<4I< K>%K=L@&L>!M@"NA(N@=JG#OB)OA=N>>MC9MF/P@%PD*QB+QC!RG6R@,RD@NK2SC-SEGQEBQHGS@8TBCRI#UJ4UE*VI?SLDRN5VF+WJESO;WE0WI6WG@VHFUK;UO2YK8YIRYBCXP9[K@[OF]H@\PB_MC_SI^WJ_XLbTGbVGa[HcWHb\RdSJfZFg]Qf^[hTRg_\iUMi]Hi_Ij`_kXokULmc]qYTpdiqZjr[arhMtkXuiSukTvlpw`szc^{o_|oe}n`ehgu{mnjnkz{lmtuqrsuz~çͭͫάϮįЯƯǰԲ۳ճִݵضڸ۹ڽ۾ܿ¢ťƦǧȤȨʪʮеҶL  Y h$9Ix h &6 x dJ N3 %0  2< -U,= - 7D ;;)! 6  6Ha  *"-K]kFVM 8@ZAb:E c 8`f-. P  I;IrF#Vy{)?+1 B$6  cRCzRIZōv5E TXA2/ pV]^~)۶K4(eXoms6OpIQ9[Koj^CGӿsrwN<]rg;8>ZӾۧO6Ej~VtFSXn`غӺ׳KWQ_»׺ǫ“\( @ 3@;              !$   8EA       3VH0%^{o^p[ڵϮԱֲڵgHg^C66,0'$OA=WG'I;6QB*QC+SE8-D7/RDB6G9:.Mi^#J< C64QB.OA$K=?3*@4{}ŨԱԱԱԱԱkSpf\hV/SEqmAWG4RB8SDNdT7YJ"C7;0!K=5SDiq]>M@Lj`;/9.<0!J<-WJmpkTʨԱԱԱԱԱԱkԱrڵkpZ"D7 "7- ?3/PA3WH5VGI;YgUϮFRDJi^A4G9*I<$RE%L?سjƥԱԱԱԱԱԱjǦԱձղ~cPXFiq[C6!H:F:?\NL@E_Mȣʬpob|pOtjwx}|ȦƥղֳֳִִղiҷããĤŦƦYti-WLitsŮǥٸpKbX5I0(<4=4?1A3!@6B4"B3C6D6 E7E9%D:%F6!F8+E9G;"G9(H8H<#I: K>*K;1K?EJ<!M@,LB-N>(N@#OB/P@5Q?+QC&RE7QF2SC-SEFOJ=RE8TB)THWS=.UF#UJWRC%VK6WG+WK1WIKTN! 2L  S._B! %' +C2!n%S!&A ;I; #'D'=B-DY" xx !;IFI@'4)>S4;DCTS;$ "$CUo]CI'aJ'6@$FY''IT4"*Q'' g`nSC:JJ;#'CPY,  *sW #(bH\odLEoo]u %%2UY 2dhp  Z SF))'Mt]U ;7mmaPB 9+)M;) H.'@FUT@;HYkktĆ'T(J-' GC3IFKQ2$F`)FK]oږ\$9OBrB dS@Gn'.Q]JS`[nY`{ֲi :])\CV`SCDJ^]$8^jJTSJd\\UڎSJ7CGS{sFxdYp8'StS;K`$QUTD}zKS;R0ܓR}`|Sx~j`'G2aFc{/ D3;LQUjr?ܕȍnfr';^w{p{DJ\5CFF)FQavՎܓڥC7'$-CTdt\SϥX6JJJFaUnܓܓײ25VJT;SyhS\Ę4.$%""""!%"" 0)2(-#"&-$""""# gys """"""""# cun7+$+"?37-!!.%*"6WH*!0)&!I;!""$-$.$!( 1()<3 21'9.p3(=2 H:9.)!""""# iy=/A4%*")!!"#")!@2%I< H:=1!""""""!/&+# .%%/&?2"K='UH#OA?2D6gwq1&%QDF82("""""# exq:.>10'C6#NA1'"""0&D6$K=9.%"""""""") +#.%-$"'5+"H:2'1&'lzu7TD*QC5XI I<&""""# g}t?1,#<0F8E7=1&/&2(?2G:!M?6+ "          !' $ 4)BWG3K=  &dqm0%2(7RD)!$!!""# exqB4-%(OA/YM.TG'F:#@5,WK*VI#OB5YOspon}hxrgwqftndqmeqmeqmeqmermanjlzj}vdqmernx}cpleqmeqmgtoK]Wgwr *",%,$.(.(+$)"&% csm'8,"K>#M@' 7-,TG&TG/XI-#Oc\ %-&.%*! $+"  L^W !    /LB*""!!  !!"# g{t+!!J=C63(3)2(%D79YK#OA"L>.%r=/:/(WI'VH$RDF9<1.$%;0 mz4(3)&F9)!"#$#""!=03)! """"""# sD66+#1'>2B5"K=$K<>2;/'sD6#M?&UH&UH6YLlt]TeQ2'"I:2(o"E74*&%&#0&&,#-$ @4?28, C7B6) "!""# mzE7"G97-/%C6+QCIaP,$3)C6 'E8$QCRgT-WJg޷۵uva&L=H`O0&n;/)E9!#$+# ?4*"2#B55VF1'&6+'"$ jx"H9MaQF`P'PBF8!J<,PC,N?6WH#M@ {*QBD^NԱpɪԱձ}sȫURAl|+ &&& =1'PB3)(L=?3)JtֲӰԱԱԱձղ۶{jRcvqI;E8:/@3"B5I&K=A4K_NE\LE8"J<;/*H;#6,|XjVέԱԱԱԱԱԱԱٵrWt)G8ZfUH_O+RCshN^M^iU\iUH:L[LD`R1VH,QB1(!B57,%REC62SEB^OalZ!6-z.$A4:.<0&C7!H:!K=-UHHaP>XH-;0ʱĦձԱԱԱԱԱԱԱٵuY_mWo3VHoֲ;SDVdStv&:/m?1B4B53)B5 G9%SF;ZMiа~lSҷӯԱԱԱԱԱԱԱԱٵsXʱɩҰ{Աسh?2:.#0&/&6-@4$I;,TF:ZK&L> I;PgTbkXέhEJ=l}:-E7F8!D7B5%QD!L?8XI˫ڶrXҶӯԱԱԱԱԱԱԱԱٵrXҶӯԱղԱֲq7-%8-ZfS)K=F8$J<=1H;<\N+TFH:)O@~œѰv[l~>0$H:C4/>0>6 @0@2A3"B2B4D6D8$C9E7 F7G;"H:H<3H;J=)J:$J<*I?0J?!L?&L>,L=KJ?#NBQM8)OA4P>+QC&QE5PD"SH=RE-TE8TB3TD(TH#UJ/UG9TH%VK+WJJSM5WG1WI%#- O " ;    ;L"F]E6  % J &@"U-$Wj ,U $ ), G$I<    <-B@<  &|-%BJ$7   &6?J+1/L"B? << )4.;aZ  lK  -HJUCFLC-JF;5UJ8) D@@ &  )BRFJ+ ) #aGB $H@BD Ix^J\k= FHqHJ5GZ`BiLWFBDGJ2)n\~+lJcPJRxwYaR1?-eC@^i|"<;G6<`&!"""""""""""" v} """"""""""""" myu """"",#""+"!""" ,%""!""""""!@3*!""''J=!"!"!""""""""" v} """"""""""""" myu """"!&SF0&"""""&@31*'"0'"""""""6+""" (H= *!.% =1!"""""""" w !""""""""""""" myu #"#!=1!J;$"""".%E7;SE&C9;/%$"""""!"#""! /)  H:&!&!2(""""""" y$""""""""""""" myuA4.%"'( $PB6+"""1'$)PB;XH  3,$) #N@ """"1'( *""!3)( !6." F8$"1' G9?3!"!!"" z ""%!!#""""""" w?26+%C6A4>2!"""%!2(PbR6+0)C5-#!I;&""""$1';0!" XdQqyd " !!2(;/@3 H:4)8-+"$*! 8,,#-$!J;.$B5*!""""""" v@2>1>2( !""""+"!"3):.5-=1&SF&SE""""""!!"" DYH1H<!"!6+ H9!I;"M?D7E7!J<C76+ H:D7 =0:/$PB I;<03)!""""""" uE6A3A4!$2() !""!"!3)C5'M@E7 I;4*"""""""""""*"(""!3)!&/&?2!J<&SG(WJ#M@@3=1C5 v~)!?2'UHF8C6!"""""""" s~1'G9A4+"C5?2$PC2(!!""?3D6$J<C6-#%""""""""""!-#,$">1*""'!5+H:4)7,3(  +# vB\K:WG(SF1UG&TGB5!""""""" q{E6<0":.#M@G9F8<1$,#! C6*!F8(TF%PC+""""""") !"""" *"$%""4)(E88PBAXI( !"""6, v}.$!I;!A4RdSE8!( """"""" v>1F82(;/ G9=0F8F8$.$A5=1!I; G9#OA!L?G9$,#)    &        D5*!  !!A5WdR8SD     .$v}#1(""D8'""""""""" o}xE7C6)"(PB/[N3_R/UH*J> 7/,TG.\O-ZM*WK K>>_V~v~yxu|v}v}v}v}v}v~s~zxyv}v}u|u}v}v}v}v}v}Pa[z ( ,$)",%/'1*1*/',%)#' %# o|x8,$7, H;%QE!J=" #!L?.UG&SF%SG8ZK #Qe^ # $,% % $ $      N]W $             8SI-$"!        !!" q{ ( &SE"L>"L?'%.%& G91WJ'UH'UG"J< 'F7/&,#&TG&TG$PB!J=G9B5""5*$ |;.6+B5>2$"""'""""" E7 H9-$"""""""""""" y>1A4F85*9-$F86+E7C\M>ZK H:E7F8 'F8D6!J='UH'UH'UH&UHG9-PB-H<;/%1'7YJzE7%%2L?;/!""$"""!"!5*5* ! %#"""""""" >1$OB-$!#A4=0A5#N@E7G9=1A41' ""M@B4$PB&UH'UH&UH?\Mls]Ȫ۵E]L2(E8"I;,#D64PA1( !&&!/&6+$,#<0!  A6D6A4<0"I;'N@>2%""!"""" {D6!J=A42'*!)! G9$NAUdS9YJ ,#?2A4 "!I; H:$SF?[L/WJ"SGiٴԱڵ[gVF8%K>D^O"6*9UF*I<"###&M>'.%G8>2B4-SD$L= "*!.% ~C5>ZKWdSOaQ#M?!I<F8"M>$OA=1;XHMbR,WJE7C]M$UHtxa׳Ա}ԱԱԱԱղٴֲشRM;}D6B5/&9- #F8%REE7C6E7G9C5;UGAcV I<-TFE7 G:?26+'M??[LE7$OB4)7,!I;A4%wC5RcSK`Q-VIE7F8&N@!J<F8F8,SF"J<%K>(N@ $ K=/UHԱԱԱԱԱԱԱԱԱԱֳi[Es} J=&NAG9=2F8@3+K>G9@]NNaPemZL_N?2%H;S^N,SF!I;$SF9[L?4 E7G9;]OG9 I;:/F8$RD4RC,#rC54XJ J=+PAE7B5VdSRcSF8F8 H:9-3(@\L*"$SF~}e׳ԱԱԱԱԱԱԱԱԱԱֳuaJ5*D\LWeTTdTH:0VItx{cvw`/J=kq\rv_ H:(M?T^MB`R,RE+VH&L>*!9.@37,'VID7A4.SE4XJN`P[fU-%>1=1F8<0>2>2;YI%K=G9 H:2WI&RD+M>"D76;/dzgԱԱԱԱԱԱԱԱԱԱԱԱֳ{fM M@[gVsu_3VG0UGsղ޷emY"F8OaP>2 H:E7AXIdo^[fTH`PB]N%PB;[L+QC/& H9F8.QCZeSqt^zrt_.%4*$B5;/:.<03)F8"K=&SE.WJhoZos^McQ%3)ձԱԱԱԱԱԱԱԱԱԱԱԱֳydLMaQ̬}6VIs׳Ա|UcS @34TD&$?2&H;6TF#J<8VH?ZJ;YJB^NKaQJ<F8F88YK[fUŨͭzzc3*yE6G9C5 H9*!=0E7E7&SF&TGE_Of۵ݷ}gN԰ԱԱԱԱԱԱԱԱԱԱԱԱֳydLؿ԰ԱֲŨֲԱԱq7, H:2(#/&0&+"1*5+ G9F8)RE&QDD_OH: G9+WJfajWЯzO`PKK=y;/A4F8F8D7<0A4$PC'UHE7?\N¦ԱֳydL԰ԱԱԱԱԱԱԱԱԱԱԱԱֳydL԰ԱԱԱԱԱԱ{9.( )!CXH6TED6E7%L>=1;/!J<>\N,TF#PBE7H;aoZ⿙׳ṷlTyE7;/F8F8#J=TdSF9"L>&TFH;@]M۵ԱֳydL԰ԱԱԱԱԱԱԱԱԱԱԱԱֳydL԰ԱԱԱԱԱԱҰswakyฎ2N@@3F8"H:"L>"K=$OB1XJ\fT$TH$RE%QDiĠġۺԱֳnUH:#J<5TEC5*TGO`PG9!L?H^Npt^hײ԰ֲxdK԰ԱԱԱԱԱԱԱԱԱԱԱԱֳydLӯ԰԰԰԰ӰӰӰֲ԰ӯݷ,L>2TE:.G9%RE:ZLB^O5WIxwa@[Mzzbuw`ɫŢġۺԱֳoVؿӰղֳִ׶ضظظض׶ֳִղֳydKԼԽԽվվֿֿԾ\|r)UGm⽖ڹݹžƣɧǦǥٷٶ|jSSf_,$ *$,%18-n^F{fMyeL{fMydLydLydLydLydLydLydLԱүϭͫ˩ȧƥƥȧ˩ͫϭүֳnV2WIqܾٻԵԷԷ׺ٻܾàšnVJaP[hV|{cӱֲֳֳֳֳֳֳֳֳֳֳֳԱԱԱԱԱԱԱԱԱԱԱԱԱֳnW?ZKصŢġġġġġġġġġġƣycζڴڵ׳ԱԱԱԱԱԱԱԱԱԱԱүղԱԱԱԱԱԱԱԱԱԱԱԱԱֳoWѺĦ࿛ġġġġġġġġġġġƣycз԰ԱԱԱԱԱԱԱԱԱԱԱԱԱϭֳԱԱԱԱԱԱԱԱԱԱԱԱԱֳoXġġġġġġġġġġġġƣycз԰ԱԱԱԱԱԱԱԱԱԱԱԱԱִͫԱԱԱԱԱԱԱԱԱԱԱԱԱֳoXàġġġġġġġġġġġġƣycз԰ԱԱԱԱԱԱԱԱԱԱԱԱԱ˩׶ԱԱԱԱԱԱԱԱԱԱԱԱԱֳoXàġġġġġġġġġġġġƣycз԰ԱԱԱԱԱԱԱԱԱԱԱԱԱȧضԱԱԱԱԱԱԱԱԱԱԱԱԱֳpXàġġġġġġġġġġġġƣycз԰ԱԱԱԱԱԱԱԱԱԱԱԱԱƥظԱԱԱԱԱԱԱԱԱԱԱԱԱֳpXàġġġġġġġġġġġġƣycз԰ԱԱԱԱԱԱԱԱԱԱԱԱԱƥظԱԱԱԱԱԱԱԱԱԱԱԱԱֳpYàġġġġġġġġġġġġƣycз԰ԱԱԱԱԱԱԱԱԱԱԱԱԱȧضԱԱԱԱԱԱԱԱԱԱԱԱԱֳpYàġġġġġġġġġġġġƣycз԰ԱԱԱԱԱԱԱԱԱԱԱԱԱ˩׶ԱԱԱԱԱԱԱԱԱԱԱԱԱֳpYàġġġġġġġġġġġġƣycз԰ԱԱԱԱԱԱԱԱԱԱԱԱԱִͫԱԱԱԱԱԱԱԱԱԱԱԱԱ׳pYàġġġġġġġġġġġġƣycз԰ԱԱԱԱԱԱԱԱԱԱԱԱԱϭֳԱԱԱԱԱԱԱԱԱԱԱԱԱֳpYàġġġġġġġġġġġġƣycз԰ԱԱԱԱԱԱԱԱԱԱԱԱԱүղԱԱԱԱԱԱԱԱԱԱԱԱԱֳpYàġġġġġġġġġġġġƣycз԰ԱԱԱԱԱԱԱԱԱԱԱԱԱԱӰ԰԰԰԰԰԰԰԰԰԰԰԰ӰֲoYŸààààààààààààƢxbзӰղֳִ׶ضظظض׶ֳִղղӻҺҺӻӻӼӼԼԽԽսվվտзӰүϭͫ˩ȧƥƥȧ˩ͫϭ׶߾nWз԰ԱԱԱԱԱԱԱԱԱԱݼŢǣwbз԰ԱԱԱԱԱԱԱԱԱԱղضܺs]з԰ԱԱԱԱԱԱԱԱԱԱԱԱֳnVз԰ԱԱԱԱԱԱԱԱԱԱԱԱֳnVз԰ԱԱԱԱԱԱԱԱԱԱԱԱֳnVз԰ԱԱԱԱԱԱԱԱԱԱԱԱֳnVз԰ԱԱԱԱԱԱԱԱԱԱԱԱֳnVз԰ԱԱԱԱԱԱԱԱԱԱԱԱֳnVз԰ԱԱԱԱԱԱԱԱԱԱԱԱֳnVз԰ԱԱԱԱԱԱԱԱԱԱԱԱֳnVз԰ԱԱԱԱԱԱԱԱԱԱԱԱֳnVз԰ԱԱԱԱԱԱԱԱԱԱԱԱֳnWз԰ԱԱԱԱԱԱԱԱԱԱԱԱٶr[зӯ԰԰԰԰԰԰԰԰԰԰԰ֳǣvaззззззззззззиPNG  IHDR\rf IDATxY$Izs8򪬪E n@HL2F3MO$4% B䒘.vA^s1}wuݕGzȫzEtߦ2####?x8xh SjT o6|kN6{)&QodwR)?7~>ը7zO]_ 5j<&(5{Jm/, Ԩc$1lDF10ư? /G5>0x(wS਋7s{qY!)6,/cj#F#k XcFW5F51`^k0z@J$R{!k9~-R!EWB*wL}_)uE @@^_dw_HiV$]k/dG8RH)CxURd4!O;\Z't c䛜41 Tw? `2!ޝC4[;eqO4?#w3v\L6Ba$,āGEXRDL C19'R@*W%~<8w8}?41sgw~̄}_co"\'Wd<w _y%<31Aub:BHKoK/A>6Rn[H0(Xp&^?B`0se<$ࡠ|ɢQ!cs1NDQ2둰H:wh<졅~n#¢ [SSk,4Zk@qa^L 5*,Xcl5+hk +. Pk5 +x&Xh`A.-Xo^\"P, r,0zQu6@ bԨX`PQ45V*@ YZ Xd+F XpPXt,0ۈըca*L#"jWaaL'DE 1Ul45XT& 95`Ak֨1ҁ&`W0* [QƣB ctMXhPƢc r5B !Vui" RINuX\H!15j !$`M'CBǮObz6!oo{waf3<}?@dt |EpK_ڭhof^DK!.jM@'k`!opҗݦ"G)˝)E[b{x~Xkƹ?W>B`Rl`#Xݛ\,J6>2#rV}V7 Yr4Bm@|6}W(}$xh,D$!$y6`ofH@*|]uޫMt9Cb!ywIە!@.(bZlY(}5"ǝw< {y1I顋EvA"3Tt˽$h^W<3/`͇$0]^?8_-h76htNRh&#k ( " 1xR5PRrUn߸#j!ػ:_aG9b?d5]j^Y$Ń8:av~|uqgOҝ+BCQ[o" s,C!+С0𐪁{o-K"N!FS`/F<__ӟݹϥ!qCVaR)BtS { &Yf[&>b,Xacfgݽ}{ohm&s !@KH۔eS5ya]l{׊C$[ KF.$gV , g;Y^ZRpbV5>`7R|叿?_~=gzB7AFGvZ1,`yYr}3 &O0&;OLTgtd'}` $%y` eVT-j,Ek+4(gBY*"%r[[4,6䥦(˩g7OZnl 8&}qJo cZ_Awm%EXXk3( @HeFBqu%l-߾N!p >C.Zz\|<7;[< [{n9! qLQLO?~C@9GVE޽Moq#% | &#NR6h]x""nV'NjP^fe޽wEʉs/&I˜[o!BJ| dEIZ Fy)%0 4ڧcuAq, ]Ҭ$MgI iuVDSt5hf(Kwďr(yx;(ÿs3OR,pDDQ},`eN0+  i&L {{;$-3Iv}$5)}! iZXS bw^9Ɛ%$ʯ<4o ryO~RDc`tIfDIFݠSiB=wxbixkF'(d6a3-wL%l=AuA]g.8CJRR$itF<k/~+XcB- ͥ5:'.r ۫Xs(Ÿ C2eս^Fؑ AF{A*k=?<4+bx !I4Z U Ip}Q'ews/?pUR]EzWڿY:$^Тcx].'ypFscTjeH%(In9:L9 71fbY ei 2ߗ{H'@9KdCs {<ŏB&p-#a<]M )|{ djvk(K~R P4IgtJ Pϰ&g0@*9"H呧w(M S鴉Q{,p;~w7S)yGV8<,EkCi e!RYlÀ$KgT/p01A奔^Czmj![Z'4a7yş4/V{±-pь8$w+цfs]I(x™AIR)7|¯ܘʉ)ܕ`Rx<[`L ֖H@H=^*gKd8!,ww"gS^wAYnc qRiX"T7..n0V +FpىF'hm,u|xl03恴U$䬃74IMQBrЈ ihm y\`%)dB~+\x/SEԃ}V |b$Igf>vQAx*^;{h6J6{<ոwh.6–蜤= B`LyĀXc flc,չLYV'hQ:`tkCTxqZC]i䜋~ZCza} +YV:w25yυ(Qj?<]M㒃71 6JI!|c{0eN m0 PZc@k,˧cGY9a @)R7}jpEтTj]0yFFF :u)STFBSwh袏)# \Ԇ8hxJ KyCDo5 ZAsc}v` J+mFqAy2?][oP] â!< H[dI{W_F*s/|'>l0%Ex3p?`zRUƇR}Sɳig}QŽiJyZ5/+…e,8uƭwq( MQb6iEB Yrx긠δf%Ir8b4rDuPnA~cbm,XB$)RZ?S昔hP`eB@Y ﭭtzW4'wj|0>y0*SMFk[eMOи'8sS~狎3"c g.^xfO)laa&r%̭lmv>Vc.'wgqR'Y9ǧZ`&Bj O.ssS* R%qR'! =.s `D8,₡-t#Rhx3!H_xA}WP^H%-]0ܼ[>]hFGX[M;Ug!~Fi<_q|?yi6!h~x2%5q\] QJRw3عIk,aB3 (JM^ZSjshJT78y8^ѳ7!$==blk݈;CjԹ6O}tM !`^3fb]?﫝5>B2ؽ< o+ leV{&D}[XG׻{VBY074+G$!jT܃U wei~a}BۯK}0ؽ :q>dsHy;F@4⒌x*[cŔ뗿ʹ>ڗ1R"VP]i$i\Silh}cnkj*Q憨ߛxԭ'NFJm Mn!(Ec< X4}4Zgؼ-οh2'Q)7)3֞^5Lɉs/w]qo~W謜gi{ۯ!璁3ͻJnew3f܃#Xʗsv\`cMH✶qx]m Pq(LAh?_E5.QDQA@[˟?eWٻ.W}]z%>3asyOy:W9n:%G E^b$%jX`y 5Yҋ[ rb:m,KCWߢ}^=YH5S^O*Ɠ%/5l\}ako3E͇?FRhzs,tO4X>$OK(OcN8y}IŌ hsu*8͍70-8gNH_Eʹ~'?Ksf] Z_T`Tit0$GgKҸt񻰡 EP%&,KMH:&I1P,͆Oη;̸ IsssaK)dt׿ A* B; Aã5$(hxcC@ 'C5R2`2N9kef;Җe%dTI#G*,>YK; IDAT#O_'O?l`z,'h(!-h)[wxdT5I6w^>xcɳm+ʻӄs `ɖ;ߵh??R~GwI&N~ߓx**m'M̎?,ARd"\ ccFĂk%6wT]EAmk3WY}sl\:'7==\}pU! =E{qg AAYߑqΡ*R<unƓMyN% 2:%Uuʐ 0p^POv|Iuch QkX @iVDWg7IRVlcb4a}RcI5ܻ)z53WfRFH]=(o k ?ʳS:bjEZ .GO67Yqi.Hgtx,H!)ˈWeEqv O~p,CpfAv,g ܭ(˿9RuUrPQ-ZӈT(nYқrhZTXt =/tc-ACq%%VI;:Z S1E 6f豼n=wVy.Qe#֖X;#FoJh^q{4Vi;UJh._W\{IG{^#XaBqp.$wۺp6?E('\-mQ^ o-j<3do`rs'iu|:sW|st.5(omd,ܪ_!^aht>Bg3Xkܲ~OpBi8(]޵yl\FltZT>7]e;a ^v._dw2$]Gæ'cۃ5ZYֲv'1&S&IftH3JkO1nG,0K3-Փ#C`9!B(.Eyv[yx3mʹ` Ⱞl֖fKgx)4?ub*mY9Y|c|MkR$l>ɛ_'6akS;~i\ zxL Af jVVag]xn%on|J-PuָJTҧ(XL_lz 3AJa/Gކ:fm ppVRy\{ƯSɸ26;w/f{g"/]@&{[ #);˿8aL&)%+kMVB:U5Θ4AEE:L:D2D{d.`kÈ2 ܭ몁 Bh?O3ێJ%7E̛_C" <*e lc!l(ޭBH[?ɉOLhH폌|E5ި67I^^/'Bra1 7(;W\!(ICp+ILXWf֖`dVEvmQEx_˿ p PBPxiy&a!%_J'͗Cr""brlTյxKm+**lTՇ'_~H}qw#fi9t7:r1I#OvHɋ#)#[p'i?^>ƤDQk-iTL Ϻ{.<'([dvo %Yz!,|_mVaH,u/ U=oEJEoo[A09?=>WTAZ݀k-Q`d489Βvġ GC~!(v Μ"}3r|S<4)ٸ5mvˣyFq'|o"t%FcF*c?)K(MH&'4ydU_Zm%hw]pm-=-IEWISU ]Z>hۧ yns~ tAc zwm9R5K_gZS.b!=nl6{?~Oۤ.{PdC<ɟ{'RMe|SOsٿՓOͦRugHӭ4$-X33ѦVjfS׈8gleVsd.{)w3'JÂ6}QSmI^ddIIo۩k:!i8 @c(wg%yzk ah5c)|<ώg'8p_ϐ'7ó2?%Ry$ <'N7fBMQ9Iّ,c{?*FYS~KLkz;{xR mƵ@A h-}dxVs [V1FG#4-gQ^r I ?P#_;z<kOp/tI_inCq6%k"4["R-aMN],s`i4O]I7bFyQ-!R$M DfsfI.{پ*14,V<NqҗٹVYt6l"%/,1$yvWTkM(iNi_# VONf͘ ͸ hufǙ3G;tY /tp!H;1©m\N;$ 1?CX"/;_wͥEQ{ Kn('+c(-IV>@tL0JTjQ'_\RIŦFZnMU' q\7~|,2sj90jK}$i9ޛA$7ǃA=I5wV<̈MA=$l?ǭ_:pj܌Ayb5l D`Z(3ݜJd+Ni9] PRO+؅%]u] 7i44n)@=6S$*msr{~F5RJG,I1H'e=Dh5BLNJ,$ =aUkzcNBV2w<4A1Nkɸ'qLBzH&/Y6B!YrM1<`[k+4Pקj 8}Ƈk_IsJmrMy&BML˜hpo ]yg[Dm\^ Y^Y]iWK;%r;AN{7)-I&ǘtoT8Yy{@ҐW6h!WO^ ssww_9v+Vʿ{xp\R"<:+!! nк{n&'Ԁ#^ߏ+A=MAF'H^x_ř$}Xv*th]o8"%ĸO`V3*J.(̤m'ε; woyqFmben(s]U21xv%LmwΪa,$-\'U~3tT`&SEM?-2x:֡`g> !!{,y{L|1G;c-ـ%Lkݺ[Rd%i\Vp?̽NmIⶏk|}[Q/T}rimٸG3;FyW4Tu|TG96n*pNowVq;v6bzZ[n_!(zZ[5"?z4pVY0/1ڄ.by?YI͝I$:^?go?czLU3w呝%ȓU^%@eAH#9Z6}'>_WH0֛_xh9\g,%7νu7b!Ar$\TnHR .CJr7yB>eiH4,(-F5AYI5pB!gzQaT'_k̘o'͖OVB0;Z9Qci3X pkg'g_%.ϙ~IR87"jM VEyB4+F?I,2pTY$w*"#o:C!i(4EAYl^\? ߙhk> Tl۷^#_g[\?kbo}~A)ϥNo^>ޕrKŶv~~9Ҍ%A՚-BVd| tVf): ~meˈSivU}x/fD]ȷHocTa>BB'YZ ˓yV>8PJjkWcl4w9ite\)6XVNey76Ώ_!%Y>"oU1" THk,Ր^F*݀"qb&Kqifvri+[|?tj^MvߞB*{T)_cqUx aowkc79yStמ? ߦZyu1`XvX.ȃ`ܓ]<_q|5Ei}<ڴo'IT0M49k-͖O&h<̶pi.mAߞzNv ,KSWB|݅ )H2B(Z87aAONc;(բѺHrzi\pZ7dIÎ{^ۭ{{6g  ED?@zp@&=@S H "u\Z3ݘnܭ3"c{xlUUYÿŖo9{>X&ͪOiQi(r$_ͬ PR/(Y.vS0HP}ٟ˳Zɱ󰹴FQ ƨ֊s%$EF*@$+S2(g>o0<5!Ktքq*$L_7q}zdy)8X-ZM~4;r% IDAT~gXN#Lg)t U[_EB0jOc6Zc YZM#.BSȜs8C%ڢ$L{5D^Hx vim-&af!+ )g#di ! FYe14>稥 P gc8 i20lO"ٯtU"0U-:Ag}_S `JTfz] V3Aw4Y,BA rXKnf0ۤP@Q"|,P$Dos)䕥`/^gnpӹ_1N%F,!+ BL EP0)8'x;#D@+R>.Z}$- ˯+gHGbWy.Qsʣ['aom{nEfF-O37Yo2E\"^h@&ͣw(mr"{6f/1܆S8'Hz 7r=H`&=axiұ >|(fF``xH{څSJ, -Ć:`M$ʑYZ O)m1vuVE䧎琒\I`->U5yz 7<KVeh5^%G垅"?GEeHMJ5"Sh5mLiJ,N nSUczH OOoHY``| Ջ4o`;0>L^P C)eۡ>Fu9qv)ǪccӳDtaEB!Tӄga:~N߂a!E$|D+[){H<;զ pe:<w. 6V%s(rp"uR0^Nf$!$6IE+^I+E4>E BЮg%jGiFAYKil׀[(,~p+,O /0a^(rw{p8~0\ R*')|qc4RK&ӢSoἏ RmSnTĵsЄ8z#1J]$3SJo&q8/-RsZlu($F򩼖е ob<$ 1:fjk˦_b)A=VT-AAT~4Rp:/u՗h?r{ Q"I ؎"7$!Gby{[H`0uK$*-~OPO9R-<pkgQj;^R5c1R 69P}F_W?hA| ^#lw)]w*ZVD rLXiq̅(U!8YsJCn'eZ|v`]3\Ey0-* i_' ~p} =RBY91|q c il,7*)1S95q5 o*EZ]g}"Bh4z9dp049& jRL z+od?Ks: Q ~0E8:hx%1cY^R9R̥٦qcxW(s~Q>3ޮ_H.>5iչnAOSd1 vk肔KM"/hBחx.>\sְP*:%RڜG;8g8lLwE9zr_ׇ7(Zujt_݇MDAa J԰nu٫:fצ(VFfW˟" !d^$:@<!iX0Z]ir`0"_Lѳ 'FK`-֋0plL1{mInpM^ægS[ɋ){> H,  AwkYv:J9:H1 Pɟ͎[VƨazTU".>ҔrN3+'N3(3`<͊Mݮ*F1[.\!jwG!b}^QaQ`6LVfuL1&Fxyvud6(B_RIE]V_7b{% $%) Y%: w2-J?#Dc|{.ʫe iiZUY,%N_Mս-\.C m`63@* AMLy *lju$qe]Uo:LP YOP 0(gt)|O8z1J$)Ӏem{ Xhb]L<<*ZY>]x`>ls$YY#0_ytU)ŒQL~&Ww۟vyn618 ߘ[Bb1ƆpAmpfy.e0uSpq(Cqj`|HI2%$$#OҸ@KMq $ j81&Sb8!IdJ`B̾gc(+iwUP ,><WBeLfn݀AՙK1Pj~` FĮәV [-m(Fu=#9gsΰsa$ʱ߀QA  C@>!UL/! l%*0F%E!z&뾙Gk g$$sa'Ve&v)D}\`s~ \q6'J)çDA,,)0m^Y| 9,dL8}ɯ~QZӺ0!nk0[.o4`Ǖ btu/hD} .Yt|kQg sUZDysrH(DAJRJ=jbVR0Ͳ8|ց7v\TA̵IN^LW):}^B \fc}l rqU S 0P_&Ä2oENf:*O>[MI `(G l5p~8]%B:g\&԰+3 '?pF/b'6Ml!pTf/# bNLY0y՝h~,9b3(-E jjJ&oWԷN]$*P _~Ϸ8&0G0^|9ISt(N2oLCd@$q"wz*x&|18.X)a\ziB1 ,ߕ] (ø$|A~7p͠Sp߃i Rz:,/$LO~S Ӭvv xvl&;d,QXQ@EK^"rˊen[~F/-<)|-G$vrPp]aowNNsLU{Z@9/w| c*-')7(x0c)he((A!%E,B"2%!Mz@U09aja9"4u)2(S@Y,??) Ri܂`aB,"YF2֠g_ FcX`Ԍ;?@INbԫns 3,OG~?g˛beS?V6j-kEKbc3=o-aZ~ͽUr'e`s8'Iq5 EM` ֿ]139 5`@`܀i(28MSH JH(}A I) )ɟR@IARIH!1䕾_e Y#!;Q4JXvBtyGJ,)L컆(~5`hKJK] &<|g A?1~?ϖ*(9aǿa{ } f|2 3VRg)ROr.kBIȢ/DM6l;.J>O.k,aL0.Ka<@>A\Zw4+lVgs^V[UAe߳){ůA(ܠr179Ǡ—x^,B v-RRsKMhuZ>IUӄ܀7=]eq %s$iQ1AoяHݪ84Uzg fTi!;:V\u#mq iuj^L,&ӛQ;F#jk÷a{ 凼D=43$\׺1R}-<_~K}uǑYVRg5i6+nR/sӯ3F2]Jh"uh:}0bDޠ0hwn;3dY`4 Bg X-jOAA6,/k[(!TD;RT5*[.*D$V$XX} I/1py# ;n̠851*!`Z_|^ P:CVecy ofk^& +snhw돦+w=DGaxX#\d~՟߲LGIY"v;KoL\Boã!YhaQ`TJaAG/U'<sSIY:"ea&(B(YX emC/#" .EU8Bbh0[.BRK`mv*HJ/d65LowҔQF ΃&0OQ1!GPtQCEN<0,3cij ELΩ+irH5}[."F*?nUMFV]=#"xε&|KK-KsR b# D8!'kYڿkʁ2ŭes8 1(ebܵޖ0TMK!VD9K)aٴV`#/AnFͶMMޮER7,yJײ0<LuRhu]z0,^w3r1ΰD8'7$rQ@_~즊2.j9"F Om״y5yRc>&( RFvdVc4 | 6Wd pF9g\lrMh'Uo]-T27`cryRl@TRM m4\(*ku]w}Ѷpb:Q0H&i$G4B> o1anѵ `YNkSi}J)t<sEUSZHf۔i5-@|)9ZFvkq+P ir4LTM1^=n\݆i`8xI u>LƩu7$K ^i*RP!Hc34*(5_cQ`7]'(\ Jrpf9?; h D!m{$ xq DfiNM G^m>[BI|Q,N0bX4K Dkw+XU!j0 063ů60Cׯt3xYwU '}uEO7Yxy+{ݍϋf%фl0ILz3ƪR^_2zP7˳-0p0(>\ [_B] Q0ŋ/_b4z*pl'`r|{41:^qͥz޶7l0>Ʀ݃mQY|TVu,7xy$[;cT#A.?Uevu({My fgzS@ $2L(!^D{`X$}٪zGYq~ /F4-0ƈAp,9Cå$l SwUJaAkl_2KMr\޾Ⰼ#%K6SpOQrM(zt\l7@d+/JSu=<>:܅)24+ e em6l{t,scCTJlV8 T`&IDAT1B_VOJ0D%qy]GRZɈl=4Z6{37IIG°RaqdP 7Hod%soI AN_.I ,2\e0i5(b ~ qOWwg]=&/[6ƃMuLS#MY8֒RNLndR:'@J),@wR )v5gB1(ˉ]sN]zu勔 B,sR`thPpS4JWpO8x4kLRj<`k+L'p!RB<]qxGʼ )1fc҂i1 {PLPL`* S)D05!Y­[E ѽ0zdQGJL_ QO;RIQ `z.)anPo +Jb.?kQJ4ig mc(9_ittTj/Fр&6E.aDNyynGdz"ߴx4W[{r [?a.L{8 < K ,(H(A%JcŒj(@nttM$] ݽ$uG.(rLq7m"xmI0PDu2L6J- =pێQP"1`Yy&ټЋL+?0fcծ[d'!HGg:%cbl4VC$aJ6IR1<0ApR[6Lfv-N%ygF LO(hp.\2)DE'}5-}U*'Bq=لyn@9)F$'Ôv;/JaNd R$!"K,(u `p35>\^ۦk0 I Tj4Pi5ZLڅM&Ggۻ1pyZ&-IBHD2}o䔖 wM~0\\MJpa($8gp^JQ7+Gh&5b`64Dmq\ /Ľ`_ c ֕|(VpGلW5ƀ.}o&MIflުE]Rr 1Qpo!$N^L`&Ζ҅cx31m2okZ+s ߆aUpl*+?Ν葯UQ30KΏ"ph8MQ߇519 &@cYy*WВ`E*vdD>jif[?ڮp,dq(%LGtEptP(A JQ/G5lg `zD䙘qj Fdn/}YyX%~AxG+^vOp:)N^R1Oy-8EFQkbumy'0**DӼ"PA)jҹq~W AJj0N2AGB*08ӹnDZY5Ҙ){hlpCi@Fխck߇ՍT9ա (<{;-*`Y3(:^):P8y6PN/7 A''vO`:%dz% AWYqpax uzl΢1i6f#)&G8*o]۔uP 6zpkcQÓ7d)7 LUuMx,lBkR2 sMp3<D^lۀ ]IfoXp]햃p=SL1LjT[ʦ7b`kBB1N]Fa$2]|& ߄߰(,4]LG Fɝ<0^5DT踆 'D95LZm}K*v^ FӀ`>w~GOBޗ8~{g8 ǡqff!++|ߌuoJVAgۛdmB@oT?WY~Bed7$)OXղwa)j;8~y1h3 a8? SP)" A|gfmkSA)VR|V>(GTTdph",}E?!LX,2b }Y}R p:}k$bɋZu%C+D_1~7?'1n1<DHk&a|T274"@wǃ㚈C-Aɮaw\i$"$:6fƨ}s|`VUAqn d|c}v}4&G&q\E> ZnJAn\O@GCkrg1x""b)h;y[ʎźc4|"%amth@dR3CIn0T `mdK @IH|Y8ǟ~ފ[mexob֊Tط nFs[R+ ]c59џ#C ir 8ȫFL I4wnrDy`AJb!}l ;}k.+;0RN(,g;y+AeD557ܲ j,F0|×?CǐBBuaT/GƳ[}-yg{5#ԪEo~(Yx>USzy&pqVQ+F{ƌKe]Mp]d?E0|<>? +O8.R^ R_4wu7u\;a0'} )oN*0$Uݢ;&Q_`&D!1m>ƩV:5z(rWj.7Lŭbkt00ǫ/GBǃE.b^*jtI8,M&!TsƫM4x] nb9|kb%|,"c8y9poy| 7'y;'CAzF'!ɱqcQn߲i4;jM힃wq{hukjU}4:tOe޹ P.pQJNxg-Xe}'o>&~q:WݢyF;7 FX[paYaNl1W xU)R)uć!p,J(eO-v(,f: X[@\o}G~>g 8;$LzE8Ӎ/]dI4;cw*yËpu&"f<^4x@zu) a"/p&oDyow5|.CnvR%[.-O;xi 6Ÿr )a؄^F >--v͎3S klB,xWٴ8:[.Z($3Ō]Rn{\DA"P`,ǣMp#_fDw} xhTcjDceqT A\`FKmw |. nzueW] TBhlt˄4.pqapzD M"e|2>j h_y npx 2ӤQZQHy\3Rs SY鈴7 : c~0?D1Hw*:q-oR(\UV0H4KIF w-2 ~_MZ(޼)f)}0)C( a&hb:ڼw0q/jnzopQǝӘqʂpLWrmhwfWj >b3 x[\&2_?Xo{Rx^R Oxw[`nv⮢U"N!J>mXo~ďpWA@0Sô 46lϬݕ$ˋ-Ė*%mU5G3nq~>cWpPs \Dk\*R*8-r Q6-eO_VW06_coZ`pE.Dys5   0 ƉDJ (h9r"͏|_kXB|x;X;T$mfqyIa3&E \B/TmP5t^W bG !rUq( ۜ)+&T.vΫ'sC8 .'7eֵWC\k׼6yDEIENDB`tetzle-2.1.5+dfsg1/CREDITS0000644000175000017500000000130313522554645015244 0ustar jonathanjonathanDevelopers ---------- * Graeme Gott Contributors ------------ * Frank Tetzel * Ulrik Mikaelsson Translations ------------ Catalan: Innocent De Marchi Czech: * Jan Nekvasil Dutch: * Robert Borst German: * Markus Enzenberger * Michał Trzebiatowski Esperanto: * Michael Moroni French: * Stéphane Aulery Lithuanian: * Moo Malay: * abuyop Polish: * Michał Trzebiatowski Portuguese (Brazil): * Filipe Oliveira Romanian: * Jaff (Oprea Nicolae) Russian: * Artem Krosheninnikov Spanish: * Adolfo Jayme Barrientos * josema Turkish: * Cüneyt Oktay Ukrainian: * Sergiy Gavrylov Icons ----- * Tango, http://tango.freedesktop.org/Tango_Icon_Library Libraries --------- * Qt, http://www.qt.io/ tetzle-2.1.5+dfsg1/doc/0000755000175000017500000000000013522554645014774 5ustar jonathanjonathantetzle-2.1.5+dfsg1/doc/tetzle.60000644000175000017500000000252313522554645016374 0ustar jonathanjonathan.TH "TETZLE" "6" "October 2016" .SH "NAME" tetzle \- tetromino jigsaw puzzle game .SH "SYNOPSIS" .PP .B tetzle [\fB\-G\fR \fIversion\fR] .SH "DESCRIPTION" .PP Tetzle is a jigsaw puzzle game that uses tetrominoes for the pieces. Any image can be imported and used to create puzzles with a wide range of sizes. Games are saved automatically, and you can select between currently in progress games. .SH "OPTIONS" .TP \fB\-G\fR \fIversion\fR, \fB\-\-graphics\-layer\fR\=\fIversion\fR Attempt to use the specified \fBversion\fR of OpenGL. If the requested version is larger than 2.1, Tetzle will default to the highest supported version. .SH "COPYRIGHT" .PP Copyright \(co 2016 Graeme Gott .PP 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 3 of the License, or (at your option) any later version. .PP 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. .PP You should have received a copy of the GNU General Public License along with this program. If not, see . .SH "AUTHOR" .PP Graeme Gott .